From 73019bedfb15ea6bec54bbe51ae997bf045e2e6f Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 8 Jan 2023 11:45:46 +0100 Subject: [PATCH] Keep containers around for quick rollback + restarting Now need to deal with pruning. --- lib/mrsk/commands/app.rb | 6 +++++- lib/mrsk/commands/traefik.rb | 8 ++++++-- lib/tasks/mrsk/app.rake | 9 +++++++-- lib/tasks/mrsk/mrsk.rake | 6 ++++-- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/mrsk/commands/app.rb b/lib/mrsk/commands/app.rb index 376918ff..4c1491c6 100644 --- a/lib/mrsk/commands/app.rb +++ b/lib/mrsk/commands/app.rb @@ -8,8 +8,12 @@ class Mrsk::Commands::App < Mrsk::Commands::Base "docker pull #{config.absolute_image}" end + def run + "docker run -d --restart unless-stopped --name #{config.service_with_version} #{config.envs} #{config.labels} #{config.absolute_image}" + end + def start - "docker run -d --rm --name #{config.service_with_version} #{config.envs} #{config.labels} #{config.absolute_image}" + "docker start #{config.service_with_version}" end def stop diff --git a/lib/mrsk/commands/traefik.rb b/lib/mrsk/commands/traefik.rb index b500b99c..b264727a 100644 --- a/lib/mrsk/commands/traefik.rb +++ b/lib/mrsk/commands/traefik.rb @@ -1,12 +1,16 @@ class Mrsk::Commands::Traefik < Mrsk::Commands::Base - def start + def run "docker run --name traefik " + - "--rm -d " + + "-d --restart unless-stopped " + "-p 80:80 " + "-v /var/run/docker.sock:/var/run/docker.sock " + "traefik --providers.docker" end + def start + "docker container start traefik" + end + def stop "docker container stop traefik" end diff --git a/lib/tasks/mrsk/app.rake b/lib/tasks/mrsk/app.rake index 0541c66d..21acabf6 100644 --- a/lib/tasks/mrsk/app.rake +++ b/lib/tasks/mrsk/app.rake @@ -17,7 +17,12 @@ namespace :mrsk do on(MRSK_CONFIG.servers) { execute app.pull } end - desc "Start app on servers" + desc "Run app on servers" + task :run do + on(MRSK_CONFIG.servers) { execute app.run } + end + + desc "Start existing app on servers" task :start do on(MRSK_CONFIG.servers) { execute app.start } end @@ -27,7 +32,7 @@ namespace :mrsk do on(MRSK_CONFIG.servers) { execute app.stop, raise_on_non_zero_exit: false } end - desc "Restart app on servers" + desc "Start app on servers (use VERSION= to designate which version)" task restart: %i[ stop start ] desc "Display information about app containers" diff --git a/lib/tasks/mrsk/mrsk.rake b/lib/tasks/mrsk/mrsk.rake index 52ccb8a4..9853d7eb 100644 --- a/lib/tasks/mrsk/mrsk.rake +++ b/lib/tasks/mrsk/mrsk.rake @@ -2,10 +2,12 @@ require_relative "setup" namespace :mrsk do desc "Deploy app for the first time to a fresh server" - task fresh: [ "server:bootstrap", "registry:login", "app:deliver", "traefik:start", "app:start" ] + task fresh: [ "server:bootstrap", "registry:login", "app:deliver", "traefik:start", "app:stop", "app:run" ] desc "Push the latest version of the app, ensure Traefik is running, then restart app" - task deploy: [ "registry:login", "app:deliver", "traefik:start", "app:restart" ] + task deploy: [ "registry:login", "app:deliver", "traefik:start", "app:stop", "app:run" ] + + task rollback: [ "app:restart" ] desc "Display information about Traefik and app containers" task info: [ "traefik:info", "app:info" ]