shared-infrastructure 0.0.16 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d045d1733b5238d63ba991f82ee7a0aede2aa8c9
4
- data.tar.gz: d8b39349b97ac3cdcf1042429ecd077e34899b72
3
+ metadata.gz: ef81857523282a713eba26de715419ab0edbd89e
4
+ data.tar.gz: 376a56118921b56b22886fcee1a127a664e97c31
5
5
  SHA512:
6
- metadata.gz: 765448322ab39cbabb387e56bb6d112c6c017949a12d76be23204d40efd09787e176cf033726e702dcc594c7ac5a8abf825106aef60aa37e6384f203b81d6b75
7
- data.tar.gz: e471cbb425cf5508aac4e1fcb0ba07b1f412197307982a265434d622cb66a75e42356f8ccd314ee641dc468ed950947db7cc95de0248042d79c777349a6c7e7d
6
+ metadata.gz: 0f8bcea463528193ef8ce45bd4da49e7f4db031d44af740a6be1f333a388d444b3c07e5ddf122af03caff58835a6fa94fe751848ff36c4156e8549c536a91b5a
7
+ data.tar.gz: aa185934ddd22031432fc6e85546ab87032ea4457b30655488bbbc5dae915dcb265824570dd466a1116359b0de9894d9ae348adb9b56e6a55f491e21fe860ecf
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SharedInfrastructure
2
4
  class Domain
3
5
  def available_site
@@ -20,16 +22,21 @@ module SharedInfrastructure
20
22
  @domain_name = domain_name
21
23
  end
22
24
 
23
- def production_log
24
- "/var/www/#{domain_name}/log/production.log"
25
+ def rails_env_log(rails_env = "production")
26
+ "/var/www/#{domain_name}/log/#{rails_env}.log"
27
+ end
28
+
29
+ def root
30
+ "/var/www/#{domain_name}"
25
31
  end
26
32
 
33
+ # TODO: Remove this if not needed.
27
34
  def secrets
28
35
  File.join(site_root, "secrets")
29
36
  end
30
37
 
31
38
  def site_root
32
- "/var/www/#{domain_name}/html"
39
+ File.join(root, "html")
33
40
  end
34
41
 
35
42
  attr_reader :domain_name
@@ -105,7 +105,7 @@ Finally, re-run this script to configure nginx for TLS.
105
105
  end
106
106
 
107
107
  def save
108
- FileUtils.mkdir_p(Nginx.root_directory(domain.domain_name))
108
+ FileUtils.mkdir_p(SharedInfrastructure::Output.file_name(domain.root))
109
109
  if Process.uid.zero?
