mrsk 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,98 +0,0 @@
1
- require_relative "setup"
2
-
3
- app = Mrsk::Commands::App.new(MRSK_CONFIG)
4
-
5
- namespace :mrsk do
6
- namespace :app do
7
- desc "Deliver a newly built app image to servers"
8
- task deliver: %i[ push pull ]
9
-
10
- desc "Build locally and push app image to registry"
11
- task :push do
12
- run_locally { execute *app.push } unless ENV["VERSION"]
13
- end
14
-
15
- desc "Pull app image from the registry onto servers"
16
- task :pull do
17
- on(MRSK_CONFIG.hosts) { execute *app.pull }
18
- end
19
-
20
- desc "Run app on servers (or start them if they've already been run)"
21
- task :run do
22
- MRSK_CONFIG.roles.each do |role|
23
- on(role.hosts) do |host|
24
- begin
25
- execute *app.run(role: role.name)
26
- rescue SSHKit::Command::Failed => e
27
- if e.message =~ /already in use/
28
- puts "Container with same version already deployed on #{host}, starting that instead"
29
- execute *app.start, host: host
30
- else
31
- raise
32
- end
33
- end
34
- end
35
- end
36
- end
37
-
38
- desc "Start existing app on servers"
39
- task :start do
40
- on(MRSK_CONFIG.hosts) { execute *app.start, raise_on_non_zero_exit: false }
41
- end
42
-
43
- desc "Stop app on servers"
44
- task :stop do
45
- on(MRSK_CONFIG.hosts) { execute *app.stop, raise_on_non_zero_exit: false }
46
- end
47
-
48
- desc "Start app on servers (use VERSION=<git-hash> to designate which version)"
49
- task restart: %i[ stop start ]
50
-
51
- desc "Display information about app containers"
52
- task :info do
53
- on(MRSK_CONFIG.hosts) { |host| puts "App Host: #{host}\n" + capture(*app.info) + "\n\n" }
54
- end
55
-
56
- desc "Execute a custom task on servers passed in as CMD='bin/rake some:task'"
57
- task :exec do
58
- on(MRSK_CONFIG.hosts) { |host| puts "App Host: #{host}\n" + capture(*app.exec(ENV["CMD"])) + "\n\n" }
59
- end
60
-
61
- namespace :exec do
62
- desc "Execute Rails command on servers, like CMD='runner \"puts %(Hello World)\""
63
- task :rails do
64
- on(MRSK_CONFIG.hosts) { |host| puts "App Host: #{host}\n" + capture(*app.exec("bin/rails", ENV["CMD"])) + "\n\n" }
65
- end
66
-
67
- desc "Execute a custom task on the first defined server"
68
- task :once do
69
- on(MRSK_CONFIG.primary_host) { |host| puts capture(*app.exec(ENV["CMD"])) }
70
- end
71
-
72
- namespace :once do
73
- desc "Execute Rails command on the first defined server, like CMD='runner \"puts %(Hello World)\""
74
- task :rails do
75
- on(MRSK_CONFIG.primary_host) { puts capture(*app.exec("bin/rails", ENV["CMD"])) }
76
- end
77
- end
78
- end
79
-
80
- desc "List all the app containers currently on servers"
81
- task :containers do
82
- on(MRSK_CONFIG.hosts) { |host| puts "App Host: #{host}\n" + capture(*app.list_containers) + "\n\n" }
83
- end
84
-
85
- desc "Tail logs from app containers"
86
- task :logs do
87
- on(MRSK_CONFIG.hosts) { execute *app.logs }
88
- end
89
-
90
- desc "Remove app containers and images from servers"
91
- task remove: %i[ stop ] do
92
- on(MRSK_CONFIG.hosts) do
93
- execute *app.remove_containers
94
- execute *app.remove_images
95
- end
96
- end
97
- end
98
- end
@@ -1,26 +0,0 @@
1
- require_relative "setup"
2
-
3
- namespace :mrsk do
4
- desc "Deploy app for the first time to a fresh server"
5
- task fresh: %w[ server:bootstrap registry:login app:deliver traefik:run app:stop app:run ]
6
-
7
- desc "Push the latest version of the app, ensure Traefik is running, then restart app"
8
- task deploy: %w[ registry:login app:deliver traefik:run app:stop app:run prune ]
9
-
10
- desc "Rollback to VERSION=x that was already run as a container on servers"
11
- task rollback: %w[ app:restart ]
12
-
13
- desc "Display information about Traefik and app containers"
14
- task info: %w[ traefik:info app:info ]
15
-
16
- desc "Create config stub in config/deploy.yml"
17
- task :init do
18
- require "fileutils"
19
- FileUtils.cp_r \
20
- Pathname.new(File.expand_path("templates/deploy.yml", __dir__)),
21
- Rails.root.join("config/deploy.yml")
22
- end
23
-
24
- desc "Remove Traefik, app, and registry session from servers"
25
- task remove: %w[ traefik:remove app:remove registry:logout ]
26
- end
@@ -1,18 +0,0 @@
1
- require_relative "setup"
2
-
3
- namespace :mrsk do
4
- desc "Prune unused images and stopped containers"
5
- task prune: %w[ prune:containers prune:images ]
6
-
7
- namespace :prune do
8
- desc "Prune unused images older than 30 days"
9
- task :images do
10
- on(MRSK_CONFIG.hosts) { execute "docker image prune -f --filter 'until=720h'" }
11
- end
12
-
13
- desc "Prune stopped containers for the service older than 3 days"
14
- task :containers do
15
- on(MRSK_CONFIG.hosts) { execute "docker container prune -f --filter label=service=#{MRSK_CONFIG.service} --filter 'until=72h'" }
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- require_relative "setup"
2
-
3
- registry = Mrsk::Commands::Registry.new(MRSK_CONFIG)
4
-
5
- namespace :mrsk do
6
- namespace :registry do
7
- desc "Login to the registry locally and remotely"
8
- task :login do
9
- run_locally { execute *registry.login }
10
- on(MRSK_CONFIG.hosts) { execute *registry.login }
11
- end
12
-
13
- desc "Logout of the registry remotely"
14
- task :logout do
15
- on(MRSK_CONFIG.hosts) { execute *registry.logout }
16
- end
17
- end
18
- end
@@ -1,11 +0,0 @@
1
- require_relative "setup"
2
-
3
- namespace :mrsk do
4
- namespace :server do
5
- desc "Setup Docker on the remote servers"
6
- task :bootstrap do
7
- # FIXME: Detect when apt-get is not available and use the appropriate alternative
8
- on(MRSK_CONFIG.hosts) { execute "apt-get install docker.io -y" }
9
- end
10
- end
11
- end
@@ -1,16 +0,0 @@
1
- require "sshkit"
2
- require "sshkit/dsl"
3
-
4
- include SSHKit::DSL
5
-
6
- if (config_file = Rails.root.join("config/deploy.yml")).exist?
7
- MRSK_CONFIG = Mrsk::Configuration.load_file(config_file)
8
-
9
- SSHKit::Backend::Netssh.configure { |ssh| ssh.ssh_options = MRSK_CONFIG.ssh_options }
10
-
11
- # No need to use /usr/bin/env, just clogs up the logs
12
- SSHKit.config.command_map[:docker] = "docker"
13
- else
14
- # MRSK is missing config/deploy.yml – run 'rake mrsk:init'
15
- MRSK_CONFIG = Mrsk::Configuration.new({}, validate: false)
16
- end
@@ -1,21 +0,0 @@
1
- # Name of your application will be used for uniquely configuring Traefik and app containers.
2
- # Your Dockerfile should set LABEL service=the-same-value to ensure image pruning works.
3
- service: my-app
4
-
5
- # Name of the container image
6
- image: user/chat
7
-
8
- # All the servers targeted for deploy. You can reference a single server for a command by using SERVERS=xxx.xxx.xxx.xxx
9
- servers:
10
- - xxx.xxx.xxx.xxx
11
-
12
- # The following envs are made available to the container when started
13
- env:
14
- # Remember never to put passwords or tokens directly into this file, use encrypted credentials
15
- # REDIS_URL: redis://x/y
16
-
17
- registry:
18
- # Specify the registry server, if you're not using Docker Hub
19
- # server: registry.digitalocean.com / ghcr.io / ...
20
- username: <%= Rails.application.credentials.registry["username"] %>
21
- password: <%= Rails.application.credentials.registry["password"] %>
@@ -1,38 +0,0 @@
1
- require_relative "setup"
2
-
3
- traefik = Mrsk::Commands::Traefik.new(MRSK_CONFIG)
4
-
5
- namespace :mrsk do
6
- namespace :traefik do
7
- desc "Run Traefik on servers"
8
- task :run do
9
- on(MRSK_CONFIG.role(:web).hosts) { execute *traefik.run, raise_on_non_zero_exit: false }
10
- end
11
-
12
- desc "Start existing Traefik on servers"
13
- task :start do
14
- on(MRSK_CONFIG.role(:web).hosts) { execute *traefik.start, raise_on_non_zero_exit: false }
15
- end
16
-
17
- desc "Stop Traefik on servers"
18
- task :stop do
19
- on(MRSK_CONFIG.role(:web).hosts) { execute *traefik.stop, raise_on_non_zero_exit: false }
20
- end
21
-
22
- desc "Restart Traefik on servers"
23
- task restart: %i[ stop start ]
24
-
25
- desc "Display information about Traefik containers from servers"
26
- task :info do
27
- on(MRSK_CONFIG.role(:web).hosts) { |host| puts "Traefik Host: #{host}\n" + capture(*traefik.info) + "\n\n" }
28
- end
29
-
30
- desc "Remove Traefik container and image from servers"
31
- task remove: %i[ stop ] do
32
- on(MRSK_CONFIG.role(:web).hosts) do
33
- execute *traefik.remove_container
34
- execute *traefik.remove_image
35
- end
36
- end
37
- end
38
- end