stackose 0.1.3 → 0.2.0
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 +4 -4
- data/README.md +3 -5
- data/lib/stackose.rb +47 -28
- data/stackose.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cd9c334e1c92f496ec2540fe51d30c05dd95605
|
4
|
+
data.tar.gz: a95027f7146ce0ff78ffbecd5ba4bc0a11b90b34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ac276b5f6c9d589e8ef102136cd84e083f0f4f8b542b2c649bc8b2530bbeca82181d31f37cb3a5326361b090b4a0fdc5f4e5a76a45ce10a585a5972640e8dc8
|
7
|
+
data.tar.gz: 0a8a8023750c8868d268ab63d9406e2bce6e84a17acbda823bfc7db63cfa602129fdfc73504f8fbd790a80a9844bf5de1b0d811f7775c574be22c2d6c880b8c3
|
data/README.md
CHANGED
@@ -29,16 +29,14 @@ This gem uses couple variables which can be modified inside your deploy scripts,
|
|
29
29
|
set :stackose_commands - list of commands to be run with docker-compose, defaults to []
|
30
30
|
set :stackose_docker_mount_point - mount point inside the application container, defaults to "/usr/share/www/"
|
31
31
|
set :stackose_linked_folders - list of folders to link inside de image
|
32
|
-
set :stackose_service_to_build - name of the services with the application to run (default: ['app'])
|
32
|
+
set :stackose_service_to_build - name of the services with the application to run (default: ['app']) and should use the deploy user and group id
|
33
|
+
set :stackose_skip_image_build - true|[false] to skip the generation of the image, the compose file should have already the image defined(register) the only think is the building of compose_file with user and group id
|
33
34
|
|
34
35
|
### Folders to be linked
|
35
36
|
If you need to link shared folders to the root of your application path, like capistrano standard linked_folders do,
|
36
37
|
you can setup this like:
|
37
38
|
|
38
|
-
set :capose_linked_folders, [
|
39
|
-
'tmp/cache',
|
40
|
-
'tmp/sockets',
|
41
|
-
'public/system',
|
39
|
+
set :capose_linked_folders, [ 'public/system',
|
42
40
|
'public/pictures',
|
43
41
|
'public/attachments',
|
44
42
|
'public/pages',
|
data/lib/stackose.rb
CHANGED
@@ -97,34 +97,48 @@ namespace :stackose do
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
+
|
100
101
|
base_image_name = "#{fetch(:stackose_project)}:#{fetch(:stackose_image_tag)}"
|
101
102
|
compose_override = "docker-compose-image-override.yml"
|
102
103
|
|
103
|
-
|
104
|
+
|
104
105
|
on roles(fetch(:stackose_role)) do
|
105
106
|
within release_path do
|
106
107
|
with fetch(:stackose_env) do
|
107
108
|
|
108
109
|
user_id = capture :id, '-u'
|
109
110
|
group_id = capture :id, '-g'
|
110
|
-
|
111
|
-
execute :docker, :build, "-t #{base_image_name} ."
|
112
|
-
|
113
111
|
services_to_build = fetch(:stackose_service_to_build, ['app'])
|
114
|
-
|
115
112
|
services_to_build = [services_to_build].flatten
|
116
113
|
|
114
|
+
if fetch(:stackose_skip_image_build, false)
|
115
|
+
#skippando la costruzione dell'immagine dobbiamo però inserire nei servizi, se non già presente, il vero utente di appartenenza
|
116
|
+
#
|
117
|
+
|
118
|
+
compose_production = {
|
119
|
+
version: '3',
|
120
|
+
services: services_to_build.collect {|s|
|
121
|
+
[s.to_sym, {
|
122
|
+
user: "#{user_id}:#{group_id}"
|
123
|
+
}]
|
124
|
+
}.to_h
|
125
|
+
}
|
126
|
+
else
|
127
|
+
## costruiamo l'immagine
|
128
|
+
execute :docker, :build, "-t #{base_image_name} ."
|
129
|
+
|
130
|
+
|
131
|
+
compose_production = {
|
132
|
+
version: '3',
|
133
|
+
services: services_to_build.collect {|s|
|
134
|
+
[s.to_sym, {
|
135
|
+
image: base_image_name,
|
136
|
+
user: "#{user_id}:#{group_id}"
|
137
|
+
}]
|
138
|
+
}.to_h
|
139
|
+
}
|
117
140
|
|
118
|
-
|
119
|
-
version: '3',
|
120
|
-
services: services_to_build.collect {|s|
|
121
|
-
[s.to_sym, {
|
122
|
-
image: base_image_name,
|
123
|
-
user: "#{user_id}:#{group_id}"
|
124
|
-
}]
|
125
|
-
}.to_h
|
126
|
-
}
|
127
|
-
|
141
|
+
end
|
128
142
|
contents = StringIO.new(JSON[compose_production.to_json].to_yaml)
|
129
143
|
upload! contents, "#{release_path}/#{compose_override}"
|
130
144
|
|
@@ -139,11 +153,15 @@ namespace :stackose do
|
|
139
153
|
on roles(fetch(:stackose_role)) do
|
140
154
|
within release_path do
|
141
155
|
with fetch(:stackose_env) do
|
156
|
+
|
157
|
+
execute :"docker-compose", _command('pull')
|
158
|
+
|
159
|
+
|
142
160
|
fetch(:stackose_commands).each do |command|
|
143
161
|
execute :"docker-compose", _command(command)
|
144
162
|
end
|
145
163
|
|
146
|
-
execute :docker, :stack, :deploy, "-c #{fetch(:stackose_file).join(' -c ')} #{fetch(:stackose_project)}"
|
164
|
+
execute :docker, :stack, :deploy, "--prune", "-c #{fetch(:stackose_file).join(' -c ')} #{fetch(:stackose_project)}"
|
147
165
|
|
148
166
|
end
|
149
167
|
end
|
@@ -158,12 +176,6 @@ namespace :stackose do
|
|
158
176
|
with fetch(:stackose_env) do
|
159
177
|
|
160
178
|
|
161
|
-
stopped_containers = capture :docker, :ps, "--all -f 'status=exited' -f 'label=com.docker.stack.namespace=#{fetch(:stackose_project)}'", '--format "{{.ID}}"'
|
162
|
-
|
163
|
-
stopped_containers = stopped_containers.split
|
164
|
-
|
165
|
-
execute(:docker, :rm, stopped_containers) if stopped_containers.length > 0
|
166
|
-
|
167
179
|
tags_list = capture :docker, :images, fetch(:stackose_project).to_sym, '--format "{{.Tag}}"'
|
168
180
|
|
169
181
|
list = tags_list.split
|
@@ -190,10 +202,14 @@ namespace :stackose do
|
|
190
202
|
ask(:need_redis_service, true)
|
191
203
|
|
192
204
|
|
205
|
+
services_to_build = fetch(:stackose_service_to_build, ['app'])
|
206
|
+
|
207
|
+
services_to_build = [services_to_build].flatten
|
208
|
+
|
193
209
|
compose_production = {
|
194
210
|
version: '3',
|
195
|
-
services: {
|
196
|
-
|
211
|
+
services: services_to_build.collect {|s|
|
212
|
+
[s.to_sym, {
|
197
213
|
restart: 'unless-stopped',
|
198
214
|
environment: {:RAILS_ENV => fetch(:rails_env).to_s,
|
199
215
|
:RAILS_SERVE_STATIC_FILES => 'true',
|
@@ -213,8 +229,8 @@ namespace :stackose do
|
|
213
229
|
k.join(':')
|
214
230
|
end,
|
215
231
|
ports: ["#{fetch(:exposed_port)}:3000"]
|
216
|
-
}
|
217
|
-
}
|
232
|
+
}]
|
233
|
+
}.to_h
|
218
234
|
}
|
219
235
|
|
220
236
|
if fetch(:need_redis_service)
|
@@ -231,7 +247,9 @@ namespace :stackose do
|
|
231
247
|
}
|
232
248
|
}
|
233
249
|
|
234
|
-
|
250
|
+
services_to_build.each do |srv|
|
251
|
+
compose_production[:services][srv.to_sym].merge!({depends_on: ['redis']})
|
252
|
+
end
|
235
253
|
|
236
254
|
File.open("config/redis.conf", 'w') {|file| file.write("maxmemory 50mb\nmaxmemory-policy allkeys-lfu")}
|
237
255
|
end
|
@@ -271,7 +289,7 @@ namespace :stackose do
|
|
271
289
|
database: /usr/share/application_storage/production.sqlite3
|
272
290
|
"
|
273
291
|
|
274
|
-
File.open("docker-compose
|
292
|
+
File.open("docker-compose-#{fetch(:stage)}.yml", 'w') {|file| file.write(JSON[compose_production.to_json].to_yaml)}
|
275
293
|
end
|
276
294
|
|
277
295
|
end
|
@@ -282,6 +300,7 @@ namespace :load do
|
|
282
300
|
set :stackose_copy, -> {[]}
|
283
301
|
set :stackose_project, -> {fetch(:application)}
|
284
302
|
set :stackose_file, -> {["docker-compose.yml", "docker-compose-#{fetch(:stage)}.yml"]}
|
303
|
+
set :stackose_skip_image_build, -> {false} #Skip full image generation in swarm, the compose file must already include the image name
|
285
304
|
set :stackose_env, -> {{}}
|
286
305
|
set :stackose_image_tag, -> {fetch(:release_timestamp)}
|
287
306
|
set :stackose_service_to_build, -> {['app']}
|
data/stackose.gemspec
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = 'stackose'
|
6
|
-
spec.version = '0.
|
6
|
+
spec.version = '0.2.0'
|
7
7
|
spec.authors = ["Marino Bonetti"]
|
8
8
|
spec.email = ["marinobonetti@gmail.com"]
|
9
9
|
spec.description = %q{Docker-Stack support for Capistrano 3.x}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stackose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marino Bonetti
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|