mina-unicorn_systemd 0.0.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f61e026a1e150bdc56cc14d0c20871a9ac4ab39f6a519de09d3debd713e210ab
4
- data.tar.gz: 8db9dc35c5a631ad6488feb2c8d301cd893a03f931824e01dc2be3861a699431
3
+ metadata.gz: 6123396e12d908365364a32d70b1bb5d124a93b5eae7a63ed07d6bd42cffb2e9
4
+ data.tar.gz: e5b0aa4b22c8bd93775a4776e83ec03a4f2307c9723a7dadfc919d3a73305897
5
5
  SHA512:
6
- metadata.gz: 3467ec21d4ae700d9bbd2dda8ce6f5906ca0358e789693caab816a458bb465154b7a394f2b2f1a642566ebd122a38e7eae8e2996c79cab2e555233dfb14b0609
7
- data.tar.gz: edb3c9611090d1dc8d09f4af1e5bd5ced4d206438e0f38a2439de90b1d4140a21ead936f1afdfa99236baa15dd9be98bf98f0964f318de953f5176b0afe8e137
6
+ metadata.gz: de663882a915c36815baa6fbbcc007b44e3fd3fcb0833166b9d53398b9ea7358b88110660de72504bc8de3dce31ba68ca51296c1a8998f26ff7505f942024254
7
+ data.tar.gz: 9a293f8c095a30c878f2ab0489d6feac95e1331b59faa4ef79da2895321a68e4696b65d9652d059e71e93ed25d5d18f196006252ec0ebd77848149ee493f47b9
data/README.md CHANGED
@@ -9,7 +9,6 @@ This gem assumes that you
9
9
  * Are on a Linux system with systemd in /etc/systemd/
10
10
  * Are using RVM to manage your Ruby version
11
11
  * That the setup task has sudoer or root permissions or that you are running with execution_mode :system and are entering passwords. If your regular user does not have sudo, then you can set the `setup_user` to the name of a user who does.
12
- * Want to run nginx in front and that you want to update nginx configuration to point to unicorn instead.
13
12
 
14
13
  ## Basic installation instructions
15
14
 
@@ -32,14 +31,18 @@ require 'mina/nginx'
32
31
  require 'mina/unicorn'
