roro 0.3.13 → 0.3.21
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/.circleci/config.yml +55 -11
- data/.gitignore +3 -2
- data/Guardfile +8 -10
- data/README.md +2 -1
- data/lib/roro.rb +3 -1
- data/lib/roro/cli.rb +16 -74
- data/lib/roro/cli/generate/exposed.rb +14 -0
- data/lib/roro/cli/generate/{generate_keys.rb → keys.rb} +24 -2
- data/lib/roro/cli/generate/obfuscated.rb +17 -0
- data/lib/roro/cli/generate/story.rb +18 -0
- data/lib/roro/cli/greenfield/rails.rb +14 -0
- data/lib/roro/cli/rollon.rb +126 -63
- data/lib/roro/cli/rollon/rails/base/base.rb +4 -0
- data/lib/roro/cli/{base → rollon/rails/base}/insert_gems.rb +2 -10
- data/lib/roro/cli/{base → rollon/rails/base}/insertions.rb +8 -0
- data/lib/roro/cli/rollon/rails/database.rb +26 -0
- data/lib/roro/cli/rollon/{stories/rails → rails}/database/with_mysql.rb +4 -4
- data/lib/roro/cli/rollon/{stories/rails → rails}/database/with_postgresql.rb +5 -6
- data/lib/roro/cli/rollon/ruby_gem.rb +1 -0
- data/lib/roro/cli/rollon/{stories/ruby_gem → ruby_gem}/with_ci_cd.rb +8 -8
- data/lib/roro/cli/rollon/stories.rb +2 -2
- data/lib/roro/configurator.rb +15 -0
- data/lib/roro/configurator/eligibility.rb +137 -0
- data/lib/roro/configurator/okonomi.rb +28 -0
- data/lib/roro/configurator/omakase.rb +170 -0
- data/lib/roro/crypto.rb +73 -0
- data/lib/roro/stories/greenfield.yml +1 -0
- data/lib/roro/stories/greenfield/rails.yml +9 -0
- data/lib/roro/stories/rollon.yml +42 -0
- data/lib/roro/stories/rollon/rails.yml +76 -0
- data/lib/roro/stories/rollon/rails/ci_cd.yml +1 -0
- data/lib/roro/stories/rollon/rails/ci_cd/circleci.yml +2 -0
- data/lib/roro/stories/rollon/rails/database.yml +9 -0
- data/lib/roro/stories/rollon/rails/database/mysql.yml +17 -0
- data/lib/roro/stories/rollon/rails/database/postgresql.yml +15 -0
- data/lib/roro/stories/rollon/rails/kubernetes.yml +1 -0
- data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +10 -0
- data/lib/roro/stories/rollon/rails/kubernetes/postgresql/default.yml +1 -0
- data/lib/roro/stories/rollon/rails/kubernetes/postgresql/edge.yml +1 -0
- data/lib/roro/stories/rollon/ruby_gem.yml +5 -0
- data/lib/roro/templates/base/.circleci/_aliases.yml +8 -0
- data/lib/roro/templates/base/.circleci/_commands.yml +31 -0
- data/lib/roro/templates/base/.circleci/_defaults.yml +5 -0
- data/lib/roro/templates/base/.circleci/_executors.yml +11 -0
- data/lib/roro/templates/base/.circleci/_major_only.yml +4 -0
- data/lib/roro/templates/base/.circleci/_version.yml +1 -0
- data/lib/roro/templates/base/.circleci/_workflow.yml +2 -0
- data/lib/roro/templates/base/.circleci/config.job-example.yml +33 -0
- data/lib/roro/templates/base/.circleci/jobs/_build.yml +4 -0
- data/lib/roro/templates/base/.circleci/jobs/_release.yml +12 -0
- data/lib/roro/templates/base/.circleci/workflows/_build_release.yml +10 -0
- data/lib/roro/{cli/templates → templates}/base/.dockerignore +0 -0
- data/lib/roro/templates/base/dotenv +1 -0
- data/lib/roro/{cli/rollon/stories/rails → templates/base/jumpstart}/.keep +0 -0
- data/lib/roro/{cli/templates → templates/base}/jumpstart/Dockerfile.tt +0 -0
- data/lib/roro/{cli/templates → templates/base}/jumpstart/docker-compose.yml +0 -0
- data/lib/roro/{cli/templates → templates/base}/jumpstart/docker-entrypoint.sh +0 -0
- data/lib/roro/{cli/templates → templates/base}/livereload/hosts.example +0 -0
- data/lib/roro/{cli/templates/base → templates/base/roro}/.keep +0 -0
- data/lib/roro/{cli/templates/jumpstart → templates/base/roro/roro}/.keep +0 -0
- data/lib/roro/{cli/templates/roro → templates/base/roro/roro/containers}/.keep +0 -0
- data/lib/roro/{cli/templates/roro/roro → templates/base/roro/roro/containers/app}/.keep +0 -0
- data/lib/roro/{cli/templates/roro/roro/containers → templates/base/roro/roro/containers/frontend}/.keep +0 -0
- data/lib/roro/{cli/templates → templates/base}/roro/roro/docker-entrypoint.sh.tt +0 -0
- data/lib/roro/{cli/templates/roro/roro/containers/app → templates/rails/.circleci}/.keep +0 -0
- data/lib/roro/templates/rails/.circleci/config.yml.tt +11 -0
- data/lib/roro/templates/rails/.circleci/jobs/_build.yml +14 -0
- data/lib/roro/templates/rails/.circleci/jobs/_push.yml +11 -0
- data/lib/roro/templates/rails/.circleci/jobs/_test.yml +12 -0
- data/lib/roro/{cli/templates/ruby_gem → templates/rails}/.circleci/setup-gem-credentials.sh +0 -0
- data/lib/roro/templates/rails/.circleci/workflows/_build_test_push.yml +12 -0
- data/lib/roro/{cli/templates/roro/roro/containers/frontend → templates/rails}/.keep +0 -0
- data/lib/roro/templates/rails/Dockerfile.greenfield.tt +51 -0
- data/lib/roro/{cli/templates/base → templates/rails}/config/database.mysql.yml +0 -0
- data/lib/roro/{cli/templates/base → templates/rails}/config/database.pg.yml +2 -3
- data/lib/roro/templates/rails/database/with_mysql/_service.yml +10 -0
- data/lib/roro/{cli/templates/ruby_gem/.circleci → templates/rails/database/with_postgresql}/.keep +0 -0
- data/lib/roro/templates/rails/database/with_postgresql/_service.yml +7 -0
- data/lib/roro/{cli/templates/roro → templates/rails}/docker-compose.yml.tt +9 -10
- data/lib/roro/{cli/templates/ruby_gem/roro/containers → templates/rails/dotenv}/.keep +0 -0
- data/lib/roro/templates/rails/dotenv/database.mysql.env.tt +6 -0
- data/lib/roro/templates/rails/dotenv/database.pg.env.tt +4 -0
- data/lib/roro/templates/rails/dotenv/web.env.tt +2 -0
- data/lib/roro/templates/rails/kube.rake.tt +114 -0
- data/lib/roro/{cli/templates/ruby_gem/roro/keys → templates/rails/roro}/.keep +0 -0
- data/lib/roro/{cli/templates/stories → templates/rails/roro/containers}/.keep +0 -0
- data/lib/roro/{cli/templates/stories/rails/database/with_postgresql → templates/rails/roro/containers/app}/.keep +0 -0
- data/lib/roro/templates/rails/roro/containers/app/Dockerfile.tt +34 -0
- data/lib/roro/{cli/templates/stories/with_postgresql → templates/rails/roro/containers/frontend}/.keep +0 -0
- data/lib/roro/templates/rails/roro/docker-entrypoint.sh +8 -0
- data/lib/roro/{cli/rollon/stories/database.rb → templates/rails/roro/kube/.keep} +0 -0
- data/lib/roro/templates/rails/roro/kube/certificate.yml.tt +0 -0
- data/lib/roro/templates/rails/roro/kube/cluster-issuer.yml.tt +0 -0
- data/lib/roro/templates/rails/roro/kube/deployment.yml.tt +50 -0
- data/lib/roro/templates/rails/roro/kube/deployments/postgres_deploy.yaml +47 -0
- data/lib/roro/templates/rails/roro/kube/deployments/rails_deploy.yaml +62 -0
- data/lib/roro/templates/rails/roro/kube/deployments/redis_deploy.yaml +23 -0
- data/lib/roro/templates/rails/roro/kube/deployments/sidekiq_deploy.yaml +56 -0
- data/lib/roro/templates/rails/roro/kube/ingress.yml.tt +0 -0
- data/lib/roro/templates/rails/roro/kube/ingresses/ingress.yaml +13 -0
- data/lib/roro/templates/rails/roro/kube/job-migrate.yml.tt +0 -0
- data/lib/roro/templates/rails/roro/kube/jobs/setup.yaml +42 -0
- data/lib/roro/templates/rails/roro/kube/secret-digital-ocean.yml.tt +4 -0
- data/lib/roro/templates/rails/roro/kube/service.yml.tt +10 -0
- data/lib/roro/templates/rails/roro/kube/services/postgres_svc.yaml +13 -0
- data/lib/roro/templates/rails/roro/kube/services/rails_svc.yaml +13 -0
- data/lib/roro/templates/rails/roro/kube/services/redis_svc.yaml +13 -0
- data/lib/roro/templates/rails/roro/kube/volumes/postgres_volumes.yaml +25 -0
- data/lib/roro/templates/ruby_gem/.circleci/.keep +0 -0
- data/lib/roro/templates/ruby_gem/.circleci/config.yml.tt +16 -0
- data/lib/roro/templates/ruby_gem/.circleci/jobs/_test.yml +4 -0
- data/lib/roro/templates/ruby_gem/.circleci/setup-gem-credentials.sh +3 -0
- data/lib/roro/{cli/templates → templates}/ruby_gem/docker-compose.yml +0 -0
- data/lib/roro/templates/ruby_gem/roro/containers/.keep +0 -0
- data/lib/roro/{cli/templates → templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +1 -1
- data/lib/roro/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +1 -0
- data/lib/roro/templates/ruby_gem/roro/keys/.keep +0 -0
- data/lib/roro/version.rb +1 -1
- data/roro.gemspec +11 -21
- data/roro/containers/app/Dockerfile +51 -0
- metadata +165 -173
- data/lib/roro/cli/base/base.rb +0 -8
- data/lib/roro/cli/base/base_files.rb +0 -24
- data/lib/roro/cli/base/check_dependencies.rb +0 -98
- data/lib/roro/cli/base/continuous_integration.rb +0 -13
- data/lib/roro/cli/base/utilities.rb +0 -39
- data/lib/roro/cli/cli.rb +0 -99
- data/lib/roro/cli/configuration.rb +0 -69
- data/lib/roro/cli/expose.rb +0 -14
- data/lib/roro/cli/generate/config.rb +0 -13
- data/lib/roro/cli/generate/config/rails.rb +0 -17
- data/lib/roro/cli/greenfield.rb +0 -31
- data/lib/roro/cli/obfuscate.rb +0 -19
- data/lib/roro/cli/rollon/stories/rails.rb +0 -1
- data/lib/roro/cli/rollon/stories/rails/database.rb +0 -33
- data/lib/roro/cli/rollon/stories/ruby_gem.rb +0 -77
- data/lib/roro/cli/rollon/stories/stories.rb +0 -3
- data/lib/roro/cli/roro_configurator.yml +0 -157
- data/lib/roro/cli/ruby_gem.rb +0 -67
- data/lib/roro/cli/templates/base/.roro_config.yml +0 -15
- data/lib/roro/cli/templates/base/Dockerfile.tt +0 -82
- data/lib/roro/cli/templates/greenfield/Dockerfile.tt +0 -43
- data/lib/roro/cli/templates/ruby_gem/.circleci/config.yml.tt +0 -40
- data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -1
- data/lib/roro/cli/templates/stories/rails/database/with_mysql/_service.yml +0 -10
- data/lib/roro/cli/templates/stories/rails/database/with_postgresql/_service.yml +0 -7
- data/lib/roro/cli/templates/stories/ruby_gem/with_ci_cd/_build.yml +0 -11
- data/lib/roro/cli/templates/stories/with_mysql/_service.yml +0 -10
- data/lib/roro/cli/templates/stories/with_postgresql/_service.yml +0 -7
- data/lib/tasks/deploy.rake +0 -126
- data/vendor/cache/actionpack-6.0.3.2.gem +0 -0
- data/vendor/cache/actionview-6.0.3.2.gem +0 -0
- data/vendor/cache/activesupport-6.0.3.2.gem +0 -0
- data/vendor/cache/addressable-2.7.0.gem +0 -0
- data/vendor/cache/builder-3.2.4.gem +0 -0
- data/vendor/cache/byebug-11.1.3.gem +0 -0
- data/vendor/cache/coderay-1.1.3.gem +0 -0
- data/vendor/cache/concurrent-ruby-1.1.7.gem +0 -0
- data/vendor/cache/crass-1.0.6.gem +0 -0
- data/vendor/cache/em-websocket-0.5.1.gem +0 -0
- data/vendor/cache/erubi-1.9.0.gem +0 -0
- data/vendor/cache/eventmachine-1.2.7.gem +0 -0
- data/vendor/cache/ffi-1.13.1.gem +0 -0
- data/vendor/cache/formatador-0.2.5.gem +0 -0
- data/vendor/cache/gem-release-2.1.1.gem +0 -0
- data/vendor/cache/given_core-3.8.0.gem +0 -0
- data/vendor/cache/guard-2.16.2.gem +0 -0
- data/vendor/cache/guard-compat-1.2.1.gem +0 -0
- data/vendor/cache/guard-livereload-2.5.2.gem +0 -0
- data/vendor/cache/guard-minitest-2.4.6.gem +0 -0
- data/vendor/cache/handsome_fencer-crypto-0.1.6.gem +0 -0
- data/vendor/cache/handsome_fencer-test-0.1.1.gem +0 -0
- data/vendor/cache/http_parser.rb-0.6.0.gem +0 -0
- data/vendor/cache/i18n-1.8.5.gem +0 -0
- data/vendor/cache/launchy-2.5.0.gem +0 -0
- data/vendor/cache/listen-3.2.1.gem +0 -0
- data/vendor/cache/loofah-2.6.0.gem +0 -0
- data/vendor/cache/lumberjack-1.2.7.gem +0 -0
- data/vendor/cache/method_source-1.0.0.gem +0 -0
- data/vendor/cache/mini_portile2-2.4.0.gem +0 -0
- data/vendor/cache/minitest-5.14.1.gem +0 -0
- data/vendor/cache/minitest-given-3.8.0.gem +0 -0
- data/vendor/cache/minitest-matchers_vaccine-1.0.4.gem +0 -0
- data/vendor/cache/minitest-rails-6.0.1.gem +0 -0
- data/vendor/cache/mocha-1.11.2.gem +0 -0
- data/vendor/cache/multi_json-1.15.0.gem +0 -0
- data/vendor/cache/nenv-0.3.0.gem +0 -0
- data/vendor/cache/net-scp-3.0.0.gem +0 -0
- data/vendor/cache/net-ssh-6.1.0.gem +0 -0
- data/vendor/cache/nokogiri-1.10.10.gem +0 -0
- data/vendor/cache/notiffany-0.1.3.gem +0 -0
- data/vendor/cache/os-1.0.0.gem +0 -0
- data/vendor/cache/pry-0.13.1.gem +0 -0
- data/vendor/cache/public_suffix-4.0.5.gem +0 -0
- data/vendor/cache/rack-2.2.3.gem +0 -0
- data/vendor/cache/rack-livereload-0.3.17.gem +0 -0
- data/vendor/cache/rack-test-1.1.0.gem +0 -0
- data/vendor/cache/rails-dom-testing-2.0.3.gem +0 -0
- data/vendor/cache/rails-html-sanitizer-1.3.0.gem +0 -0
- data/vendor/cache/railties-6.0.3.2.gem +0 -0
- data/vendor/cache/rake-13.0.1.gem +0 -0
- data/vendor/cache/rb-fsevent-0.10.4.gem +0 -0
- data/vendor/cache/rb-inotify-0.10.1.gem +0 -0
- data/vendor/cache/shellany-0.0.1.gem +0 -0
- data/vendor/cache/shoulda-4.0.0.gem +0 -0
- data/vendor/cache/shoulda-context-2.0.0.gem +0 -0
- data/vendor/cache/shoulda-matchers-4.3.0.gem +0 -0
- data/vendor/cache/sorcerer-2.0.1.gem +0 -0
- data/vendor/cache/sshkit-1.18.2.gem +0 -0
- data/vendor/cache/thor-1.0.1.gem +0 -0
- data/vendor/cache/thread_safe-0.3.6.gem +0 -0
- data/vendor/cache/tzinfo-1.2.7.gem +0 -0
- data/vendor/cache/zeitwerk-2.4.0.gem +0 -0
|
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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%= yaml_from_template("base/.circleci/_version.yml") %>
|
|
2
|
+
<%= yaml_from_template("base/.circleci/_defaults.yml") %>
|
|
3
|
+
<%= yaml_from_template("base/.circleci/_major_only.yml") %>
|
|
4
|
+
<%= yaml_from_template("base/.circleci/_executors.yml") %>
|
|
5
|
+
<%= yaml_from_template("base/.circleci/_commands.yml") %>
|
|
6
|
+
|
|
7
|
+
<%= yaml_from_template("rails/.circleci/jobs/_build.yml") %>
|
|
8
|
+
<%= yaml_from_template("rails/.circleci/jobs/_test.yml") %>
|
|
9
|
+
<%= yaml_from_template("rails/.circleci/jobs/_push.yml") %>
|
|
10
|
+
<%= yaml_from_template("base/.circleci/_workflow.yml") %>
|
|
11
|
+
<%= yaml_from_template("rails/.circleci/workflows/_build_test_push.yml") %>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
test:
|
|
2
|
+
<<: *defaults
|
|
3
|
+
steps:
|
|
4
|
+
- checkout
|
|
5
|
+
- attach-roro
|
|
6
|
+
- run: docker-compose build
|
|
7
|
+
- run: docker-compose up -d
|
|
8
|
+
- run: docker-compose run app bundle
|
|
9
|
+
- run: docker-compose run app yarn
|
|
10
|
+
- run: docker-compose run app bin/rails db:create
|
|
11
|
+
- run: docker-compose run app bin/rails db:migrate
|
|
12
|
+
- run: docker-compose run app bin/rails test
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
FROM ruby:<%= config[:ruby_version] %>-alpine AS builder
|
|
2
|
+
|
|
3
|
+
LABEL maintainer="<%= config[:docker_email] %> using RoRo"
|
|
4
|
+
|
|
5
|
+
# Add basic packages
|
|
6
|
+
RUN apk add --no-cache \
|
|
7
|
+
build-base \
|
|
8
|
+
postgresql-dev \
|
|
9
|
+
git \
|
|
10
|
+
nodejs \
|
|
11
|
+
yarn \
|
|
12
|
+
tzdata \
|
|
13
|
+
file
|
|
14
|
+
|
|
15
|
+
## Set APP_HOME and BUNDLE_PATH as using ENV instructions:
|
|
16
|
+
ENV APP_HOME /usr/src/app/
|
|
17
|
+
ENV BUNDLE_PATH /gems
|
|
18
|
+
|
|
19
|
+
## Create both as directories to make sure they exist:
|
|
20
|
+
RUN mkdir -p ${APP_HOME}
|
|
21
|
+
RUN mkdir ${BUNDLE_PATH}
|
|
22
|
+
|
|
23
|
+
## Tell Docker to create volumes for our workspace and gems
|
|
24
|
+
## so other containers can access them.
|
|
25
|
+
|
|
26
|
+
RUN gem install bundler:2.1.4
|
|
27
|
+
|
|
28
|
+
WORKDIR ${APP_HOME}
|
|
29
|
+
|
|
30
|
+
## Create a Gemfile with just the Rails gem inside:
|
|
31
|
+
RUN echo -e "source 'https://rubygems.org'\ngem 'rails'" > Gemfile
|
|
32
|
+
|
|
33
|
+
## Bundle to install rails:
|
|
34
|
+
RUN bundle install
|
|
35
|
+
|
|
36
|
+
## Use Rails to generate a new app. We'll configure it later.
|
|
37
|
+
RUN bundle exec rails new . \
|
|
38
|
+
--database=postgresql \
|
|
39
|
+
--skip-bundle \
|
|
40
|
+
--skip-webpack-install
|
|
41
|
+
RUN bundle --jobs 4
|
|
42
|
+
RUN bundle exec rails webpacker:install
|
|
43
|
+
RUN bundle exec rails yarn:install
|
|
44
|
+
## Tell docker not to create a layer:
|
|
45
|
+
FROM scratch AS export-stage
|
|
46
|
+
|
|
47
|
+
## Copy the generated files onto the host. Note that because we are in a
|
|
48
|
+
## new container, we don't have access to the previous ${APP_HOME}
|
|
49
|
+
## variable and so we must hard code it as our source:
|
|
50
|
+
COPY --from=builder /usr/src/app/ .
|
|
51
|
+
|
|
File without changes
|
|
@@ -2,9 +2,9 @@ default: &default
|
|
|
2
2
|
adapter: postgresql
|
|
3
3
|
encoding: unicode
|
|
4
4
|
host: <%= ENV.fetch('DATABASE_HOST') %>
|
|
5
|
-
username: <%= ENV.fetch('
|
|
5
|
+
username: <%= ENV.fetch('POSTGRES_USERNAME') %>
|
|
6
6
|
password: <%= ENV.fetch('POSTGRES_PASSWORD') %>
|
|
7
|
-
database: <%= ENV.fetch('
|
|
7
|
+
database: <%= ENV.fetch('POSTGRES_DATABASE') %>
|
|
8
8
|
pool: 5
|
|
9
9
|
variables:
|
|
10
10
|
statement_timeout: 5000
|
|
@@ -15,6 +15,5 @@ development:
|
|
|
15
15
|
test:
|
|
16
16
|
<<: *default
|
|
17
17
|
|
|
18
|
-
|
|
19
18
|
production:
|
|
20
19
|
<<: *default
|
data/lib/roro/{cli/templates/ruby_gem/.circleci → templates/rails/database/with_postgresql}/.keep
RENAMED
|
File without changes
|
|
@@ -2,7 +2,7 @@ version: '3.2'
|
|
|
2
2
|
|
|
3
3
|
services:
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
app:
|
|
6
6
|
build:
|
|
7
7
|
context: .
|
|
8
8
|
dockerfile: roro/containers/app/Dockerfile
|
|
@@ -10,18 +10,18 @@ services:
|
|
|
10
10
|
- database
|
|
11
11
|
- redis
|
|
12
12
|
|
|
13
|
-
command: ["bin/rails", "s", "-b", "0.0.0.0"]
|
|
14
13
|
ports:
|
|
15
14
|
- "3000:3000"
|
|
16
15
|
- "4000:4000"
|
|
17
16
|
volumes:
|
|
18
|
-
-
|
|
17
|
+
- .:/usr/src/app
|
|
19
18
|
- gem_cache:/gems
|
|
20
19
|
env_file:
|
|
21
|
-
- roro/containers/app
|
|
22
|
-
- roro/containers/database
|
|
20
|
+
- roro/containers/app/${RORO_ENV:-development}.env
|
|
21
|
+
- roro/containers/database/${RORO_ENV:-development}.env
|
|
23
22
|
environment:
|
|
24
23
|
- WEBPACKER_DEV_SERVER_HOST=webpack_dev_server
|
|
24
|
+
command: ["bin/rails", "s", "-b", "0.0.0.0"]
|
|
25
25
|
|
|
26
26
|
webpack_dev_server:
|
|
27
27
|
build:
|
|
@@ -33,18 +33,18 @@ services:
|
|
|
33
33
|
ports:
|
|
34
34
|
- 3035:3035
|
|
35
35
|
volumes:
|
|
36
|
-
-
|
|
36
|
+
- .:/usr/src/app
|
|
37
37
|
- gem_cache:/gems
|
|
38
38
|
env_file:
|
|
39
|
-
- roro/containers/app
|
|
40
|
-
- roro/containers/database
|
|
39
|
+
- roro/containers/app/${RORO_ENV:-development}.env
|
|
40
|
+
- roro/containers/database/${RORO_ENV:-development}.env
|
|
41
41
|
environment:
|
|
42
42
|
- WEBPACKER_DEV_SERVER_HOST=0.0.0.0
|
|
43
43
|
|
|
44
44
|
redis:
|
|
45
45
|
image: redis
|
|
46
46
|
|
|
47
|
-
<%= yaml_from_template("
|
|
47
|
+
<%= yaml_from_template("rails/database/with_#{config[:database_vendor]}/_service.yml") %>
|
|
48
48
|
|
|
49
49
|
system_tests:
|
|
50
50
|
image: selenium/standalone-chrome-debug
|
|
@@ -57,4 +57,3 @@ services:
|
|
|
57
57
|
volumes:
|
|
58
58
|
db_data:
|
|
59
59
|
gem_cache:
|
|
60
|
-
app:
|
|
File without changes
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
MYSQL_DATABASE=<%= config[:main_app_name] + "_" + config[:rails_env] + "_db" %>
|
|
2
|
+
MYSQL_DATABASE_PORT=<%= config[:mysql_database_port] %>
|
|
3
|
+
MYSQL_ROOT_PASSWORD=<%= config[:mysql_root_password] %>
|
|
4
|
+
MYSQL_PASSWORD=<%= config[:mysql_password] %>
|
|
5
|
+
MYSQL_USERNAME=<%= config[:mysql_username] %>
|
|
6
|
+
RAILS_ENV=<%= config[:rails_env] %>
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# require 'dotenv/tasks'
|
|
2
|
+
|
|
3
|
+
# Rake.application.options.trace = false
|
|
4
|
+
|
|
5
|
+
# Dotenv.load('.env.production.cluster')
|
|
6
|
+
|
|
7
|
+
namespace :kube do
|
|
8
|
+
|
|
9
|
+
desc 'Rollout a new deployment'
|
|
10
|
+
task :deploy do
|
|
11
|
+
apply "kube/deployment.yml"
|
|
12
|
+
puts `kubectl rollout restart deployment <%= config[:main_app_name] %>-deployment`
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc 'Print useful information aout our Kubernete setup'
|
|
16
|
+
task :list do
|
|
17
|
+
kubectl 'get pods --all-namespaces'
|
|
18
|
+
kubectl 'get services --all-namespaces'
|
|
19
|
+
kubectl 'get ingresses --all-namespaces'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
desc 'Apply our Kubernete configurations to our cluster'
|
|
23
|
+
task :setup do
|
|
24
|
+
|
|
25
|
+
kubectl "apply -f #{Rails.root}/roro/kube/service.yml"
|
|
26
|
+
|
|
27
|
+
# # Add our Docker Hub credentials to our cluster
|
|
28
|
+
# kubectl(%Q{create secret docker-registry regcred \
|
|
29
|
+
# --docker-server=#{ENV['DOCKER_REGISTRY_SERVER']} \
|
|
30
|
+
# --docker-username=#{ENV['DOCKER_USERNAME']} \
|
|
31
|
+
# --docker-password=#{ENV['DOCKER_PASSWORD']} \
|
|
32
|
+
# --docker-email=#{ENV['DOCKER_EMAIL']} || true
|
|
33
|
+
# })
|
|
34
|
+
|
|
35
|
+
# # Install our Service Component
|
|
36
|
+
# apply "kube/service.yml"
|
|
37
|
+
|
|
38
|
+
# # Install our Rails app Deployment
|
|
39
|
+
# apply "kube/deployment.yml"
|
|
40
|
+
|
|
41
|
+
# # Installs Nginx Ingress controller
|
|
42
|
+
# apply "https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml"
|
|
43
|
+
|
|
44
|
+
# # Add a load balancer
|
|
45
|
+
# apply "https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud-generic.yaml"
|
|
46
|
+
|
|
47
|
+
# # Install our Ingress that will link our load balancer to our service(s)
|
|
48
|
+
# apply "kube/ingress.yml"
|
|
49
|
+
|
|
50
|
+
# # Add the Digital Ocean token to the cluster
|
|
51
|
+
# apply "kube/secret-digital-ocean.yml"
|
|
52
|
+
|
|
53
|
+
# # Install cert-manager
|
|
54
|
+
# kubectl 'create namespace cert-manager'
|
|
55
|
+
# apply "https://github.com/jetstack/cert-manager/releases/download/v0.14.0/cert-manager.yaml"
|
|
56
|
+
|
|
57
|
+
# # Add our certificate
|
|
58
|
+
# apply "kube/certificate.yml"
|
|
59
|
+
|
|
60
|
+
# # Add the certificate issuer
|
|
61
|
+
# apply "kube/cluster-issuer.yml"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
desc "Set the number of instances to run in the cluster"
|
|
65
|
+
task :scale, [:count] => [:environment] do |t, args|
|
|
66
|
+
kubectl "scale deployments/myapp-deployment --replicas #{args[:count]}"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
desc "Run database migrates the database"
|
|
70
|
+
task :migrate do
|
|
71
|
+
apply "kube/job-migrate.yml"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
desc "Open a session to a pod on the cluster"
|
|
75
|
+
task :shell do
|
|
76
|
+
exec "kubectl exec -it #{find_first_pod_name} bash"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
desc "Tail the log files on production"
|
|
80
|
+
task :logs do
|
|
81
|
+
exec 'kubectl logs -f -l app=myapp --all-containers'
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
desc "Runs a command in production"
|
|
85
|
+
task :run, [:command] => [:environment] do |t, args|
|
|
86
|
+
kubectl "exec -it #{find_first_pod_name} echo $(#{args[:command]})"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
desc "Run rails console in production"
|
|
90
|
+
task :console do
|
|
91
|
+
system "kubectl exec -it #{find_first_pod_name} bundle exec rails console"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
desc "Print the environment variables"
|
|
95
|
+
task :config do
|
|
96
|
+
system "kubectl exec -it #{find_first_pod_name} printenv | sort"
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def apply(configuration)
|
|
100
|
+
if File.file?(configuration)
|
|
101
|
+
puts %x{envsubst < #{configuration} | kubectl apply -f -}
|
|
102
|
+
else
|
|
103
|
+
kubectl "apply -f #{configuration}"
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def kubectl(command)
|
|
108
|
+
print %x{ kubectl #{command} }
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def find_first_pod_name
|
|
112
|
+
`kubectl get pods|grep myapp-deployment|awk '{print $1}'|head -n 1`.to_s.strip
|
|
113
|
+
end
|
|
114
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
## The FROM instruction below builds our first layer using an official image:
|
|
2
|
+
FROM ruby:<%= config[:ruby_version] %>-alpine
|
|
3
|
+
|
|
4
|
+
LABEL maintainer="<%= config[:docker_email] %> using RoRo"
|
|
5
|
+
|
|
6
|
+
# Add basic packages
|
|
7
|
+
RUN apk add --no-cache \
|
|
8
|
+
build-base \
|
|
9
|
+
postgresql-dev \
|
|
10
|
+
nodejs \
|
|
11
|
+
yarn \
|
|
12
|
+
tzdata \
|
|
13
|
+
file
|
|
14
|
+
|
|
15
|
+
## Set APP_HOME and BUNDLE_PATH as using ENV instructions:
|
|
16
|
+
ENV APP_HOME /usr/src/app/
|
|
17
|
+
ENV BUNDLE_PATH /gems
|
|
18
|
+
|
|
19
|
+
## Create both as directories to make sure they exist:
|
|
20
|
+
RUN mkdir -p ${APP_HOME}
|
|
21
|
+
RUN mkdir ${BUNDLE_PATH}
|
|
22
|
+
|
|
23
|
+
## Tell Docker to create volumes for our workspace and gems
|
|
24
|
+
## so other containers can access them.
|
|
25
|
+
|
|
26
|
+
RUN gem install bundler:2.1.4
|
|
27
|
+
|
|
28
|
+
WORKDIR ${APP_HOME}
|
|
29
|
+
|
|
30
|
+
COPY Gemfile* ./
|
|
31
|
+
|
|
32
|
+
RUN bundle --jobs 4
|
|
33
|
+
COPY . ${APP_HOME}
|
|
34
|
+
|
|
File without changes
|