dockerize-stack 0.4.0 → 0.5.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 +5 -5
- data/bin/dockerize-stack +2 -3
- data/lib/dockerize_stack/rails.rb +45 -0
- data/lib/dockerize_stack/react.rb +31 -0
- data/lib/dockerize_stack.rb +7 -4
- data/lib/thor_extend.rb +21 -0
- data/lib/version.rb +1 -1
- data/templates/rails/Dockerfile.erb +84 -0
- data/templates/rails/config/database-docker.yml.erb +14 -13
- data/templates/rails/docker-compose.yml.erb +73 -38
- data/templates/rails/{docker/development/entrypoint.sh.erb → entrypoint.sh.erb} +1 -2
- data/templates/rails/{docker/kubernetes → kubernetes}/scripts/deploy.sh +0 -0
- data/templates/rails/{docker/kubernetes → kubernetes}/scripts/get-secrets.sh +0 -0
- data/templates/rails/{docker/kubernetes → kubernetes}/scripts/remoteconsole.sh +0 -0
- data/templates/rails/{docker/kubernetes → kubernetes}/scripts/set-config-map.sh +0 -0
- data/templates/rails/{docker/kubernetes → kubernetes}/scripts/set-secrets.sh +0 -0
- data/templates/rails/{docker/kubernetes → kubernetes}/scripts/set-services.sh +0 -0
- data/templates/rails/{docker/kubernetes → kubernetes}/scripts/set-workloads.sh +0 -0
- data/templates/rails/{docker/kubernetes → kubernetes}/services/cloudsql-proxy.yaml +0 -0
- data/templates/rails/{docker/kubernetes → kubernetes}/services/rails-nginx.yaml +0 -0
- data/templates/rails/{docker/kubernetes → kubernetes}/workloads/cloudsql-proxy.yaml +0 -0
- data/templates/rails/{docker/kubernetes → kubernetes}/workloads/rails-nginx.yaml +0 -0
- data/templates/rails/{docker/production/nginx → nginx}/Dockerfile +0 -0
- data/templates/rails/{docker/production/nginx → nginx}/entrypoint.sh +0 -0
- data/templates/rails/{docker/production/nginx → nginx}/etc/nginx/conf.d/default.conf +0 -0
- data/templates/rails/{docker/production/nginx → nginx}/etc/nginx/nginx.conf +0 -0
- data/templates/react/{docker/Dockerfile.erb → Dockerfile.erb} +0 -0
- data/templates/react/{docker/nginx → nginx}/conf.d/default.conf.template +0 -0
- metadata +24 -28
- data/lib/rails/dockerize_rails.rb +0 -56
- data/lib/react/dockerize_react.rb +0 -42
- data/templates/rails/docker/development/Dockerfile.erb +0 -37
- data/templates/rails/docker/production/dockerbuild.sh +0 -41
- data/templates/rails/docker/production/rails/Dockerfile.erb +0 -75
- data/templates/rails/docker/production/rails/entrypoint.sh +0 -7
- data/templates/rails/dockerignore.erb +0 -19
- data/templates/react/dockerignore.erb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3e82ca81b46c88bfa939a33e3c44e8a9c04778bd924979bc62e7def00a638f37
|
4
|
+
data.tar.gz: 0d2e31d131f2286ce3ef35b1e7d8c56e6941d7ec6f3279c157f19fbdc1a0c2dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 441dbcb2139baebc88be23fdfe8a98aaed0f3f691a20e06ab39c4a5a8155814724bacdcedb8f3aa9d1615091c9105d878e3032aea5d1cd102bb81bd54b079b00
|
7
|
+
data.tar.gz: 8f40e9c13e84abbf500e7ffa607c345badfb4cd86f3cbef1dc42099750d99a7dd1149f8bd2b6e9e77ab11a02adc8c9a9dd0b29632b7e8c00a2d6cddc1f30832b
|
data/bin/dockerize-stack
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
module DockerizeStack
|
2
|
+
# Ask variables and render templates
|
3
|
+
class Rails < Thor
|
4
|
+
include Thor::Actions
|
5
|
+
include ThorActionsExtend
|
6
|
+
|
7
|
+
attr_accessor :ruby_version, :nodejs_version, :yarn_version,
|
8
|
+
:database, :github_private, :kubernetes, :workdir
|
9
|
+
|
10
|
+
def self.source_root
|
11
|
+
"#{File.dirname(__FILE__)}/../../templates/rails"
|
12
|
+
end
|
13
|
+
|
14
|
+
no_commands do
|
15
|
+
def generate_files(path: '.')
|
16
|
+
@workdir = path
|
17
|
+
@nodejs_version = '10.16.3'
|
18
|
+
@yarn_version = '1.17.3'
|
19
|
+
|
20
|
+
@ruby_version = ask_with_default('Ruby Version (default 2.5.6):', '2.5.6')
|
21
|
+
@database = ask('What is your Database?', limited_to: ['postgresql', 'mysql'])
|
22
|
+
@rails_worker = ask_with_default('You need worker service (sidekiq example) (default yes):', 'yes')
|
23
|
+
@github_private = ask_with_default('You need github token for private gems? (default no):', 'no')
|
24
|
+
@kubernetes = ask_with_default('You want generate docker-stack for kubernetes? y/n', 'n')
|
25
|
+
|
26
|
+
render_templates
|
27
|
+
render_kubernetes_templates unless ['n', 'no', ''].include?(@kubernetes)
|
28
|
+
end
|
29
|
+
|
30
|
+
def render_templates
|
31
|
+
render_template 'Dockerfile.erb'
|
32
|
+
render_template 'entrypoint.sh.erb'
|
33
|
+
render_template 'docker-compose.yml.erb'
|
34
|
+
render_template 'config/database-docker.yml.erb'
|
35
|
+
render_template '.dockerignore.erb'
|
36
|
+
|
37
|
+
puts 'Update your database.yml based in database-docker.yml'
|
38
|
+
end
|
39
|
+
|
40
|
+
def render_kubernetes_templates
|
41
|
+
directory 'kubernetes', "#{@workdir}/kubernetes"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'thor'
|
2
|
+
# Ask variables and render templates
|
3
|
+
module DockerizeStack
|
4
|
+
# Ask variables and render templates
|
5
|
+
class React < Thor
|
6
|
+
include Thor::Actions
|
7
|
+
include ThorActionsExtend
|
8
|
+
|
9
|
+
attr_accessor :nodejs_version, :workdir
|
10
|
+
|
11
|
+
def self.source_root
|
12
|
+
"#{File.dirname(__FILE__)}/../../templates/react"
|
13
|
+
end
|
14
|
+
|
15
|
+
no_commands do
|
16
|
+
def generate_files(path: '.')
|
17
|
+
@workdir = path
|
18
|
+
@nodejs_version = ask_with_default('Nodejs Version (default 10):', '10')
|
19
|
+
|
20
|
+
render_templates
|
21
|
+
end
|
22
|
+
|
23
|
+
def render_templates
|
24
|
+
render_template 'Dockerfile.erb'
|
25
|
+
render_template '.dockerignore.erb'
|
26
|
+
|
27
|
+
directory 'nginx', "#{@workdir}/nginx"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/dockerize_stack.rb
CHANGED
@@ -1,19 +1,22 @@
|
|
1
1
|
require 'thor'
|
2
|
-
|
3
|
-
|
2
|
+
require_relative './thor_extend.rb'
|
3
|
+
require_relative './dockerize_stack/react.rb'
|
4
|
+
require_relative './dockerize_stack/rails.rb'
|
4
5
|
|
5
6
|
module DockerizeStack
|
6
7
|
class Command < Thor
|
7
8
|
include Thor::Actions
|
8
9
|
|
10
|
+
option :path
|
9
11
|
desc 'rails', 'generate docker files for rails application'
|
10
12
|
def rails
|
11
|
-
|
13
|
+
DockerizeStack::Rails.new.generate_files(path: options[:path])
|
12
14
|
end
|
13
15
|
|
16
|
+
option :path
|
14
17
|
desc 'react', 'generate docker files for create react app'
|
15
18
|
def react
|
16
|
-
|
19
|
+
DockerizeStack::React.new.generate_files(path: options[:path])
|
17
20
|
end
|
18
21
|
end
|
19
22
|
end
|
data/lib/thor_extend.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module ThorActionsExtend
|
2
|
+
include Thor::Actions
|
3
|
+
|
4
|
+
private
|
5
|
+
def render_template(path)
|
6
|
+
template path, "#{@workdir}/#{path.gsub('.erb', '')}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def ask_with_default(question = '', default = '')
|
10
|
+
result = ask(question)
|
11
|
+
result != '' ? result : default
|
12
|
+
end
|
13
|
+
|
14
|
+
def append_or_create(file_path, file_content)
|
15
|
+
if File.exist?(file_path)
|
16
|
+
append_to_file file_path, file_content
|
17
|
+
else
|
18
|
+
create_file file_path, file_content
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/version.rb
CHANGED
@@ -0,0 +1,84 @@
|
|
1
|
+
# ****************************
|
2
|
+
# ******Build base stage******
|
3
|
+
# ****************************
|
4
|
+
|
5
|
+
FROM node:<%= nodejs_version %>-slim as nodejs
|
6
|
+
|
7
|
+
FROM ruby:<%= ruby_version %>-slim
|
8
|
+
|
9
|
+
# Install common dev libs
|
10
|
+
RUN apt-get update -qq && apt-get install -y \
|
11
|
+
build-essential vim git
|
12
|
+
<% if database == "mysql" %>
|
13
|
+
# Install Mysql
|
14
|
+
RUN apt-get install -y mysql-client libmysqlclient-dev
|
15
|
+
<% elsif database == "postgresql" %>
|
16
|
+
# Install Postgresql
|
17
|
+
RUN apt-get install -y postgresql-client libpq-dev
|
18
|
+
<% end %>
|
19
|
+
# Install Nodejs and Yarn
|
20
|
+
ENV NODE_VERSION=<%= nodejs_version %> YARN_VERSION=<%= yarn_version %>
|
21
|
+
COPY --from=nodejs /usr/local/bin/ /usr/local/bin/
|
22
|
+
COPY --from=nodejs /usr/local/lib/ /usr/local/lib/
|
23
|
+
COPY --from=nodejs /opt/yarn-v<%= yarn_version %>/ /opt/yarn-v<%= yarn_version %>/
|
24
|
+
|
25
|
+
WORKDIR /app
|
26
|
+
<% if @github_private == 'yes' %>
|
27
|
+
# Private repository
|
28
|
+
ARG GITHUB_TOKEN
|
29
|
+
ARG GITHUB_USERNAME
|
30
|
+
RUN bundle config github.com ${GITHUB_USERNAME}:${GITHUB_TOKEN}
|
31
|
+
<% end %>
|
32
|
+
|
33
|
+
# Production config
|
34
|
+
ARG BUNDLE_DEPLOYMENT=true
|
35
|
+
ARG BUNDLE_WITHOUT="development test staging"
|
36
|
+
ARG NODE_ENV=production
|
37
|
+
|
38
|
+
ENV BUNDLE_DEPLOYMENT=$BUNDLE_DEPLOYMENT BUNDLE_WITHOUT=$BUNDLE_WITHOUT
|
39
|
+
ENV NODE_ENV=$NODE_ENV
|
40
|
+
|
41
|
+
# Gems cache layer
|
42
|
+
COPY Gemfile Gemfile.lock /app/
|
43
|
+
RUN bundle install -j 4
|
44
|
+
|
45
|
+
# Node modules cache layer
|
46
|
+
COPY package.json yarn.lock /app/
|
47
|
+
RUN yarn install --pure-lockfile
|
48
|
+
|
49
|
+
COPY . .
|
50
|
+
CMD "./entrypoint.sh"
|
51
|
+
|
52
|
+
# ****************************
|
53
|
+
# ******Production stage******
|
54
|
+
# ****************************
|
55
|
+
|
56
|
+
FROM builder as production-builder
|
57
|
+
|
58
|
+
# Build production assets
|
59
|
+
RUN bundle exec rails assets:precompile
|
60
|
+
RUN rm -r node_modules
|
61
|
+
|
62
|
+
# **********************************
|
63
|
+
# ******Final production Stage******
|
64
|
+
# **********************************
|
65
|
+
|
66
|
+
FROM ruby:<%= ruby_version %>-slim
|
67
|
+
|
68
|
+
ENV NODE_ENV=production RAILS_ENV=production RAILS_LOG_TO_STDOUT=true
|
69
|
+
|
70
|
+
# Install system dependencies
|
71
|
+
COPY --from=nodejs /usr/local/ /usr/local/
|
72
|
+
RUN apt-get update -qq && apt-get install -y \
|
73
|
+
libpq-dev \
|
74
|
+
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
75
|
+
|
76
|
+
WORKDIR /app
|
77
|
+
|
78
|
+
RUN groupadd -r deploy && useradd -r -g deploy deploy
|
79
|
+
USER deploy
|
80
|
+
|
81
|
+
COPY --from=production-builder --chown=deploy:deploy /usr/local/bundle /usr/local/bundle
|
82
|
+
COPY --from=production-builder --chown=deploy:deploy /app /app
|
83
|
+
|
84
|
+
CMD [ "sh", "-c", "bundle exec rake db:create db:migrate && bundle exec rails server -b 0.0.0.0" ]
|
@@ -6,11 +6,13 @@
|
|
6
6
|
|
7
7
|
default: &default
|
8
8
|
adapter: postgresql
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
encoding: unicode
|
10
|
+
# For details on connection pooling, see Rails configuration guide
|
11
|
+
# http://guides.rubyonrails.org/configuring.html#database-pooling
|
12
|
+
host: <%%= ENV.fetch("DATABASE_HOST") { "127.0.0.1" } %>
|
13
|
+
username: <%%= ENV.fetch("DATABASE_USERNAME") { "postgres" } %>
|
14
|
+
password: <%%= ENV.fetch("DATABASE_PASSWORD") { "" } %>
|
15
|
+
pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
|
14
16
|
|
15
17
|
<% elsif database == "mysql" %>
|
16
18
|
# Install the MySQL driver
|
@@ -19,10 +21,12 @@ default: &default
|
|
19
21
|
default: &default
|
20
22
|
adapter: mysql2
|
21
23
|
encoding: utf8
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
# For details on connection pooling, see Rails configuration guide
|
25
|
+
# http://guides.rubyonrails.org/configuring.html#database-pooling
|
26
|
+
host: <%%= ENV.fetch("DATABASE_HOST") { "127.0.0.1" } %>
|
27
|
+
username: <%%= ENV.fetch("DATABASE_USERNAME") { "root" } %>
|
28
|
+
password: <%%= ENV.fetch("DATABASE_PASSWORD") { "password" } %>
|
29
|
+
pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
|
26
30
|
|
27
31
|
<% end %>
|
28
32
|
development:
|
@@ -35,7 +39,4 @@ test:
|
|
35
39
|
|
36
40
|
production:
|
37
41
|
<<: *default
|
38
|
-
|
39
|
-
database: <%= ENV["DATABASE_NAME"] %>
|
40
|
-
username: <%= ENV["DATABASE_USERNAME"] %>
|
41
|
-
password: <%= ENV["DATABASE_PASSWORD"] %>
|
42
|
+
database: <%%= ENV.fetch("DATABASE_NAME") { "myapp_production" } %>
|
@@ -1,65 +1,100 @@
|
|
1
|
-
version:
|
1
|
+
version: "3.4"
|
2
2
|
services:
|
3
3
|
web:
|
4
4
|
build:
|
5
|
-
dockerfile: ./docker/development/Dockerfile
|
6
|
-
context: ./
|
7
|
-
<% if @github_private == 'yes' %>
|
8
5
|
args:
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
BUNDLE_DEPLOYMENT: "false"
|
7
|
+
BUNDLE_WITHOUT: ""
|
8
|
+
NODE_ENV: development
|
9
|
+
target: builder
|
10
|
+
context: ./
|
11
|
+
dockerfile: ./Dockerfile
|
12
|
+
image: dockerize-rails
|
12
13
|
container_name: web
|
13
14
|
stdin_open: true
|
14
15
|
tty: true
|
15
|
-
command: "bash ./docker/development/entrypoint.sh"
|
16
16
|
volumes:
|
17
|
-
- .:/app
|
18
|
-
-
|
17
|
+
- .:/app:delegated
|
18
|
+
- bundle:/usr/local/bundle:delegated
|
19
|
+
- node_modules:/app/node_modules:delegated
|
19
20
|
ports:
|
20
21
|
- "3000:3000"
|
21
22
|
depends_on:
|
22
23
|
- db
|
23
|
-
# env_file:
|
24
|
-
# - web.env
|
25
|
-
<% if database == "mysql" %>
|
26
|
-
db:
|
27
|
-
image: 'mysql:5.7'
|
28
|
-
# ports:
|
29
|
-
# - "3306:3306"
|
30
24
|
environment:
|
31
|
-
|
25
|
+
DATABASE_HOST: db
|
26
|
+
# sidekiq redis
|
27
|
+
# https://github.com/mperham/sidekiq/wiki/Using-Redis
|
28
|
+
REDIS_PROVIDER: REDISGREEN_URL
|
29
|
+
REDISGREEN_URL: redis://redis:6379/0
|
30
|
+
|
31
|
+
worker:
|
32
|
+
image: dockerize-rails
|
33
|
+
container_name: worker
|
34
|
+
stdin_open: true
|
35
|
+
tty: true
|
36
|
+
command: bundle exec sidekiq -q default -q mailers
|
32
37
|
volumes:
|
33
|
-
-
|
34
|
-
|
38
|
+
- .:/app:delegated
|
39
|
+
- bundle:/usr/local/bundle:delegated
|
40
|
+
- node_modules:/app/node_modules:delegated
|
41
|
+
depends_on:
|
42
|
+
- db
|
43
|
+
environment:
|
44
|
+
RAILS_MASTER_KEY: ea3aaacc43f832b6e9049e61211561dc
|
45
|
+
# sidekiq redis
|
46
|
+
# https://github.com/mperham/sidekiq/wiki/Using-Redis
|
47
|
+
REDIS_PROVIDER: REDISGREEN_URL
|
48
|
+
REDISGREEN_URL: redis://redis:6379/0
|
49
|
+
|
35
50
|
db:
|
36
|
-
image: postgres:9.
|
51
|
+
image: postgres:9.5.9
|
37
52
|
# ports:
|
38
53
|
# - "5432:5432"
|
39
54
|
volumes:
|
40
|
-
-
|
41
|
-
<% end %>
|
42
|
-
# redis:
|
43
|
-
# image: redis
|
44
|
-
# ports:
|
45
|
-
# - "6379:6379"
|
46
|
-
# mailcatcher:
|
47
|
-
# image: schickling/mailcatcher
|
48
|
-
# ports:
|
49
|
-
# - 1025:1025
|
50
|
-
# - 1080:1080
|
55
|
+
- postgresql:/var/lib/postgresql/data:delegated
|
51
56
|
|
52
|
-
|
53
|
-
|
54
|
-
|
57
|
+
redis:
|
58
|
+
image: redis
|
59
|
+
# ports:
|
60
|
+
# - "6379:6379"
|
55
61
|
|
62
|
+
mailcatcher:
|
63
|
+
image: schickling/mailcatcher
|
64
|
+
ports:
|
65
|
+
- 1025:1025
|
66
|
+
- 1080:1080
|
67
|
+
|
68
|
+
volumes:
|
69
|
+
postgresql:
|
70
|
+
bundle:
|
71
|
+
node_modules:
|
56
72
|
# USAGE
|
57
73
|
|
58
|
-
#
|
74
|
+
# ************************************
|
75
|
+
# **Start only external services (web service use local environment)**
|
76
|
+
# ************************************
|
77
|
+
|
78
|
+
# docker-compose up db redis mailcatcher
|
79
|
+
# bundle exec rails server
|
80
|
+
# bundle exec bundle exec sidekiq -q default -q mailers
|
81
|
+
# bin/webpack-dev-server
|
82
|
+
|
83
|
+
# ************************************
|
84
|
+
# **Development on ruby docker image**
|
85
|
+
# ************************************
|
86
|
+
|
87
|
+
# docker-compose buid web
|
88
|
+
# docker-compose up
|
89
|
+
|
90
|
+
# Run rails console
|
91
|
+
# docker-compose run --rm web rails console
|
92
|
+
|
93
|
+
# Enter in the container for run rails console or rake tasks
|
59
94
|
# docker-compose run --rm web bash
|
60
95
|
|
61
|
-
# Attach the container when use binding.pry
|
96
|
+
# Attach the container when use byebug or binding.pry
|
62
97
|
# docker attach web
|
63
98
|
|
64
|
-
# When run rails generator you
|
99
|
+
# When run rails generator then you must run
|
65
100
|
# sudo chown -R $USER:$USER .
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dockerize-stack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Savignano
|
@@ -35,35 +35,31 @@ files:
|
|
35
35
|
- README.md
|
36
36
|
- bin/dockerize-stack
|
37
37
|
- lib/dockerize_stack.rb
|
38
|
-
- lib/rails
|
39
|
-
- lib/react
|
38
|
+
- lib/dockerize_stack/rails.rb
|
39
|
+
- lib/dockerize_stack/react.rb
|
40
|
+
- lib/thor_extend.rb
|
40
41
|
- lib/version.rb
|
42
|
+
- templates/rails/Dockerfile.erb
|
41
43
|
- templates/rails/config/database-docker.yml.erb
|
42
44
|
- templates/rails/docker-compose.yml.erb
|
43
|
-
- templates/rails/
|
44
|
-
- templates/rails/
|
45
|
-
- templates/rails/
|
46
|
-
- templates/rails/
|
47
|
-
- templates/rails/
|
48
|
-
- templates/rails/
|
49
|
-
- templates/rails/
|
50
|
-
- templates/rails/
|
51
|
-
- templates/rails/
|
52
|
-
- templates/rails/
|
53
|
-
- templates/rails/
|
54
|
-
- templates/rails/
|
55
|
-
- templates/rails/
|
56
|
-
- templates/rails/
|
57
|
-
- templates/rails/
|
58
|
-
- templates/rails/
|
59
|
-
- templates/
|
60
|
-
- templates/
|
61
|
-
- templates/rails/docker/production/rails/Dockerfile.erb
|
62
|
-
- templates/rails/docker/production/rails/entrypoint.sh
|
63
|
-
- templates/rails/dockerignore.erb
|
64
|
-
- templates/react/docker/Dockerfile.erb
|
65
|
-
- templates/react/docker/nginx/conf.d/default.conf.template
|
66
|
-
- templates/react/dockerignore.erb
|
45
|
+
- templates/rails/entrypoint.sh.erb
|
46
|
+
- templates/rails/kubernetes/scripts/deploy.sh
|
47
|
+
- templates/rails/kubernetes/scripts/get-secrets.sh
|
48
|
+
- templates/rails/kubernetes/scripts/remoteconsole.sh
|
49
|
+
- templates/rails/kubernetes/scripts/set-config-map.sh
|
50
|
+
- templates/rails/kubernetes/scripts/set-secrets.sh
|
51
|
+
- templates/rails/kubernetes/scripts/set-services.sh
|
52
|
+
- templates/rails/kubernetes/scripts/set-workloads.sh
|
53
|
+
- templates/rails/kubernetes/services/cloudsql-proxy.yaml
|
54
|
+
- templates/rails/kubernetes/services/rails-nginx.yaml
|
55
|
+
- templates/rails/kubernetes/workloads/cloudsql-proxy.yaml
|
56
|
+
- templates/rails/kubernetes/workloads/rails-nginx.yaml
|
57
|
+
- templates/rails/nginx/Dockerfile
|
58
|
+
- templates/rails/nginx/entrypoint.sh
|
59
|
+
- templates/rails/nginx/etc/nginx/conf.d/default.conf
|
60
|
+
- templates/rails/nginx/etc/nginx/nginx.conf
|
61
|
+
- templates/react/Dockerfile.erb
|
62
|
+
- templates/react/nginx/conf.d/default.conf.template
|
67
63
|
homepage: https://github.com/MiguelSavignano/dockerize-stack
|
68
64
|
licenses:
|
69
65
|
- MIT
|
@@ -84,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
80
|
version: '0'
|
85
81
|
requirements: []
|
86
82
|
rubyforge_project:
|
87
|
-
rubygems_version: 2.
|
83
|
+
rubygems_version: 2.7.9
|
88
84
|
signing_key:
|
89
85
|
specification_version: 4
|
90
86
|
summary: DockerizeStack
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
# Ask variables and render templates
|
3
|
-
class DockerizeRails < Thor
|
4
|
-
include Thor::Actions
|
5
|
-
attr_accessor :ruby_version, :database, :github_private, :docker_production
|
6
|
-
|
7
|
-
WORKDIR = ".".freeze
|
8
|
-
|
9
|
-
def self.source_root
|
10
|
-
"#{File.dirname(__FILE__)}/../../templates"
|
11
|
-
end
|
12
|
-
|
13
|
-
desc 'generate_files', 'generate docker files for rails application'
|
14
|
-
def generate_files
|
15
|
-
@ruby_version = ask_with_default('Ruby Version (default 2.5.1):', '2.5.1')
|
16
|
-
@database = ask('What is your Database?', limited_to: ['postgresql', 'mysql'])
|
17
|
-
@github_private = ask_with_default('You need github token for private gems? (default no):', 'no')
|
18
|
-
@docker_production = ask_with_default("You want generate docker-stack for production? y/n", 'n')
|
19
|
-
|
20
|
-
render_templates
|
21
|
-
render_production_templates if @docker_production != 'n' || @docker_production != 'no'
|
22
|
-
end
|
23
|
-
|
24
|
-
no_commands do
|
25
|
-
def render_templates
|
26
|
-
template 'rails/docker/development/Dockerfile.erb', "#{WORKDIR}/docker/development/Dockerfile"
|
27
|
-
template 'rails/docker/development/entrypoint.sh.erb', "#{WORKDIR}/docker/development/entrypoint.sh"
|
28
|
-
template 'rails/docker-compose.yml.erb', "#{WORKDIR}/docker-compose.yml"
|
29
|
-
template 'rails/config/database-docker.yml.erb', "#{WORKDIR}/config/database-docker.yml"
|
30
|
-
template 'rails/dockerignore.erb', "#{WORKDIR}/.dockerignore"
|
31
|
-
puts 'Update your database.yml based in database-docker.yml'
|
32
|
-
end
|
33
|
-
|
34
|
-
def render_production_templates
|
35
|
-
directory 'rails/docker/production', "#{WORKDIR}/docker/production"
|
36
|
-
directory 'rails/docker/kubernetes', "#{WORKDIR}/docker/kubernetes"
|
37
|
-
|
38
|
-
template 'rails/docker/production/rails/Dockerfile.erb', "#{WORKDIR}/docker/production/rails/Dockerfile"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
def ask_with_default(question = '', default = '')
|
45
|
-
result = ask(question)
|
46
|
-
result != '' ? result : default
|
47
|
-
end
|
48
|
-
|
49
|
-
def append_or_create(file_path, file_content)
|
50
|
-
if File.exist?(file_path)
|
51
|
-
append_to_file file_path, file_content
|
52
|
-
else
|
53
|
-
create_file file_path, file_content
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
# Ask variables and render templates
|
3
|
-
class DockerizeReact < Thor
|
4
|
-
include Thor::Actions
|
5
|
-
attr_accessor :nodejs_version
|
6
|
-
|
7
|
-
WORKDIR = ".".freeze
|
8
|
-
|
9
|
-
def self.source_root
|
10
|
-
"#{File.dirname(__FILE__)}/../../templates"
|
11
|
-
end
|
12
|
-
|
13
|
-
desc 'generate_files', 'generate docker files for react create app'
|
14
|
-
def generate_files
|
15
|
-
@nodejs_version = ask_with_default('Nodejs Version (default 10):', '10')
|
16
|
-
|
17
|
-
render_templates
|
18
|
-
end
|
19
|
-
|
20
|
-
no_commands do
|
21
|
-
def render_templates
|
22
|
-
template 'react/docker/Dockerfile.erb', "#{WORKDIR}/docker/Dockerfile"
|
23
|
-
template 'react/dockerignore.erb', "#{WORKDIR}/.dockerignore"
|
24
|
-
directory 'react/docker/nginx', "#{WORKDIR}/docker/nginx"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def ask_with_default(question = '', default = '')
|
31
|
-
result = ask(question)
|
32
|
-
result != '' ? result : default
|
33
|
-
end
|
34
|
-
|
35
|
-
def append_or_create(file_path, file_content)
|
36
|
-
if File.exist?(file_path)
|
37
|
-
append_to_file file_path, file_content
|
38
|
-
else
|
39
|
-
create_file file_path, file_content
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
FROM node:10.13.0-slim as nodejs
|
2
|
-
|
3
|
-
# ******Multi stage ********
|
4
|
-
FROM ruby:<%= ruby_version %>-slim
|
5
|
-
|
6
|
-
# install common dev libs
|
7
|
-
RUN apt-get update -qq && apt-get install -y \
|
8
|
-
build-essential vim git
|
9
|
-
<% if database == "mysql" %>
|
10
|
-
# install Mysql
|
11
|
-
RUN apt-get install -y mysql-client libmysqlclient-dev
|
12
|
-
<% elsif database == "postgresql" %>
|
13
|
-
# install Postgresql
|
14
|
-
RUN apt-get install -y postgresql-client libpq-dev
|
15
|
-
<% end %>
|
16
|
-
# install Nodejs 10.13.0 and Yarn 1.10.1
|
17
|
-
ENV NODE_VERSION=10.13.0 YARN_VERSION=1.10.1
|
18
|
-
COPY --from=nodejs /usr/local/bin/ /usr/local/bin/
|
19
|
-
COPY --from=nodejs /usr/local/lib/ /usr/local/lib/
|
20
|
-
COPY --from=nodejs /opt/yarn-v1.10.1/ /opt/yarn-v1.10.1/
|
21
|
-
|
22
|
-
WORKDIR /app
|
23
|
-
<% if @github_private == 'yes' %>
|
24
|
-
# Private repository
|
25
|
-
ARG GITHUB_TOKEN
|
26
|
-
ARG GITHUB_USERNAME
|
27
|
-
RUN bundle config github.com ${GITHUB_USERNAME}:${GITHUB_TOKEN}
|
28
|
-
<% end %>
|
29
|
-
# gems cache layer
|
30
|
-
COPY Gemfile Gemfile.lock /app/
|
31
|
-
RUN bundle install -j 4
|
32
|
-
|
33
|
-
# node_modules cache layer
|
34
|
-
COPY package.json yarn.lock /app/
|
35
|
-
RUN yarn install --pure-lockfile
|
36
|
-
|
37
|
-
COPY . .
|
@@ -1,41 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
set -ex
|
3
|
-
PROJECT_ID=<PROJECT_ID>
|
4
|
-
BRANCH_NAME=`git rev-parse --abbrev-ref HEAD`
|
5
|
-
SHORT_SHA=`git rev-parse --short HEAD`
|
6
|
-
IMAGE_NAME=gcr.io/${PROJECT_ID}
|
7
|
-
|
8
|
-
# Build rails builder
|
9
|
-
docker build \
|
10
|
-
-t ${IMAGE_NAME}/rails:${BRANCH_NAME}-${SHORT_SHA}-builder \
|
11
|
-
-t ${IMAGE_NAME}/rails:${BRANCH_NAME}-latest-builder \
|
12
|
-
-t ${IMAGE_NAME}/rails:latest-builder \
|
13
|
-
--target builder \
|
14
|
-
-f docker/production/rails/Dockerfile \
|
15
|
-
.
|
16
|
-
|
17
|
-
# Build rails
|
18
|
-
docker build \
|
19
|
-
-t ${IMAGE_NAME}/rails:${BRANCH_NAME}-${SHORT_SHA} \
|
20
|
-
-t ${IMAGE_NAME}/rails:${BRANCH_NAME}-latest \
|
21
|
-
-t ${IMAGE_NAME}/rails:latest \
|
22
|
-
-f docker/production/rails/Dockerfile \
|
23
|
-
.
|
24
|
-
|
25
|
-
# Build nginx
|
26
|
-
docker build \
|
27
|
-
-t ${IMAGE_NAME}/nginx:${BRANCH_NAME}-${SHORT_SHA} \
|
28
|
-
-t ${IMAGE_NAME}/nginx:${BRANCH_NAME}-latest \
|
29
|
-
-t ${IMAGE_NAME}/nginx:latest \
|
30
|
-
-f docker/production/nginx/Dockerfile \
|
31
|
-
docker/production/nginx
|
32
|
-
|
33
|
-
gcloud docker -- push ${IMAGE_NAME}/rails:${BRANCH_NAME}-${SHORT_SHA}-builder
|
34
|
-
gcloud docker -- push ${IMAGE_NAME}/rails:${BRANCH_NAME}-latest-builder
|
35
|
-
gcloud docker -- push ${IMAGE_NAME}/rails:latest-builder
|
36
|
-
gcloud docker -- push ${IMAGE_NAME}/rails:${BRANCH_NAME}-${SHORT_SHA}
|
37
|
-
gcloud docker -- push ${IMAGE_NAME}/rails:${BRANCH_NAME}-latest
|
38
|
-
gcloud docker -- push ${IMAGE_NAME}/rails:latest
|
39
|
-
gcloud docker -- push ${IMAGE_NAME}/nginx:${BRANCH_NAME}-${SHORT_SHA}
|
40
|
-
gcloud docker -- push ${IMAGE_NAME}/nginx:${BRANCH_NAME}-latest
|
41
|
-
gcloud docker -- push ${IMAGE_NAME}/nginx:latest
|
@@ -1,75 +0,0 @@
|
|
1
|
-
FROM node:10.13.0-slim as nodejs
|
2
|
-
|
3
|
-
# ******Multi stage ********
|
4
|
-
FROM ruby:<%= ruby_version %>-slim as builder
|
5
|
-
|
6
|
-
ENV RAILS_ENV=production NODE_ENV=production
|
7
|
-
|
8
|
-
# install common dev libs
|
9
|
-
RUN apt-get update -qq && apt-get install -y \
|
10
|
-
build-essential git
|
11
|
-
<% if database == "mysql" %>
|
12
|
-
# install mysql
|
13
|
-
RUN apt-get update -qq && apt-get install -y libmysqlclient-dev mysql-client
|
14
|
-
<% elsif database == "postgresql" %>
|
15
|
-
# install postgresql
|
16
|
-
RUN apt-get update -qq && apt-get install -y libpq-dev postgresql-client
|
17
|
-
<% end %>
|
18
|
-
# install Nodejs 10.13.0 and Yarn 1.10.1
|
19
|
-
ENV NODE_VERSION=10.13.0 YARN_VERSION=1.10.1
|
20
|
-
COPY --from=nodejs /usr/local/bin/ /usr/local/bin/
|
21
|
-
COPY --from=nodejs /usr/local/lib/ /usr/local/lib/
|
22
|
-
COPY --from=nodejs /opt/yarn-v1.10.1/ /opt/yarn-v1.10.1/
|
23
|
-
|
24
|
-
WORKDIR /app
|
25
|
-
<% if @github_private == 'yes' %>
|
26
|
-
# private repository
|
27
|
-
ARG GITHUB_TOKEN
|
28
|
-
ARG GITHUB_USERNAME
|
29
|
-
RUN bundle config github.com ${GITHUB_USERNAME}:${GITHUB_TOKEN}
|
30
|
-
<% end %>
|
31
|
-
# gems cache layer
|
32
|
-
COPY Gemfile Gemfile.lock /app/
|
33
|
-
RUN bundle install -j 4 --without development test staging --deployment
|
34
|
-
|
35
|
-
# node_modules cache layer
|
36
|
-
COPY package.json yarn.lock /app/
|
37
|
-
RUN yarn install --pure-lockfile
|
38
|
-
|
39
|
-
COPY . .
|
40
|
-
|
41
|
-
RUN rails assets:precompile
|
42
|
-
|
43
|
-
# remove unnecessary files
|
44
|
-
RUN rm -r node_modules
|
45
|
-
|
46
|
-
# *******************************************
|
47
|
-
# ************* Multi Stage *****************
|
48
|
-
# *******************************************
|
49
|
-
FROM ruby:<%= ruby_version %>
|
50
|
-
|
51
|
-
ENV RAILS_ENV=production NODE_ENV=production
|
52
|
-
|
53
|
-
<% if database == "mysql" %>
|
54
|
-
# install mysql
|
55
|
-
RUN apt-get update -qq && apt-get install -y mysql-client \
|
56
|
-
&& apt-get clean \
|
57
|
-
&& rm -rf /var/lib/apt/lists/*
|
58
|
-
<% elsif database == "postgresql" %>
|
59
|
-
# install postgresql
|
60
|
-
RUN apt-get update -qq && apt-get install -y postgresql-client \
|
61
|
-
&& apt-get clean \
|
62
|
-
&& rm -rf /var/lib/apt/lists/*
|
63
|
-
<% end %>
|
64
|
-
# install Nodejs 10.13.0 and Yarn 1.10.1
|
65
|
-
ENV NODE_VERSION=10.13.0 YARN_VERSION=1.10.1
|
66
|
-
COPY --from=nodejs /usr/local/bin/ /usr/local/bin/
|
67
|
-
COPY --from=nodejs /usr/local/lib/ /usr/local/lib/
|
68
|
-
COPY --from=nodejs /opt/yarn-v1.10.1/ /opt/yarn-v1.10.1/
|
69
|
-
|
70
|
-
WORKDIR /app
|
71
|
-
|
72
|
-
COPY --from=builder /usr/local/bundle /usr/local/bundle
|
73
|
-
COPY --from=builder /app/ /app/
|
74
|
-
|
75
|
-
CMD [ "sh", "-c", "bundle exec rake db:create db:migrate && bundle exec rails server -b 0.0.0.0" ]
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# Ignore all files from .gitignore
|
2
|
-
# echo .git > .dockerignore && cat .gitignore >> .dockerignore
|
3
|
-
|
4
|
-
/log/*
|
5
|
-
/tmp/*
|
6
|
-
|
7
|
-
.byebug_history
|
8
|
-
|
9
|
-
volumes
|
10
|
-
|
11
|
-
public/packs
|
12
|
-
public/packs-test
|
13
|
-
public/uploads
|
14
|
-
|
15
|
-
node_modules
|
16
|
-
coverage
|
17
|
-
yarn-error.log
|
18
|
-
.DS_Store
|
19
|
-
.git
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
2
|
-
# echo .git > .dockerignore && cat .gitignore >> .dockerignore
|
3
|
-
|
4
|
-
.git
|
5
|
-
Dockerfile
|
6
|
-
|
7
|
-
# dependencies
|
8
|
-
/node_modules
|
9
|
-
/.pnp
|
10
|
-
.pnp.js
|
11
|
-
|
12
|
-
# testing
|
13
|
-
/coverage
|
14
|
-
|
15
|
-
# production
|
16
|
-
/build
|
17
|
-
|
18
|
-
# misc
|
19
|
-
.DS_Store
|
20
|
-
.env.local
|
21
|
-
.env.development.local
|
22
|
-
.env.test.local
|
23
|
-
.env.production.local
|
24
|
-
|
25
|
-
npm-debug.log*
|
26
|
-
yarn-debug.log*
|
27
|
-
yarn-error.log*
|