dockerfile-rails 1.0.0 → 1.0.2
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/DEMO.md +28 -0
- data/README.md +1 -1
- data/lib/dockerfile-rails/scanner.rb +1 -3
- data/lib/generators/dockerfile_generator.rb +62 -5
- data/lib/generators/templates/Dockerfile.erb +10 -8
- data/lib/generators/templates/_apt_install.erb +3 -3
- data/lib/generators/templates/_npm_install.erb +4 -1
- data/lib/generators/templates/docker-compose.yml.erb +23 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0227d5ff2b7d0a0d42d48ba7e3be63280ea528f3f80417a6419dfebbec44b3a7
|
|
4
|
+
data.tar.gz: ee9b4b14b72b85193a6e7b54862f6643b02896c5ff4636b294a845e7ae6a1b35
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2e9f99b443c3cab5dca0d5800eb996b7f727ef0dbfcf44ad0e1586edf1ed9691b3cafbf1c608f207a55c63fd9d768e2796c4d3644c3e6715214ca5aa159ae122
|
|
7
|
+
data.tar.gz: 6980319c05859df14c35649159c874271162ff83ac1c2918e4c959c93f6f39b29f5a4002cbf9305f82404ae8b5d00ee4d0e401e420c37a86abb6b0c8362adcf8
|
data/DEMO.md
CHANGED
|
@@ -275,3 +275,31 @@ bin/rails generate dockerfile
|
|
|
275
275
|
docker buildx build . -t rails-welcome
|
|
276
276
|
docker run -p 3000:3000 -e RAILS_MASTER_KEY=$(cat config/master.key) rails-welcome
|
|
277
277
|
```
|
|
278
|
+
|
|
279
|
+
# Demo 5 - Grover / puppeteer / Chrome
|
|
280
|
+
|
|
281
|
+
This demo runs only on Intel hardware as Google doesn't supply Chrome
|
|
282
|
+
binaries for Linux on ARM.
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
rails new welcome --minimal
|
|
286
|
+
cd welcome
|
|
287
|
+
bundle add grover
|
|
288
|
+
npm install puppeteer
|
|
289
|
+
|
|
290
|
+
echo 'Rails.application.routes.draw { root "grover#pdf" }' > config/routes.rb
|
|
291
|
+
|
|
292
|
+
cat << 'EOF' > app/controllers/grover_controller.rb
|
|
293
|
+
class GroverController < ApplicationController
|
|
294
|
+
def pdf
|
|
295
|
+
grover = Grover.new('https://google.com', format: 'A4')
|
|
296
|
+
send_data grover.to_pdf, filename: 'google.pdf', type: :pdf
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
EOF
|
|
300
|
+
|
|
301
|
+
bundle add dockerfile-rails --group development
|
|
302
|
+
bin/rails generate dockerfile
|
|
303
|
+
docker buildx build . -t rails-welcome
|
|
304
|
+
docker run -p 3000:3000 -e RAILS_MASTER_KEY=$(cat config/master.key) rails-welcome
|
|
305
|
+
```
|
data/README.md
CHANGED
|
@@ -10,7 +10,7 @@ Provides a Rails generator to produce Dockerfiles and related files. This is be
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
|
12
12
|
```
|
|
13
|
-
bundle add dockerfile-rails --
|
|
13
|
+
bundle add dockerfile-rails --optimistic --group development
|
|
14
14
|
bin/rails generate dockerfile
|
|
15
15
|
```
|
|
16
16
|
|
|
@@ -40,9 +40,7 @@ module DockerfileRails
|
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
@sidekiq = @gemfile.include? 'sidekiq'
|
|
44
43
|
@anycable = @gemfile.include? 'anycable-rails'
|
|
45
|
-
@rmagick = @gemfile.include? 'rmagick'
|
|
46
44
|
@vips = @gemfile.include? 'ruby-vips'
|
|
47
45
|
@bootstrap = @gemfile.include? 'bootstrap'
|
|
48
46
|
@puppeteer = @gemfile.include? 'puppeteer'
|
|
@@ -73,7 +71,7 @@ module DockerfileRails
|
|
|
73
71
|
@redis_cache = true
|
|
74
72
|
end
|
|
75
73
|
|
|
76
|
-
@redis = @redis_cable || @redis_cache
|
|
74
|
+
@redis = @redis_cable || @redis_cache
|
|
77
75
|
end
|
|
78
76
|
end
|
|
79
77
|
end
|
|
@@ -142,11 +142,19 @@ private
|
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
def using_redis?
|
|
145
|
-
options.redis? or @redis
|
|
145
|
+
options.redis? or @redis or @gemfile.include?('sidekiq')
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
def using_execjs?
|
|
149
|
-
@gemfile.include?
|
|
149
|
+
@gemfile.include?('execjs') or @gemfile.include?('grover')
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def using_puppeteer?
|
|
153
|
+
@gemfile.include?('grover') or @gemfile.include?('puppeteer-ruby')
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def using_sidekiq?
|
|
157
|
+
@gemfile.include?('sidekiq')
|
|
150
158
|
end
|
|
151
159
|
|
|
152
160
|
def parallel?
|
|
@@ -172,6 +180,27 @@ private
|
|
|
172
180
|
end
|
|
173
181
|
end
|
|
174
182
|
|
|
183
|
+
def base_packages
|
|
184
|
+
packages = []
|
|
185
|
+
|
|
186
|
+
if using_execjs?
|
|
187
|
+
packages += %w(curl unzip)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
if using_puppeteer?
|
|
191
|
+
packages += %w(curl gnupg)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
packages.sort.uniq
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def base_requirements
|
|
198
|
+
requirements = []
|
|
199
|
+
requirements << 'nodejs' if using_execjs?
|
|
200
|
+
requirements << 'chrome' if using_puppeteer?
|
|
201
|
+
requirements.join(' and ')
|
|
202
|
+
end
|
|
203
|
+
|
|
175
204
|
def build_packages
|
|
176
205
|
# start with the essentials
|
|
177
206
|
packages = %w(build-essential)
|
|
@@ -184,7 +213,7 @@ private
|
|
|
184
213
|
# add git if needed to install gems
|
|
185
214
|
packages << 'git' if @git
|
|
186
215
|
|
|
187
|
-
# add redis
|
|
216
|
+
# add redis if Action Cable, caching, or sidekiq are used
|
|
188
217
|
packages << "redis" if options.redis? or using_redis?
|
|
189
218
|
|
|
190
219
|
# ActiveStorage preview support
|
|
@@ -196,7 +225,7 @@ private
|
|
|
196
225
|
# node support, including support for building native modules
|
|
197
226
|
if using_node?
|
|
198
227
|
packages += %w(node-gyp pkg-config)
|
|
199
|
-
packages += %w(curl unzip) unless using_execjs?
|
|
228
|
+
packages += %w(curl unzip) unless using_execjs? or using_puppeteer?
|
|
200
229
|
|
|
201
230
|
# module build process depends on Python, and debian changed
|
|
202
231
|
# how python is installed with the bullseye release. Below
|
|
@@ -236,11 +265,34 @@ private
|
|
|
236
265
|
packages << "libvips" if @gemfile.include? 'ruby-vips'
|
|
237
266
|
|
|
238
267
|
# Rmagick gem
|
|
239
|
-
|
|
268
|
+
if @gemfile.include?('rmagick') or @gemfile.include?('mini_magick')
|
|
269
|
+
packages << 'imagemagick'
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
# Puppeteer
|
|
273
|
+
packages << 'google-chrome-stable' if using_puppeteer?
|
|
240
274
|
|
|
241
275
|
packages.sort
|
|
242
276
|
end
|
|
243
277
|
|
|
278
|
+
def deploy_repos
|
|
279
|
+
repos = []
|
|
280
|
+
|
|
281
|
+
if using_puppeteer?
|
|
282
|
+
repos += [
|
|
283
|
+
"curl https://dl-ssl.google.com/linux/linux_signing_key.pub |",
|
|
284
|
+
"gpg --dearmor > /etc/apt/trusted.gpg.d/google-archive.gpg &&",
|
|
285
|
+
'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
|
|
286
|
+
]
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
if repos.empty?
|
|
290
|
+
''
|
|
291
|
+
else
|
|
292
|
+
repos.join(" \\\n ") + " && \\\n "
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
244
296
|
def deploy_env
|
|
245
297
|
env = []
|
|
246
298
|
|
|
@@ -263,6 +315,11 @@ private
|
|
|
263
315
|
env << 'MALLOC_CONF="dirty_decay_ms:1000,narenas:2,background_thread:true"'
|
|
264
316
|
end
|
|
265
317
|
|
|
318
|
+
if using_puppeteer?
|
|
319
|
+
env << 'GROVER_NO_SANDBOX="true"' if @gemfile.include? 'grover'
|
|
320
|
+
env << 'PUPPETEER_EXECUTABLE_PATH="/usr/bin/google-chrome"'
|
|
321
|
+
end
|
|
322
|
+
|
|
266
323
|
env
|
|
267
324
|
end
|
|
268
325
|
|
|
@@ -26,10 +26,12 @@ ARG BUNDLER_VERSION=<%= Bundler::VERSION %>
|
|
|
26
26
|
RUN gem update --system --no-document && \
|
|
27
27
|
gem install -N bundler -v ${BUNDLER_VERSION}
|
|
28
28
|
|
|
29
|
-
<%
|
|
30
|
-
# Install packages needed to install
|
|
31
|
-
<%= render partial: 'apt_install', locals: {packages:
|
|
29
|
+
<% unless base_requirements.empty? -%>
|
|
30
|
+
# Install packages needed to install <%= base_requirements %>
|
|
31
|
+
<%= render partial: 'apt_install', locals: {packages: base_packages, clean: true, repos: ''} %>
|
|
32
32
|
|
|
33
|
+
<% end -%>
|
|
34
|
+
<% if using_execjs? -%>
|
|
33
35
|
<%= render partial: 'install_node', locals: {yarn_version: nil} %>
|
|
34
36
|
|
|
35
37
|
<% end -%>
|
|
@@ -38,15 +40,15 @@ RUN gem update --system --no-document && \
|
|
|
38
40
|
FROM base as <%= parallel? ? 'pre' : '' %>build
|
|
39
41
|
|
|
40
42
|
# Install packages needed to build gems<%= using_node? ? " and node modules" : "" %>
|
|
41
|
-
<%= render partial: 'apt_install', locals: {packages: build_packages, clean: false} %>
|
|
43
|
+
<%= render partial: 'apt_install', locals: {packages: build_packages, clean: false, repos: ''} %>
|
|
42
44
|
|
|
43
45
|
<% if parallel? -%>
|
|
44
46
|
|
|
45
47
|
FROM prebuild as node
|
|
46
48
|
|
|
47
49
|
<% end -%>
|
|
48
|
-
<% if using_node? -%>
|
|
49
|
-
<%= render partial: 'install_node', locals: {node_version: using_execjs? ? nil : node_version} %>
|
|
50
|
+
<% if using_node? and (!using_execjs? || File.exist?('yarn.lock')) -%>
|
|
51
|
+
<%= render partial: 'install_node', locals: {node_version: using_execjs? ? nil : node_version, yarn_version: File.exist?('yarn.lock') ? yarn_version : nil} %>
|
|
50
52
|
|
|
51
53
|
<% end -%>
|
|
52
54
|
<% if parallel? -%>
|
|
@@ -81,7 +83,7 @@ RUN bundle _${BUNDLER_VERSION}_ install<% if depend_on_bootsnap? -%> && \
|
|
|
81
83
|
COPY --from=node /rails/node_modules /rails/node_modules
|
|
82
84
|
|
|
83
85
|
<% elsif using_node? -%>
|
|
84
|
-
<%= render partial: 'npm_install', locals: {sources:
|
|
86
|
+
<%= render partial: 'npm_install', locals: {sources: Dir[*%w(package.json package-lock.json yarn.lock)]} %>
|
|
85
87
|
|
|
86
88
|
<% end -%>
|
|
87
89
|
# Copy application code
|
|
@@ -112,7 +114,7 @@ FROM base
|
|
|
112
114
|
<% unless deploy_packages.empty? -%>
|
|
113
115
|
|
|
114
116
|
# Install packages needed for deployment
|
|
115
|
-
<%= render partial: 'apt_install', locals: {packages: deploy_packages, clean: true} %>
|
|
117
|
+
<%= render partial: 'apt_install', locals: {packages: deploy_packages, clean: true, repos: deploy_repos} %>
|
|
116
118
|
<% end -%>
|
|
117
119
|
|
|
118
120
|
# Copy built application from previous stage
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<% if options.cache? -%>
|
|
2
2
|
RUN --mount=type=cache,id=dev-apt-cache,sharing=locked,target=/var/cache/apt \
|
|
3
3
|
--mount=type=cache,id=dev-apt-lib,sharing=locked,target=/var/lib/apt \
|
|
4
|
-
apt-get update -qq && \
|
|
4
|
+
<%= repos %>apt-get update -qq && \
|
|
5
5
|
apt-get install --no-install-recommends -y <%= packages.join(" ") %>
|
|
6
6
|
<% else -%>
|
|
7
|
-
RUN apt-get update -qq && \
|
|
7
|
+
RUN <%= repos %>apt-get update -qq && \
|
|
8
8
|
apt-get install --no-install-recommends -y <%= packages.join(" ") %><% if clean %> && \
|
|
9
9
|
rm -rf /var/lib/apt/lists /var/cache/apt/archives<% end %>
|
|
10
10
|
<% end -%>
|
|
@@ -17,4 +17,4 @@ RUN apt-get update -qq && \
|
|
|
17
17
|
make && \
|
|
18
18
|
make install
|
|
19
19
|
<% end -%>
|
|
20
|
-
|
|
20
|
+
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
# Install node modules
|
|
2
|
+
<% if using_puppeteer? -%>
|
|
3
|
+
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true"
|
|
4
|
+
<% end -%>
|
|
2
5
|
COPY <%=sources.join(' ') %> .
|
|
3
6
|
<% if sources.join.include? 'yarn' -%>
|
|
4
7
|
<% if options.cache? -%>
|
|
@@ -14,4 +17,4 @@ RUN --mount=type=cache,id=bld-npm-cache,target=/root/.npm \
|
|
|
14
17
|
<% else -%>
|
|
15
18
|
RUN npm install
|
|
16
19
|
<% end -%>
|
|
17
|
-
<% end -%>
|
|
20
|
+
<% end -%>
|
|
@@ -68,4 +68,27 @@ services:
|
|
|
68
68
|
|
|
69
69
|
redis-db:
|
|
70
70
|
image: redis
|
|
71
|
+
<% end -%>
|
|
72
|
+
<% if using_sidekiq? and deploy_database != 'sqlite3' -%>
|
|
73
|
+
|
|
74
|
+
sidekiq:
|
|
75
|
+
build: .
|
|
76
|
+
environment:
|
|
77
|
+
- RAILS_MASTER_KEY=$RAILS_MASTER_KEY
|
|
78
|
+
- REDIS_URL=redis://redis-db:6379
|
|
79
|
+
<% if deploy_database == 'postgresql' -%>
|
|
80
|
+
- DATABASE_URL=postgres://root:password@postgres-db/
|
|
81
|
+
<% elsif deploy_database == 'mysql' -%>
|
|
82
|
+
- DATABASE_URL=mysql2://root:password@mysql-db/
|
|
83
|
+
<% end -%>
|
|
84
|
+
depends_on:
|
|
85
|
+
redis-db:
|
|
86
|
+
condition: service_started
|
|
87
|
+
<% if deploy_database == 'postgresql' -%>
|
|
88
|
+
postgres-db:
|
|
89
|
+
condition: service_healthy
|
|
90
|
+
<% elsif deploy_database == 'mysql' -%>
|
|
91
|
+
mysql-db:
|
|
92
|
+
condition: service_healthy
|
|
93
|
+
<% end -%>
|
|
71
94
|
<% end -%>
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dockerfile-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sam Ruby
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-01
|
|
11
|
+
date: 2023-02-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|