roro 0.3.17 → 0.3.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +11 -10
  3. data/.gitignore +3 -2
  4. data/Guardfile +8 -10
  5. data/README.md +2 -1
  6. data/lib/roro.rb +1 -0
  7. data/lib/roro/cli.rb +13 -7
  8. data/lib/roro/cli/generate/story.rb +18 -0
  9. data/lib/roro/cli/greenfield/rails.rb +2 -24
  10. data/lib/roro/cli/rollon.rb +135 -8
  11. data/lib/roro/cli/rollon/rails/base/base.rb +4 -0
  12. data/lib/roro/cli/{base → rollon/rails/base}/insert_gems.rb +2 -10
  13. data/lib/roro/cli/{base → rollon/rails/base}/insertions.rb +8 -0
  14. data/lib/roro/cli/rollon/rails/database.rb +4 -8
  15. data/lib/roro/cli/rollon/rails/database/with_mysql.rb +2 -2
  16. data/lib/roro/cli/rollon/rails/database/with_postgresql.rb +3 -4
  17. data/lib/roro/cli/rollon/ruby_gem/with_ci_cd.rb +7 -7
  18. data/lib/roro/configurator.rb +15 -0
  19. data/lib/roro/configurator/eligibility.rb +137 -0
  20. data/lib/roro/configurator/okonomi.rb +28 -0
  21. data/lib/roro/configurator/omakase.rb +170 -0
  22. data/lib/roro/stories/greenfield.yml +1 -0
  23. data/lib/roro/stories/greenfield/rails.yml +9 -0
  24. data/lib/roro/stories/rollon.yml +42 -0
  25. data/lib/roro/stories/rollon/rails.yml +76 -0
  26. data/lib/roro/stories/rollon/rails/ci_cd.yml +1 -0
  27. data/lib/roro/stories/rollon/rails/ci_cd/circleci.yml +2 -0
  28. data/lib/roro/stories/rollon/rails/database.yml +9 -0
  29. data/lib/roro/stories/rollon/rails/database/mysql.yml +17 -0
  30. data/lib/roro/stories/rollon/rails/database/postgresql.yml +15 -0
  31. data/lib/roro/stories/rollon/rails/kubernetes.yml +1 -0
  32. data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +10 -0
  33. data/lib/roro/stories/rollon/rails/kubernetes/postgresql/default.yml +1 -0
  34. data/lib/roro/stories/rollon/rails/kubernetes/postgresql/edge.yml +1 -0
  35. data/lib/roro/stories/rollon/ruby_gem.yml +5 -0
  36. data/lib/roro/{cli/templates/rails → templates/base}/.circleci/_aliases.yml +0 -0
  37. data/lib/roro/templates/base/.circleci/_commands.yml +31 -0
  38. data/lib/roro/templates/base/.circleci/_defaults.yml +5 -0
  39. data/lib/roro/templates/base/.circleci/_executors.yml +11 -0
  40. data/lib/roro/templates/base/.circleci/_major_only.yml +4 -0
  41. data/lib/roro/templates/base/.circleci/_version.yml +1 -0
  42. data/lib/roro/{cli/templates → templates}/base/.circleci/_workflow.yml +0 -0
  43. data/lib/roro/{cli/templates → templates}/base/.circleci/config.job-example.yml +5 -5
  44. data/lib/roro/{cli/templates → templates}/base/.circleci/jobs/_build.yml +0 -0
  45. data/lib/roro/{cli/templates → templates}/base/.circleci/jobs/_release.yml +0 -0
  46. data/lib/roro/{cli/templates → templates}/base/.circleci/workflows/_build_release.yml +0 -0
  47. data/lib/roro/{cli/templates → templates}/base/.dockerignore +0 -0
  48. data/lib/roro/{cli/templates → templates}/base/dotenv +0 -0
  49. data/lib/roro/{cli/templates → templates}/base/jumpstart/.keep +0 -0
  50. data/lib/roro/{cli/templates → templates}/base/jumpstart/Dockerfile.tt +0 -0
  51. data/lib/roro/{cli/templates → templates}/base/jumpstart/docker-compose.yml +0 -0
  52. data/lib/roro/{cli/templates → templates}/base/jumpstart/docker-entrypoint.sh +0 -0
  53. data/lib/roro/{cli/templates → templates}/base/livereload/hosts.example +0 -0
  54. data/lib/roro/{cli/templates → templates}/base/roro/.keep +0 -0
  55. data/lib/roro/{cli/templates → templates}/base/roro/roro/.keep +0 -0
  56. data/lib/roro/{cli/templates → templates}/base/roro/roro/containers/.keep +0 -0
  57. data/lib/roro/{cli/templates → templates}/base/roro/roro/containers/app/.keep +0 -0
  58. data/lib/roro/{cli/templates → templates}/base/roro/roro/containers/frontend/.keep +0 -0
  59. data/lib/roro/{cli/templates → templates}/base/roro/roro/docker-entrypoint.sh.tt +0 -0
  60. data/lib/roro/{cli/templates → templates}/rails/.circleci/.keep +0 -0
  61. data/lib/roro/{cli/templates → templates}/rails/.circleci/config.yml.tt +4 -6
  62. data/lib/roro/{cli/templates → templates}/rails/.circleci/jobs/_build.yml +4 -6
  63. data/lib/roro/templates/rails/.circleci/jobs/_push.yml +11 -0
  64. data/lib/roro/templates/rails/.circleci/jobs/_test.yml +12 -0
  65. data/lib/roro/{cli/templates → templates}/rails/.circleci/setup-gem-credentials.sh +0 -0
  66. data/lib/roro/templates/rails/.circleci/workflows/_build_test_push.yml +12 -0
  67. data/lib/roro/{cli/templates → templates}/rails/.keep +0 -0
  68. data/lib/roro/templates/rails/Dockerfile.greenfield.tt +51 -0
  69. data/lib/roro/{cli/templates → templates}/rails/config/database.mysql.yml +0 -0
  70. data/lib/roro/{cli/templates → templates}/rails/config/database.pg.yml +2 -3
  71. data/lib/roro/{cli/templates/stories → templates/rails/database}/with_mysql/_service.yml +0 -0
  72. data/lib/roro/{cli/templates → templates}/rails/database/with_postgresql/.keep +0 -0
  73. data/lib/roro/{cli/templates/stories → templates/rails/database}/with_postgresql/_service.yml +0 -0
  74. data/lib/roro/{cli/templates → templates}/rails/docker-compose.yml.tt +3 -3
  75. data/lib/roro/{cli/templates → templates}/rails/dotenv/.keep +0 -0
  76. data/lib/roro/templates/rails/dotenv/database.mysql.env.tt +6 -0
  77. data/lib/roro/templates/rails/dotenv/database.pg.env.tt +4 -0
  78. data/lib/roro/{cli/templates → templates}/rails/dotenv/web.env.tt +0 -0
  79. data/lib/roro/templates/rails/kube.rake.tt +114 -0
  80. data/lib/roro/{cli/templates → templates}/rails/roro/.keep +0 -0
  81. data/lib/roro/{cli/templates → templates}/rails/roro/containers/.keep +0 -0
  82. data/lib/roro/{cli/templates → templates}/rails/roro/containers/app/.keep +0 -0
  83. data/lib/roro/templates/rails/roro/containers/app/Dockerfile.tt +34 -0
  84. data/lib/roro/{cli/templates → templates}/rails/roro/containers/frontend/.keep +0 -0
  85. data/lib/roro/{cli/templates/rails/roro/docker-entrypoint.sh.tt → templates/rails/roro/docker-entrypoint.sh} +0 -0
  86. data/lib/roro/{cli/templates/rails/roro/roro → templates/rails/roro/kube}/.keep +0 -0
  87. data/lib/roro/{cli/templates/rails/roro/roro/containers/.keep → templates/rails/roro/kube/certificate.yml.tt} +0 -0
  88. data/lib/roro/{cli/templates/rails/roro/roro/containers/app/.keep → templates/rails/roro/kube/cluster-issuer.yml.tt} +0 -0
  89. data/lib/roro/templates/rails/roro/kube/deployment.yml.tt +50 -0
  90. data/lib/roro/templates/rails/roro/kube/deployments/postgres_deploy.yaml +47 -0
  91. data/lib/roro/templates/rails/roro/kube/deployments/rails_deploy.yaml +62 -0
  92. data/lib/roro/templates/rails/roro/kube/deployments/redis_deploy.yaml +23 -0
  93. data/lib/roro/templates/rails/roro/kube/deployments/sidekiq_deploy.yaml +56 -0
  94. data/lib/roro/{cli/templates/rails/roro/roro/containers/frontend/.keep → templates/rails/roro/kube/ingress.yml.tt} +0 -0
  95. data/lib/roro/templates/rails/roro/kube/ingresses/ingress.yaml +13 -0
  96. data/lib/roro/{cli/templates/ruby_gem/.circleci/.keep → templates/rails/roro/kube/job-migrate.yml.tt} +0 -0
  97. data/lib/roro/templates/rails/roro/kube/jobs/setup.yaml +42 -0
  98. data/lib/roro/templates/rails/roro/kube/secret-digital-ocean.yml.tt +4 -0
  99. data/lib/roro/templates/rails/roro/kube/service.yml.tt +10 -0
  100. data/lib/roro/templates/rails/roro/kube/services/postgres_svc.yaml +13 -0
  101. data/lib/roro/templates/rails/roro/kube/services/rails_svc.yaml +13 -0
  102. data/lib/roro/templates/rails/roro/kube/services/redis_svc.yaml +13 -0
  103. data/lib/roro/templates/rails/roro/kube/volumes/postgres_volumes.yaml +25 -0
  104. data/lib/roro/{cli/templates/ruby_gem/roro/containers → templates/ruby_gem/.circleci}/.keep +0 -0
  105. data/lib/roro/{cli/templates → templates}/ruby_gem/.circleci/config.yml.tt +4 -4
  106. data/lib/roro/templates/ruby_gem/.circleci/jobs/_test.yml +4 -0
  107. data/lib/roro/{cli/templates → templates}/ruby_gem/.circleci/setup-gem-credentials.sh +0 -0
  108. data/lib/roro/{cli/templates → templates}/ruby_gem/docker-compose.yml +0 -0
  109. data/lib/roro/{cli/templates/ruby_gem/roro/keys → templates/ruby_gem/roro/containers}/.keep +0 -0
  110. data/lib/roro/{cli/templates → templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +1 -1
  111. data/lib/roro/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +1 -0
  112. data/lib/roro/{cli/templates/stories → templates/ruby_gem/roro/keys}/.keep +0 -0
  113. data/lib/roro/version.rb +1 -1
  114. metadata +101 -80
  115. data/lib/roro/cli/base/base.rb +0 -8
  116. data/lib/roro/cli/base/base_files.rb +0 -24
  117. data/lib/roro/cli/base/check_dependencies.rb +0 -97
  118. data/lib/roro/cli/base/continuous_integration.rb +0 -13
  119. data/lib/roro/cli/base/utilities.rb +0 -38
  120. data/lib/roro/cli/configuration.rb +0 -69
  121. data/lib/roro/cli/generate/config.rb +0 -11
  122. data/lib/roro/cli/generate/config/rails.rb +0 -17
  123. data/lib/roro/cli/rollon/rails.rb +0 -47
  124. data/lib/roro/cli/rollon/stories/stories.rb +0 -3
  125. data/lib/roro/cli/roro_configurator.yml +0 -157
  126. data/lib/roro/cli/templates/base/.circleci/_defaults.yml +0 -17
  127. data/lib/roro/cli/templates/base/.roro_config.yml +0 -15
  128. data/lib/roro/cli/templates/rails/.circleci/jobs/_push.yml +0 -23
  129. data/lib/roro/cli/templates/rails/.circleci/jobs/_test.yml +0 -13
  130. data/lib/roro/cli/templates/rails/.circleci/workflows/_build_test_push.yml +0 -9
  131. data/lib/roro/cli/templates/rails/Dockerfile.greenfield.tt +0 -47
  132. data/lib/roro/cli/templates/rails/database/with_mysql/_service.yml +0 -10
  133. data/lib/roro/cli/templates/rails/database/with_postgresql/_service.yml +0 -7
  134. data/lib/roro/cli/templates/rails/dotenv/database.mysql.env.tt +0 -3
  135. data/lib/roro/cli/templates/rails/dotenv/database.pg.env.tt +0 -4
  136. data/lib/roro/cli/templates/rails/roro/containers/app/Dockerfile.tt +0 -88
  137. data/lib/roro/cli/templates/rails/roro/roro/docker-entrypoint.sh.tt +0 -8
  138. data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -1
  139. data/lib/roro/cli/templates/stories/ruby_gem/with_ci_cd/_build.yml +0 -11
  140. data/lib/roro/cli/templates/stories/with_postgresql/.keep +0 -0
  141. data/lib/tasks/deploy.rake +0 -126
@@ -0,0 +1 @@
1
+ stories: circleci
@@ -0,0 +1,2 @@
1
+ env_vars:
2
+ deploy_tag: "${CIRCLE_SHA1:0:7}"
@@ -0,0 +1,9 @@
1
+ stories: postgresql
2
+
3
+ actions:
4
+ - |
5
+ Roro::CLI.roro_environments.each do |environment|
6
+ src = 'rails/dotenv/web.env.tt'
7
+ dest = "roro/containers/app/#{environment}.env"
8
+ template src, dest, @config.env
9
+ end
@@ -0,0 +1,17 @@
1
+ env_vars:
2
+ mysql_root_password: 'root-mysql-password'
3
+ mysql_password: your-mysql-password
4
+ mysql_username: 'root'
5
+ mysql_database_port: '3306'
6
+ database_vendor: mysql
7
+
8
+ actions:
9
+ - copy_file 'rails/config/database.mysql.yml', 'config/database.yml', @config.env
10
+ - |
11
+ Roro::CLI.roro_environments.each do |e|
12
+ @config.env[:rails_env] = e
13
+ source = 'rails/dotenv/database.mysql.env.tt'
14
+ target = "roro/containers/database/#{e}.env"
15
+ template( source, target, @config.env)
16
+ end
17
+
@@ -0,0 +1,15 @@
1
+ env_vars:
2
+ postgres_username: postgres
3
+ postgres_password: your-postgres-password
4
+ database_vendor: postgresql
5
+
6
+ actions:
7
+ - copy_file 'rails/config/database.pg.yml', 'config/database.yml', @config.env
8
+ - |
9
+ Roro::CLI.roro_environments.each do |e|
10
+ @config.env[:rails_env] = e
11
+ source = 'rails/dotenv/database.pg.env.tt'
12
+ target = "roro/containers/database/#{e}.env"
13
+ template( source, target, @config.env)
14
+ end
15
+
@@ -0,0 +1 @@
1
+ stories: postgresql
@@ -0,0 +1,10 @@
1
+ stories:
2
+ - default
3
+ - edge
4
+
5
+ actions:
6
+ - template 'rails/.circleci/config.yml.tt', './.circleci/config.yml'
7
+ - template 'rails/docker-compose.yml.tt', './docker-compose.yml', @config.env
8
+ - template 'base/dotenv', './.env', @config.env
9
+ - directory 'rails/roro', './roro', @config.env
10
+ - template 'rails/kube.rake.tt', './lib/tasks/kube.rake', @config.env
@@ -0,0 +1,5 @@
1
+ story:
2
+ ci_cd: circleci
3
+ env_vars:
4
+ ruby_version: '2.7'
5
+
@@ -0,0 +1,31 @@
1
+ commands:
2
+ setup-docker-builds:
3
+ steps:
4
+ - setup_remote_docker:
5
+ docker_layer_caching: false
6
+
7
+ source-ci-vars:
8
+ steps:
9
+ - run: |
10
+ echo 'source roro/containers/app/ci.env' >> ${BASH_ENV}
11
+ source ${BASH_ENV}
12
+
13
+ attach-roro:
14
+ steps:
15
+ - attach_workspace:
16
+ at: workspace
17
+ - run: cp -rf workspace/roro .
18
+ - source-ci-vars
19
+
20
+ tag-and-push:
21
+ parameters:
22
+ deploy_tag:
23
+ type: string
24
+ default: latest
25
+ steps:
26
+ - run: |
27
+ SOURCE=$(docker images | grep project_app | awk '{ print $3 }')
28
+ DOCKER_REPO=${DOCKER_ORG}/${APP_NAME}_app
29
+ TAGGED_IMAGE=${DOCKER_REPO}:<< parameters.deploy_tag >>
30
+ docker tag ${SOURCE} ${TAGGED_IMAGE}
31
+ docker push ${TAGGED_IMAGE}
@@ -0,0 +1,5 @@
1
+ defaults: &defaults
2
+ executor: machine-layer-caching
3
+ working_directory: ~/project
4
+ environment:
5
+ RORO_ENV: ci
@@ -0,0 +1,11 @@
1
+ executors:
2
+ machine-layer-caching:
3
+ machine:
4
+ image: circleci/classic:latest
5
+ docker_layer_caching: true
6
+ machine-executor:
7
+ machine:
8
+ image: circleci/classic:latest
9
+ ruby-executor:
10
+ docker:
11
+ - image: cimg/ruby:2.7
@@ -0,0 +1,4 @@
1
+ major_only: &major_only
2
+ filters:
3
+ branches:
4
+ only: master
@@ -0,0 +1 @@
1
+ version: 2.1
@@ -18,16 +18,16 @@ jobs:
18
18
  - run: docker-compose build
19
19
  - run: docker-compose up -d
20
20
  - run: docker-compose exec app bin/rails db:create db:migrate
21
- - run: docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS
21
+ - run: docker login -u $docker_USER -p $DOCKER_PASS
22
22
  - run:
23
23
  name: Tag app image
24
- command: docker tag $(docker images | grep project_app | awk '{ print $3 }') ${DOCKERHUB_ORG_NAME}/${APP_NAME}_app:$DEPLOY_TAG
24
+ command: docker tag $(docker images | grep project_app | awk '{ print $3 }') ${DOCKER_ORG_NAME}/${APP_NAME}_app:$DEPLOY_TAG
25
25
  - run:
26
26
  name: Tag web image
27
- command: docker tag $(docker images | grep project_web | awk '{ print $3 }') ${DOCKERHUB_ORG_NAME}/${APP_NAME}_web:$DEPLOY_TAG
27
+ command: docker tag $(docker images | grep project_web | awk '{ print $3 }') ${DOCKER_ORG_NAME}/${APP_NAME}_web:$DEPLOY_TAG
28
28
 
29
29
 
30
- - run: docker push ${DOCKERHUB_ORG_NAME}/${APP_NAME}_app:$DEPLOY_TAG
31
- - run: docker push ${DOCKERHUB_ORG_NAME}/${APP_NAME}_web:$DEPLOY_TAG
30
+ - run: docker push ${DOCKER_ORG_NAME}/${APP_NAME}_app:$DEPLOY_TAG
31
+ - run: docker push ${DOCKER_ORG_NAME}/${APP_NAME}_web:$DEPLOY_TAG
32
32
 
33
33
  - run: rake --rakefile .circleci/Rakefile
@@ -1,13 +1,11 @@
1
- <%= yaml_from_template("rails/.circleci/_aliases.yml") %>
2
-
1
+ <%= yaml_from_template("base/.circleci/_version.yml") %>
3
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") %>
4
6
 
5
7
  <%= yaml_from_template("rails/.circleci/jobs/_build.yml") %>
6
-
7
8
  <%= yaml_from_template("rails/.circleci/jobs/_test.yml") %>
8
-
9
9
  <%= yaml_from_template("rails/.circleci/jobs/_push.yml") %>
10
-
11
10
  <%= yaml_from_template("base/.circleci/_workflow.yml") %>
12
-
13
11
  <%= yaml_from_template("rails/.circleci/workflows/_build_test_push.yml") %>
@@ -1,16 +1,14 @@
1
+ jobs:
1
2
  build:
2
3
  <<: *defaults
3
4
  steps:
4
5
  - checkout
5
- - run: |
6
- gem install roro
7
- roro generate::exposed ci
6
+ - run: gem install roro
7
+ - run: roro generate::exposed ci
8
8
  - run: |
9
9
  mkdir -p workspace
10
10
  cp -r roro workspace/
11
11
  - persist_to_workspace:
12
12
  root: workspace
13
13
  paths:
14
- - roro
15
- - run: *source-ci-variables
16
- - run: RORO_ENV=ci docker-compose build
14
+ - roro
@@ -0,0 +1,11 @@
1
+ push:
2
+ <<: *defaults
3
+ steps:
4
+ - checkout
5
+ - attach-roro
6
+ - run: docker-compose build
7
+ - run: docker login -u ${DOCKER_USER} -p ${DOCKER_PASS}
8
+ - tag-and-push:
9
+ deploy_tag: ${DEPLOY_TAG}
10
+ - tag-and-push:
11
+ deploy_tag: 'latest'
@@ -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
@@ -0,0 +1,12 @@
1
+ build-test-push:
2
+ jobs:
3
+ - build:
4
+ <<: *major_only
5
+ - test:
6
+ <<: *major_only
7
+ requires:
8
+ - build
9
+ - push:
10
+ <<: *major_only
11
+ requires:
12
+ - build
@@ -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
+
@@ -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('POSTGRES_USER') %>
5
+ username: <%= ENV.fetch('POSTGRES_USERNAME') %>
6
6
  password: <%= ENV.fetch('POSTGRES_PASSWORD') %>
7
- database: <%= ENV.fetch('POSTGRES_DB') %>
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
@@ -2,7 +2,7 @@ version: '3.2'
2
2
 
3
3
  services:
4
4
 
5
- web:
5
+ app:
6
6
  build:
7
7
  context: .
8
8
  dockerfile: roro/containers/app/Dockerfile
@@ -10,7 +10,6 @@ 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"
@@ -22,6 +21,7 @@ services:
22
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:
@@ -44,7 +44,7 @@ services:
44
44
  redis:
45
45
  image: redis
46
46
 
47
- <%= yaml_from_template("rails/database/with_#{config['database_vendor']}/_service.yml") %>
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
@@ -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,4 @@
1
+ POSTGRES_USERNAME=<%= config[:postgres_username] %>
2
+ POSTGRES_PASSWORD=<%= config[:postgres_password] %>
3
+ POSTGRES_DATABASE=<%= config[:main_app_name] + "_" + config[:rails_env] + "_db" %>
4
+ 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