33
32
  ```
34
33
 
35
- 3. Manually run `'mina unicorn:setup'` or invoke from your own setup task.
34
+ 3. Manually run `'mina unicorn:setup'` or invoke from your own setup task to enable all one time tasks.
36
35
 
37
- 4. Manually run `'mina unicorn:restart'` or invoke from your own deploy task.
36
+ 4. Once you are ready to enable unicorn run `'mina unicorn:enable'` to enable the systemd service (persists across reboots).
37
+
38
+ 5. To manually restart unicorn after a deploy use `'mina unicorn:restart'`.
38
39
 
39
40
  ## Customization
40
41
 
41
42
  To change the unicorn systemd service template and/or the `unicorn_conf.rb`, run `'mina unicorn:generate'`.
42
43
 
44
+ By default `mina-unicorn_systemd` is running unicorn as a user service (`systemd --user`), but the unicorn service template also includes settings for running as a system service. To enable this, add `set :unicorn_system_or_user, 'system'` to the top of your `deploy.rb`.
45
+
43
46
  ## Contributing
44
47
 
45
48
  1. Fork it ( http://github.com/coezbek/mina-unicorn_systemd/fork )
@@ -9,10 +9,11 @@ After=network.target
9
9
  [Service]
10
10
  Type=forking
11
11
  WorkingDirectory=/home/<%= application %>/app/
12
-
12
+ <% if !is_unicorn_user_installation? %>
13
13
  <%# Use the defined user and fall back to the application name -%>
14
- User=<%= fetch :user, application %>
14
+ User=<%= fetch :user, application %>
15
15
 
16
+ <% end %>
16
17
  #
17
18
  # How to actually start Unicorn?
18
19
  #
@@ -40,4 +41,8 @@ RestartSec=1
40
41
  PIDFile=/home/<%= application %>/app/shared/unicorn.pid
41
42
 
42
43
  [Install]
43
- WantedBy=multi-user.target
44
+ <% if is_unicorn_user_installation? %>
45
+ WantedBy=default.target
46
+ <% else %>
47
+ WantedBy=multi-user.target
48
+ <% end %>
@@ -6,7 +6,16 @@ require "mina/unicorn/version"
6
6
  namespace :unicorn do
7
7
 
8
8
  set :unicorn_service_name, -> { "unicorn-#{fetch(:application_name)}.service" }
9
- set :unicorn_systemd_config_path, -> { "/etc/systemd/system/#{fetch :unicorn_service_name}" }
9
+
10
+ set :unicorn_system_or_user, -> { "user" }
11
+
12
+ set :unicorn_systemd_config_path, -> {
13
+ if is_unicorn_user_installation?
14
+ "$HOME/.config/systemd/user/#{fetch :unicorn_service_name}"
15
+ else
16
+ "/etc/systemd/system/#{fetch :unicorn_service_name}"
17
+ end
18
+ }
10
19
 
11
20
  set :nginx_socket_path, -> { "#{fetch(:shared_path)}/unicorn.sock" }
12
21
 
@@ -27,48 +36,70 @@ namespace :unicorn do
27
36
  end
28
37
  end
29
38
 
30
- desc "Setup Unicorn systemd service on the remote server"
39
+ desc "Setup Unicorn systemd service on the remote server (but doesn't start it)"
31
40
  task :setup do
32
41
 
33
- elevate
34
-
35
- comment %(Check for systemd on remote server)
36
- command %([[ `systemctl` =~ -\.mount ]] || { echo 'Systemd not found, but mina-unicorn_systemd needs it.'; exit 1; }) # From https://unix.stackexchange.com/a/164092
37
-
42
+ # Fetch these before elevation!
43
+ username = fetch(:user)
38
44
  target_path = fetch :unicorn_systemd_config_path
45
+ template = erb template_path
46
+
47
+ unicorn_elevate do
48
+ run :remote do
49
+
50
+ comment %(Check for systemd on remote server)
51
+ command %([[ `systemctl` =~ -\.mount ]] || { echo 'Systemd not found, but mina-unicorn_systemd needs it.'; exit 1; }) # From https://unix.stackexchange.com/a/164092
52
+
53
+ if is_unicorn_user_installation?
54
+ comment %(Check for libpam on remote server)
55
+ command %(DEBIAN_FRONTEND=noninteractive apt -yqq install libpam-systemd)
56
+
57
+ comment %(Enable linger for systemd --user)
58
+ command %(loginctl enable-linger #{username} || { echo 'Could not enable linger for user #{username} but mina-unicorn_systemd needs it.'; exit 1; })
59
+ end
60
+
61
+ comment %(Installing unicorn systemd config file to #{target_path})
62
+ command %(mkdir -p $(dirname #{target_path}))
63
+ command %(echo '#{template}' > #{target_path})
39
64
 
40
- comment %(Installing unicorn systemd config file to #{target_path})
41
- command %(echo '#{erb template_path}' > #{target_path})
65
+ comment %(Reloading systemd configuration)
66
+ command %(systemctl#{" --user" if is_unicorn_user_installation?} daemon-reload || { echo 'If this command fails in user mode then you likely have disabled UsePAM in your /etc/ssh/sshd_config which is needed'; exit 1; }) # https://superuser.com/a/1561345/32638
42
67
 
43
- comment %(Reloading systemd configuration)
44
- command %(systemctl daemon-reload)
68
+ end
69
+ end
45
70
 
46
71
  end
47
72
 
48
73
  desc "Get the status of the Unicorn systemd service on the remote server"
49
74
  task :status do
50
- command %(systemctl status #{fetch :unicorn_service_name})
75
+ command command_systemd_raw("status")
51
76
  end
52
77
 
53
- desc "Start the Unicorn systemd service on the remote server"
54
- task :start do
55
- elevate
56
- # Start the service and if it fails print the error information
57
- command %((systemctl start #{fetch :unicorn_service_name} && systemctl status #{fetch :unicorn_service_name}) || journalctl --no-pager _SYSTEMD_INVOCATION_ID=`systemctl show -p InvocationID --value #{fetch :unicorn_service_name}`)
58
- end
59
-
60
- desc "Stop the Unicorn systemd service on the remote server"
61
- task :stop do
62
- elevate
63
- command %((systemctl stop #{fetch :unicorn_service_name} && systemctl status #{fetch :unicorn_service_name}) || journalctl --no-pager _SYSTEMD_INVOCATION_ID=`systemctl show -p InvocationID --value #{fetch :unicorn_service_name}`)
64
- end
65
-
66
- desc "Restart the Unicorn systemd service on the remote server"
67
- task :restart do
68
- elevate
69
- command %((systemctl restart #{fetch :unicorn_service_name} && systemctl status #{fetch :unicorn_service_name}) || journalctl --no-pager _SYSTEMD_INVOCATION_ID=`systemctl show -p InvocationID --value #{fetch :unicorn_service_name}`)
70
- end
71
-
78
+ %w(start stop restart enable disable).each { |verb|
79
+ desc "#{verb.capitalize} the Unicorn systemd service on the remote server"
80
+
81
+ task verb.to_sym do
82
+
83
+ if is_unicorn_user_installation?
84
+
85
+ run :remote do
86
+ command_systemd verb
87
+ end
88
+
89
+ else
90
+
91
+ unicorn_elevate do
92
+ run :remote do
93
+ command_systemd verb
94
+ end
95
+ end
96
+
97
+ end
98
+
99
+ end
100
+
101
+ }
102
+
72
103
  # Returns the path to the template to use. Depending on whether the internal template was customized.
73
104
  def template_path
74
105
 
@@ -77,14 +108,41 @@ namespace :unicorn do
77
108
 
78
109
  File.exist?(custom_path) ? custom_path : original_path
79
110
  end
111
+
112
+ def is_unicorn_user_installation?
113
+ case fetch(:unicorn_system_or_user)
114
+ when "user"
115
+ true
116
+ when "system"
117
+ false
118
+ else
119
+ raise "Undefined unicorn_system_or_user value. Must be 'user' or 'system'."
120
+ end
121
+ end
122
+
123
+ def command_systemd_raw verb
124
+ return %(systemctl#{" --user" if is_unicorn_user_installation?} #{verb} #{fetch :unicorn_service_name})
125
+ end
126
+
127
+ # Execute the systemd verb action and if it fails print the error information
128
+ def command_systemd verb
129
+ c = %((#{command_systemd_raw(verb)} && #{command_systemd_raw("status")}) || journalctl #{" --user" if is_unicorn_user_installation?} --no-pager _SYSTEMD_INVOCATION_ID=`systemctl #{" --user" if is_unicorn_user_installation?} show -p InvocationID --value #{fetch :unicorn_service_name}`)
130
+
131
+ comment c
132
+ command c
133
+ end
80
134
 
81
- def elevate
82
-
135
+ def unicorn_elevate
136
+
83
137
  user = fetch(:user)
84
138
  setup_user = fetch(:setup_user, user)
85
- if setup_user != user
139
+ if setup_user && setup_user != user
86
140
  comment %{Switching to setup_user (#{setup_user})}
87
141
  set :user, setup_user
142
+ yield
143
+ set :user, user
144
+ else
145
+ yield
88
146
  end
89
147
 
90
148
  end
@@ -99,7 +157,8 @@ namespace :unicorn do
99
157
  desc "Print current Unicorn systemd service config from remote"
100
158
  task :print_remote do
101
159
  unicorn_systemd_config_path = fetch :unicorn_systemd_config_path
102
- command %(cat #{unicorn_systemd_config_path})
160
+ comment %(Printing content of #{unicorn_systemd_config_path} from remote server)
161
+ command %(cat #{unicorn_systemd_config_path} || echo "Hello")
103
162
  end
104
163
 
105
164
  end
@@ -1,5 +1,5 @@
1
1
  module Mina
2
2
  module Unicorn
3
- VERSION = '0.0.1'.freeze
3
+ VERSION = '0.9.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mina-unicorn_systemd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - coezbek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-02 00:00:00.000000000 Z
11
+ date: 2020-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mina