110
110
  FileUtils.chown(user,
111
111
  "www-data",
@@ -120,7 +120,7 @@ Finally, re-run this script to configure nginx for TLS.
120
120
  class SiteHttp < Site
121
121
  def initialize(user, _certificate_domain = nil, domain: nil)
122
122
  super(user,
123
- Nginx::StaticServerBlock.new(
123
+ Nginx::ServerBlock.new(
124
124
  server: Nginx::StaticServer.new(domain: domain),
125
125
  listen: Nginx::ListenHttp.new,
126
126
  location: Nginx::Location.new
@@ -143,7 +143,7 @@ Finally, re-run this script to configure nginx for TLS.
143
143
  @certificate_domain = certificate_domain || domain.domain_name
144
144
 
145
145
  super(user,
146
- Nginx::StaticServerBlock.new(
146
+ Nginx::ServerBlock.new(
147
147
  server: Nginx::StaticServer.new(domain: domain),
148
148
  listen: Nginx::ListenHttps.new(domain.domain_name, certificate_domain),
149
149
  location: Nginx::Location.new
@@ -157,24 +157,28 @@ Finally, re-run this script to configure nginx for TLS.
157
157
  end
158
158
 
159
159
  class Rails < Site
160
+ def initialize(user, *server_blocks, domain: nil, rails_env: "production")
161
+ @rails_env = rails_env
162
+ super user, *server_blocks, domain: domain
163
+ end
164
+ attr_reader :rails_env
165
+
160
166
  def save
161
167
  env = {}
162
168
  %w[SECRET_KEY_BASE
163
169
  DATABASE_USERNAME
164
170
  DATABASE_PASSWORD
165
171
  EMAIL_PASSWORD].each do |var|
166
- env[var.to_sym] = if ENV[var].nil?
167
- puts "Enter #{var}: "
168
- $stdin.gets.strip
169
- else
170
- ENV[var]
171
- end
172
+ if ENV[var].nil?
173
+ puts "Enter #{var}: "
174
+ ENV[var] = $stdin.gets.strip
175
+ end
172
176
  end
173
177
  SharedInfrastructure::Output.open(File.join("/etc/logrotate.d", "#{domain.domain_name}.conf"), "w") do |io|
174
178
  io << <<~LOGROTATE
175
179
  compress
176
180
 
177
- #{domain.production_log} {
181
+ #{domain.rails_env_log(rails_env)} {
178
182
  size 1M
179
183
  rotate 4
180
184
  copytruncate
@@ -183,19 +187,16 @@ Finally, re-run this script to configure nginx for TLS.
183
187
  }
184
188
  LOGROTATE
185
189
  end &&
186
- File.open(SharedInfrastructure::Output.file_name(File.join(domain.site_root, "secrets")), "w", 0o600) do |io|
187
- io << env.map { |pair| "#{pair[0]}=#{pair[1]}\n" }.join
188
- end &&
189
- Systemd::Rails.write_unit_file(domain.domain_name, domain) &&
190
+ Systemd::Rails.write_unit_file(domain.domain_name, domain, rails_env) &&
190
191
  super
191
192
  end
192
193
  end
193
194
 
194
195
  class RailsHttp < Rails
195
- def initialize(user, _certificate_domain = nil, accel_location: nil, domain: nil)
196
+ def initialize(user, _certificate_domain = nil, accel_location: nil, domain: nil, rails_env: "production")
196
197
  accel_location = Accel.new(accel_location, domain: domain) if accel_location
197
198
  super(user,
198
- Nginx::RailsServerBlock.new(
199
+ Nginx::ServerBlock.new(
199
200
  upstream: Nginx::Upstream.new(domain.domain_name),
200
201
  server: Nginx::RailsServer.new(domain: domain),
201
202
  listen: Nginx::ListenHttp.new,
@@ -207,7 +208,8 @@ Finally, re-run this script to configure nginx for TLS.
207
208
  accel_location: accel_location,
208
209
  domain: domain
209
210
  ),
210
- domain: domain
211
+ domain: domain,
212
+ rails_env: rails_env
211
213
  )
212
214
  end
213
215
  end
@@ -215,11 +217,11 @@ Finally, re-run this script to configure nginx for TLS.
215
217
  class RailsHttps < Rails
216
218
  include Https
217
219
 
218
- def initialize(user, certificate_domain = nil, accel_location: nil, domain: nil)
220
+ def initialize(user, certificate_domain = nil, accel_location: nil, domain: nil, rails_env: "production")
219
221
  @certificate_domain = certificate_domain || domain.domain_name
220
222
  accel_location = Accel.new(accel_location, domain) if accel_location
221
223
  super(user,
222
- Nginx::RailsServerBlock.new(
224
+ Nginx::ServerBlock.new(
223
225
  upstream: Nginx::Upstream.new(domain.domain_name),
224
226
  server: Nginx::RailsServer.new(domain: domain),
225
227
  listen: Nginx::ListenHttps.new(domain.domain_name, certificate_domain),
@@ -232,7 +234,8 @@ Finally, re-run this script to configure nginx for TLS.
232
234
  domain: domain
233
235
  ),
234
236
  Nginx::TlsRedirectServerBlock.new(domain.domain_name),
235
- domain: domain
237
+ domain: domain,
238
+ rails_env: rails_env
236
239
  )
237
240
  end
238
241
 
@@ -42,31 +42,6 @@ SERVER_BLOCK
42
42
  attr_reader :accel_location, :domain, :listen, :location, :server, :upstream
43
43
  end
44
44
 
45
- class SiteServerBlock < ServerBlock
46
- def make_root_directory(root_directory)
47
- FileUtils.mkdir_p(server.root_directory)
48
- if Process.uid.zero?
49
- FileUtils.chown(server.user,
50
- "www-data",
51
- server.root_directory)
52
- end
53
- end
54
-
55
- def save
56
- make_root_directory(root_directory)
57
- super
58
- end
59
- end
60
-
61
- class RailsServerBlock < SiteServerBlock
62
- def root_directory
63
- File.join(domain.site_root, "/public")
64
- end
65
- end
66
-
67
- class StaticServerBlock < SiteServerBlock
68
- end
69
-
70
45
  class TlsRedirectServerBlock < ServerBlock
71
46
  def initialize(domain_name)
72
47
  super(
@@ -56,6 +56,10 @@ module Runner
56
56
  Runner.debug = true
57
57
  end
58
58
 
59
+ opts.on("-d RAILS_ENV", "--rails-env RAILS_ENV", "Build files for the specified RAILS_ENV") do |rails_env|
60
+ options[:rails_env] = rails_env
61
+ end
62
+
59
63
  opts.on("-P PROTOCOL",
60
64
  "--protocol PROTOCOL",
61
65
  "HTTP|HTTPS. Default: HTTPS if key files exist, else HTTP.") do |protocol|
@@ -25,8 +25,10 @@ module Runner
25
25
  user = options.delete(:user)
26
26
  certificate_domain = options.delete(:certificate_domain)
27
27
  accel_location = options.delete(:accel_location)
28
+ # FIXME: This is the wrong way to do this.
29
+ rails_env = options.delete(:rails_env) { "production" }
28
30
  domain = SharedInfrastructure::Domain.new(domain_name)
29
- protocol_class.new(user, certificate_domain, accel_location: accel_location, domain: domain)
31
+ protocol_class.new(user, certificate_domain, accel_location: accel_location, domain: domain, rails_env: rails_env)
30
32
  end
31
33
  end
32
34
  end
@@ -11,7 +11,7 @@ module Systemd
11
11
  "redis." + domain_name
12
12
  end
13
13
 
14
- def write_unit_file(domain_name, domain)
14
+ def write_unit_file(domain_name, domain, rails_env = "production")
15
15
  # if ENV["SECRET_KEY_BASE"].nil? ||
16
16
  # ENV["DATABASE_USERNAME"].nil? ||
17
17
  # ENV["DATABASE_PASSWORD"].nil? ||
@@ -42,17 +42,20 @@ module Systemd
42
42
 
43
43
  # Helpful for debugging socket activation, etc.
44
44
  # Environment=PUMA_DEBUG=1
45
- Environment=RACK_ENV=production
46
- Environment=RAILS_ENV=production
45
+ Environment=RACK_ENV=#{rails_env}
46
+ Environment=RAILS_ENV=#{rails_env}
47
47
  # FIXME: The following is the wrong place
48
- EnvironmentFile=#{domain.secrets}
48
+ Environment=SECRET_KEY_BASE=#{ENV['SECRET_KEY_BASE']}
49
+ Environment=DATABASE_USERNAME=#{ENV['DATABASE_USERNAME']}
50
+ Environment=DATABASE_PASSWORD=#{ENV['DATABASE_PASSWORD']}
51
+ Environment=EMAIL_PASSWORD=#{ENV['EMAIL_PASSWORD']}
49
52
  Environment=REDIS_URL=unix:///tmp/#{redis_location(domain_name)}.sock
50
53
 
51
54
  # The command to start Puma
52
55
  # NOTE: TLS would be handled by Nginx
53
56
  ExecStart=#{Nginx.root_directory(domain_name)}/bin/puma -b #{puma_uri(domain_name)} \
54
- --redirect-stdout=#{Nginx.root_directory(domain_name)}/log/puma-production.stdout.log \
55
- --redirect-stderr=#{Nginx.root_directory(domain_name)}/log/puma-production.stderr.log
57
+ --redirect-stdout=#{Nginx.root_directory(domain_name)}/log/puma-#{rails_env}.stdout.log \
58
+ --redirect-stderr=#{Nginx.root_directory(domain_name)}/log/puma-#{rails_env}.stderr.log
56
59
  # ExecStart=/usr/local/bin/puma -b tcp://#{puma_uri(domain_name)}
57
60
 
58
61
  Restart=always
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shared-infrastructure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Larry Reid
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-24 00:00:00.000000000 Z
11
+ date: 2018-04-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'For static sites, Rails apps, and reverse proxies.
14
14