roro 0.1.0 → 0.1.1

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.
Files changed (235) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +99 -0
  3. data/.circleci/setup-gem-credentials.sh +3 -0
  4. data/.gitignore +7 -1
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/Gemfile.lock +24 -10
  8. data/Guardfile +46 -0
  9. data/bin/roro +5 -0
  10. data/docker/env_files/.keep +0 -0
  11. data/docker/env_files/circleci.env.enc +2 -0
  12. data/docker/keys/.keep +0 -0
  13. data/lib/roro.rb +2 -0
  14. data/lib/roro/cli.rb +18 -0
  15. data/lib/roro/cli/base.rb +124 -0
  16. data/lib/roro/cli/dockerize.rb +30 -0
  17. data/lib/roro/cli/expose.rb +13 -0
  18. data/lib/roro/cli/generate_keys.rb +79 -0
  19. data/lib/roro/cli/greenfield.rb +37 -0
  20. data/lib/roro/cli/obfuscate.rb +20 -0
  21. data/lib/roro/cli/rollon.rb +21 -0
  22. data/lib/roro/cli/templates/Gemfile.lock +0 -0
  23. data/lib/roro/cli/templates/Guardfile +81 -0
  24. data/lib/roro/cli/templates/circleci/Rakefile +4 -0
  25. data/lib/roro/cli/templates/circleci/config.job-example.yml +33 -0
  26. data/lib/roro/cli/templates/circleci/config.yml +69 -0
  27. data/lib/roro/cli/templates/circleci/config.yml.workflow-example +62 -0
  28. data/lib/roro/cli/templates/circleci/deploy.rake +127 -0
  29. data/lib/roro/cli/templates/config.yml +71 -0
  30. data/lib/roro/cli/templates/config/database.yml +20 -0
  31. data/lib/roro/cli/templates/docker-compose.yml +51 -0
  32. data/lib/roro/cli/templates/docker/containers/app/Dockerfile.tt +12 -0
  33. data/lib/roro/cli/templates/docker/containers/database/.keep +0 -0
  34. data/lib/roro/cli/templates/docker/containers/web/Dockerfile.tt +18 -0
  35. data/lib/roro/cli/templates/docker/containers/web/app.conf.tt +23 -0
  36. data/lib/roro/cli/templates/docker/env_files/.keep +0 -0
  37. data/lib/roro/cli/templates/docker/keys/.keep +0 -0
  38. data/lib/roro/cli/templates/docker/overrides/circleci.yml.tt +19 -0
  39. data/lib/roro/cli/templates/docker/overrides/production.yml.tt +26 -0
  40. data/lib/roro/cli/templates/docker/web/Dockerfile +20 -0
  41. data/lib/roro/cli/templates/docker/web/app.conf +23 -0
  42. data/lib/roro/cli/templates/gitignore +27 -0
  43. data/lib/roro/cli/templates/greenfield/Dockerfile +8 -0
  44. data/lib/roro/cli/templates/greenfield/Gemfile +2 -0
  45. data/lib/roro/cli/templates/greenfield/Gemfile.lock +0 -0
  46. data/lib/roro/cli/templates/greenfield/config/database.yml.example +16 -0
  47. data/lib/roro/cli/templates/greenfield/docker-compose.yml +15 -0
  48. data/lib/roro/cli/templates/lib/tasks/deploy.rake +126 -0
  49. data/lib/roro/version.rb +1 -1
  50. data/lib/tasks/deploy.rake +126 -0
  51. data/roro.gemspec +9 -2
  52. data/test_apps/dummy/.gitignore +27 -0
  53. data/test_apps/dummy/Gemfile +61 -0
  54. data/test_apps/dummy/README.md +24 -0
  55. data/test_apps/dummy/Rakefile +6 -0
  56. data/test_apps/dummy/app/assets/config/manifest.js +3 -0
  57. data/test_apps/dummy/app/assets/images/.keep +0 -0
  58. data/test_apps/dummy/app/assets/javascripts/application.js +16 -0
  59. data/test_apps/dummy/app/assets/javascripts/cable.js +13 -0
  60. data/test_apps/dummy/app/assets/javascripts/channels/.keep +0 -0
  61. data/test_apps/dummy/app/assets/stylesheets/application.css +15 -0
  62. data/test_apps/dummy/app/channels/application_cable/channel.rb +4 -0
  63. data/test_apps/dummy/app/channels/application_cable/connection.rb +4 -0
  64. data/test_apps/dummy/app/controllers/application_controller.rb +2 -0
  65. data/test_apps/dummy/app/controllers/concerns/.keep +0 -0
  66. data/test_apps/dummy/app/helpers/application_helper.rb +2 -0
  67. data/test_apps/dummy/app/jobs/application_job.rb +2 -0
  68. data/test_apps/dummy/app/mailers/application_mailer.rb +4 -0
  69. data/test_apps/dummy/app/models/application_record.rb +3 -0
  70. data/test_apps/dummy/app/models/concerns/.keep +0 -0
  71. data/test_apps/dummy/app/views/layouts/application.html.erb +15 -0
  72. data/test_apps/dummy/app/views/layouts/mailer.html.erb +13 -0
  73. data/test_apps/dummy/app/views/layouts/mailer.text.erb +1 -0
  74. data/test_apps/dummy/bin/bundle +3 -0
  75. data/test_apps/dummy/bin/rails +4 -0
  76. data/test_apps/dummy/bin/rake +4 -0
  77. data/test_apps/dummy/bin/setup +36 -0
  78. data/test_apps/dummy/bin/update +31 -0
  79. data/test_apps/dummy/bin/yarn +11 -0
  80. data/test_apps/dummy/config.ru +5 -0
  81. data/test_apps/dummy/config/application.rb +19 -0
  82. data/test_apps/dummy/config/boot.rb +4 -0
  83. data/test_apps/dummy/config/cable.yml +10 -0
  84. data/test_apps/dummy/config/credentials.yml.enc +1 -0
  85. data/test_apps/dummy/config/database.yml +85 -0
  86. data/test_apps/dummy/config/environment.rb +5 -0
  87. data/test_apps/dummy/config/environments/development.rb +61 -0
  88. data/test_apps/dummy/config/environments/production.rb +94 -0
  89. data/test_apps/dummy/config/environments/test.rb +46 -0
  90. data/test_apps/dummy/config/initializers/application_controller_renderer.rb +8 -0
  91. data/test_apps/dummy/config/initializers/assets.rb +14 -0
  92. data/test_apps/dummy/config/initializers/backtrace_silencers.rb +7 -0
  93. data/test_apps/dummy/config/initializers/content_security_policy.rb +25 -0
  94. data/test_apps/dummy/config/initializers/cookies_serializer.rb +5 -0
  95. data/test_apps/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  96. data/test_apps/dummy/config/initializers/inflections.rb +16 -0
  97. data/test_apps/dummy/config/initializers/mime_types.rb +4 -0
  98. data/test_apps/dummy/config/initializers/wrap_parameters.rb +14 -0
  99. data/test_apps/dummy/config/locales/en.yml +33 -0
  100. data/test_apps/dummy/config/puma.rb +34 -0
  101. data/test_apps/dummy/config/routes.rb +3 -0
  102. data/test_apps/dummy/config/spring.rb +6 -0
  103. data/test_apps/dummy/config/storage.yml +34 -0
  104. data/test_apps/dummy/db/seeds.rb +7 -0
  105. data/test_apps/dummy/lib/assets/.keep +0 -0
  106. data/test_apps/dummy/lib/tasks/.keep +0 -0
  107. data/test_apps/dummy/log/.keep +0 -0
  108. data/test_apps/dummy/package.json +5 -0
  109. data/test_apps/dummy/public/404.html +67 -0
  110. data/test_apps/dummy/public/422.html +67 -0
  111. data/test_apps/dummy/public/500.html +66 -0
  112. data/test_apps/dummy/public/apple-touch-icon-precomposed.png +0 -0
  113. data/test_apps/dummy/public/apple-touch-icon.png +0 -0
  114. data/test_apps/dummy/public/favicon.ico +0 -0
  115. data/test_apps/dummy/public/robots.txt +1 -0
  116. data/test_apps/dummy/storage/.keep +0 -0
  117. data/test_apps/dummy/test/application_system_test_case.rb +5 -0
  118. data/test_apps/dummy/test/controllers/.keep +0 -0
  119. data/test_apps/dummy/test/fixtures/.keep +0 -0
  120. data/test_apps/dummy/test/fixtures/files/.keep +0 -0
  121. data/test_apps/dummy/test/helpers/.keep +0 -0
  122. data/test_apps/dummy/test/integration/.keep +0 -0
  123. data/test_apps/dummy/test/mailers/.keep +0 -0
  124. data/test_apps/dummy/test/models/.keep +0 -0
  125. data/test_apps/dummy/test/system/.keep +0 -0
  126. data/test_apps/dummy/test/test_helper.rb +10 -0
  127. data/test_apps/dummy/vendor/.keep +0 -0
  128. data/test_apps/dummy_roro/.circleci/Rakefile +4 -0
  129. data/test_apps/dummy_roro/.circleci/config.job-example.yml +33 -0
  130. data/test_apps/dummy_roro/.circleci/config.yml +69 -0
  131. data/test_apps/dummy_roro/.circleci/config.yml.workflow-example +62 -0
  132. data/test_apps/dummy_roro/.circleci/deploy.rake +127 -0
  133. data/test_apps/dummy_roro/.gitignore +27 -0
  134. data/test_apps/dummy_roro/Gemfile +64 -0
  135. data/test_apps/dummy_roro/README.md +24 -0
  136. data/test_apps/dummy_roro/Rakefile +6 -0
  137. data/test_apps/dummy_roro/app/assets/config/manifest.js +3 -0
  138. data/test_apps/dummy_roro/app/assets/images/.keep +0 -0
  139. data/test_apps/dummy_roro/app/assets/javascripts/application.js +16 -0
  140. data/test_apps/dummy_roro/app/assets/javascripts/cable.js +13 -0
  141. data/test_apps/dummy_roro/app/assets/javascripts/channels/.keep +0 -0
  142. data/test_apps/dummy_roro/app/assets/stylesheets/application.css +15 -0
  143. data/test_apps/dummy_roro/app/channels/application_cable/channel.rb +4 -0
  144. data/test_apps/dummy_roro/app/channels/application_cable/connection.rb +4 -0
  145. data/test_apps/dummy_roro/app/controllers/application_controller.rb +2 -0
  146. data/test_apps/dummy_roro/app/controllers/concerns/.keep +0 -0
  147. data/test_apps/dummy_roro/app/helpers/application_helper.rb +2 -0
  148. data/test_apps/dummy_roro/app/jobs/application_job.rb +2 -0
  149. data/test_apps/dummy_roro/app/mailers/application_mailer.rb +4 -0
  150. data/test_apps/dummy_roro/app/models/application_record.rb +3 -0
  151. data/test_apps/dummy_roro/app/models/concerns/.keep +0 -0
  152. data/test_apps/dummy_roro/app/views/layouts/application.html.erb +15 -0
  153. data/test_apps/dummy_roro/app/views/layouts/mailer.html.erb +13 -0
  154. data/test_apps/dummy_roro/app/views/layouts/mailer.text.erb +1 -0
  155. data/test_apps/dummy_roro/bin/bundle +3 -0
  156. data/test_apps/dummy_roro/bin/rails +4 -0
  157. data/test_apps/dummy_roro/bin/rake +4 -0
  158. data/test_apps/dummy_roro/bin/setup +36 -0
  159. data/test_apps/dummy_roro/bin/update +31 -0
  160. data/test_apps/dummy_roro/bin/yarn +11 -0
  161. data/test_apps/dummy_roro/config.ru +5 -0
  162. data/test_apps/dummy_roro/config/application.rb +19 -0
  163. data/test_apps/dummy_roro/config/boot.rb +4 -0
  164. data/test_apps/dummy_roro/config/cable.yml +10 -0
  165. data/test_apps/dummy_roro/config/credentials.yml.enc +1 -0
  166. data/test_apps/dummy_roro/config/database.yml +20 -0
  167. data/test_apps/dummy_roro/config/environment.rb +5 -0
  168. data/test_apps/dummy_roro/config/environments/development.rb +61 -0
  169. data/test_apps/dummy_roro/config/environments/production.rb +94 -0
  170. data/test_apps/dummy_roro/config/environments/test.rb +46 -0
  171. data/test_apps/dummy_roro/config/initializers/application_controller_renderer.rb +8 -0
  172. data/test_apps/dummy_roro/config/initializers/assets.rb +14 -0
  173. data/test_apps/dummy_roro/config/initializers/backtrace_silencers.rb +7 -0
  174. data/test_apps/dummy_roro/config/initializers/content_security_policy.rb +25 -0
  175. data/test_apps/dummy_roro/config/initializers/cookies_serializer.rb +5 -0
  176. data/test_apps/dummy_roro/config/initializers/filter_parameter_logging.rb +4 -0
  177. data/test_apps/dummy_roro/config/initializers/inflections.rb +16 -0
  178. data/test_apps/dummy_roro/config/initializers/mime_types.rb +4 -0
  179. data/test_apps/dummy_roro/config/initializers/wrap_parameters.rb +14 -0
  180. data/test_apps/dummy_roro/config/locales/en.yml +33 -0
  181. data/test_apps/dummy_roro/config/puma.rb +34 -0
  182. data/test_apps/dummy_roro/config/routes.rb +3 -0
  183. data/test_apps/dummy_roro/config/spring.rb +6 -0
  184. data/test_apps/dummy_roro/config/storage.yml +34 -0
  185. data/test_apps/dummy_roro/db/seeds.rb +7 -0
  186. data/test_apps/dummy_roro/docker-compose.yml +51 -0
  187. data/test_apps/dummy_roro/docker/containers/app/Dockerfile +12 -0
  188. data/test_apps/dummy_roro/docker/containers/app/circleci.env +2 -0
  189. data/test_apps/dummy_roro/docker/containers/app/development.env +2 -0
  190. data/test_apps/dummy_roro/docker/containers/app/production.env +2 -0
  191. data/test_apps/dummy_roro/docker/containers/app/staging.env +2 -0
  192. data/test_apps/dummy_roro/docker/containers/database/.keep +0 -0
  193. data/test_apps/dummy_roro/docker/containers/database/circleci.env +3 -0
  194. data/test_apps/dummy_roro/docker/containers/database/development.env +3 -0
  195. data/test_apps/dummy_roro/docker/containers/database/production.env +3 -0
  196. data/test_apps/dummy_roro/docker/containers/database/staging.env +3 -0
  197. data/test_apps/dummy_roro/docker/containers/web/Dockerfile +18 -0
  198. data/test_apps/dummy_roro/docker/containers/web/app.conf +23 -0
  199. data/test_apps/dummy_roro/docker/containers/web/circleci.env +1 -0
  200. data/test_apps/dummy_roro/docker/containers/web/development.env +1 -0
  201. data/test_apps/dummy_roro/docker/containers/web/production.env +1 -0
  202. data/test_apps/dummy_roro/docker/containers/web/staging.env +1 -0
  203. data/test_apps/dummy_roro/docker/env_files/circleci.env +12 -0
  204. data/test_apps/dummy_roro/docker/env_files/circleci.env.enc +14 -0
  205. data/test_apps/dummy_roro/docker/env_files/production.env +2 -0
  206. data/test_apps/dummy_roro/docker/env_files/production.env.enc +2 -0
  207. data/test_apps/dummy_roro/docker/keys/.keep +0 -0
  208. data/test_apps/dummy_roro/docker/overrides/circleci.yml +19 -0
  209. data/test_apps/dummy_roro/docker/overrides/production.yml +26 -0
  210. data/test_apps/dummy_roro/lib/assets/.keep +0 -0
  211. data/test_apps/dummy_roro/lib/tasks/.keep +0 -0
  212. data/test_apps/dummy_roro/lib/tasks/deploy.rake +126 -0
  213. data/test_apps/dummy_roro/log/.keep +0 -0
  214. data/test_apps/dummy_roro/package.json +5 -0
  215. data/test_apps/dummy_roro/public/404.html +67 -0
  216. data/test_apps/dummy_roro/public/422.html +67 -0
  217. data/test_apps/dummy_roro/public/500.html +66 -0
  218. data/test_apps/dummy_roro/public/apple-touch-icon-precomposed.png +0 -0
  219. data/test_apps/dummy_roro/public/apple-touch-icon.png +0 -0
  220. data/test_apps/dummy_roro/public/favicon.ico +0 -0
  221. data/test_apps/dummy_roro/public/robots.txt +1 -0
  222. data/test_apps/dummy_roro/storage/.keep +0 -0
  223. data/test_apps/dummy_roro/test/application_system_test_case.rb +5 -0
  224. data/test_apps/dummy_roro/test/controllers/.keep +0 -0
  225. data/test_apps/dummy_roro/test/fixtures/.keep +0 -0
  226. data/test_apps/dummy_roro/test/fixtures/files/.keep +0 -0
  227. data/test_apps/dummy_roro/test/helpers/.keep +0 -0
  228. data/test_apps/dummy_roro/test/integration/.keep +0 -0
  229. data/test_apps/dummy_roro/test/mailers/.keep +0 -0
  230. data/test_apps/dummy_roro/test/models/.keep +0 -0
  231. data/test_apps/dummy_roro/test/system/.keep +0 -0
  232. data/test_apps/dummy_roro/test/test_helper.rb +10 -0
  233. data/test_apps/dummy_roro/vendor/.keep +0 -0
  234. data/test_apps/greenfield/.keep +0 -0
  235. metadata +292 -5
@@ -0,0 +1,127 @@
1
+ # use SSHKit directly instead of Capistrano
2
+ require 'sshkit'
3
+ require 'sshkit/dsl'
4
+ include SSHKit::DSL
5
+
6
+ deploy_tag = ENV['DEPLOY_TAG']
7
+ app_name = ENV['APP_NAME']
8
+ hostname = ENV['SERVER_HOST']
9
+ user = ENV['SERVER_USER']
10
+ dockerhub_user = ENV['DOCKERHUB_USER']
11
+ dockerhub_pass = ENV['DOCKERHUB_PASS']
12
+ dockerhub_org = ENV['DOCKERHUB_ORG']
13
+ port = ENV['SERVER_PORT']
14
+ deploy_env = ENV['DEPLOY_ENV'] || :production
15
+ deploy_path = ENV['APP_NAME']
16
+
17
+ server = SSHKit::Host.new(hostname: hostname, port: port, user: user)
18
+
19
+ namespace :deploy do
20
+
21
+ desc 'copy to server files needed to run and manage Docker containers'
22
+ task :configs do
23
+
24
+ on server do
25
+ within deploy_path do
26
+ upload! File.expand_path('../docker-compose.yml', __dir__), 'docker-compose.yml'
27
+
28
+ upload! File.expand_path('../docker', __dir__), '.', recursive: true
29
+ execute 'apt', 'install', '-y', 'ruby'
30
+ execute 'gem', 'install', 'handsome_fencer-circle_c_i'
31
+ execute 'handsome_fencer-circle_c_i', 'expose', 'production'
32
+ execute :source, './docker/env_files/production.env'
33
+ end
34
+ end
35
+ end
36
+
37
+ # desc 'copy production key to server'
38
+ # task :production_key do
39
+ #
40
+ # on server do
41
+ # within deploy_path do
42
+ #
43
+ # upload! '.circleci/keys/production.key', '.circleci/keys/production.key'
44
+ # end
45
+ # end
46
+ # end
47
+ #
48
+ # desc 'expose production environment'
49
+ # task :expose_production_environment do
50
+ #
51
+ # on server do
52
+ # within deploy_path do
53
+ # execute 'snap', 'install', 'ruby', '--classic'
54
+ # execute 'gem', 'install', 'handsome_fencer-circle_c_i'
55
+ # execute 'handsome_fencer-circle_c_i', 'expose', 'production'
56
+ # end
57
+ # end
58
+ # end
59
+ end
60
+
61
+ namespace :docker do
62
+
63
+ desc 'logs into Docker Hub for pushing and pulling'
64
+ task :login do
65
+ on server do
66
+ execute "mkdir -p #{deploy_path}"
67
+ within deploy_path do
68
+ execute 'docker', 'login', '-u', dockerhub_user, '-p', dockerhub_pass
69
+ end
70
+ end
71
+ end
72
+
73
+ desc 'stops all Docker containers via Docker Compose'
74
+ task stop: 'deploy:configs' do
75
+ on server do
76
+ within deploy_path do
77
+ with rails_env: deploy_env, deploy_tag: deploy_tag do
78
+ execute 'docker-compose', 'stop'
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ desc 'starts all Docker containers via Docker Compose'
85
+ task start: 'deploy:configs' do
86
+ on server do
87
+ within deploy_path do
88
+ with rails_env: deploy_env, deploy_tag: deploy_tag do
89
+ execute 'docker-compose', 'docker-compose', '-f', 'docker-compose.yml', '-f', 'docker/overrides/docker-compose.production.yml',
90
+ 'up', '-d'
91
+ execute 'echo', deploy_tag , '>', 'deploy.tag'
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ desc 'pulls images from Docker Hub'
98
+ task pull: 'docker:login' do
99
+ on server do
100
+ within deploy_path do
101
+ images = [
102
+ "#{dockerhub_org}/#{app_name}_app:#{deploy_tag}",
103
+ "#{dockerhub_org}/#{app_name}_web:#{deploy_tag}",
104
+ "postgres:9.4.5"
105
+ ]
106
+ images.each do |image|
107
+ execute 'docker', 'pull', "#{image}"
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+ desc 'runs database migrations in application container via Docker Compose'
114
+ task migrate: 'deploy:configs' do
115
+ on server do
116
+ within deploy_path do
117
+ with rails_env: deploy_env, deploy_tag: deploy_tag do
118
+ execute 'docker-compose', '-f', 'docker-compose.yml', '-f', 'docker/overrides/docker-compose.production.yml',
119
+ 'exec', 'app', "bin/rails", 'db:create', 'db:migrate'
120
+ end
121
+ end
122
+ end
123
+ end
124
+
125
+ desc 'pulls images, stops old containers, updates the database, and starts new containers'
126
+ task deploy: %w{docker:pull docker:stop docker:migrate docker:start }
127
+ end
@@ -0,0 +1,71 @@
1
+ defaults: &defaults
2
+ working_directory: /tmp
3
+
4
+ version: 2
5
+
6
+ jobs:
7
+
8
+ build:
9
+ machine: true
10
+ steps:
11
+ - checkout
12
+ - run: gem install handsome_fencer-circle_c_i
13
+ - run: handsome_fencer-circle_c_i expose circleci
14
+ - run: handsome_fencer-circle_c_i expose development
15
+ - run: echo 'source docker/env_files/circleci.env' >> $BASH_ENV
16
+ - run: docker-compose build
17
+ - run: docker-compose up -d
18
+ - run: docker-compose exec app bin/rails db:create db:migrate
19
+
20
+ push:
21
+ machine: true
22
+ steps:
23
+ - checkout
24
+ - run: gem install handsome_fencer-circle_c_i
25
+ - run: handsome_fencer-circle_c_i expose circleci
26
+ - run: handsome_fencer-circle_c_i expose development
27
+ - run: echo 'source docker/env_files/circleci.env' >> $BASH_ENV
28
+ - run: docker-compose build
29
+ - run: docker-compose up -d
30
+ - run: docker-compose exec app bin/rails db:create db:migrate
31
+ - run: docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS
32
+ - run:
33
+ name: Tag app image
34
+ command: docker tag $(docker images | grep project_app | awk '{ print $3 }') ${DOCKERHUB_ORG_NAME}/${APP_NAME}_app:$DEPLOY_TAG
35
+ - run:
36
+ name: Tag web image
37
+ command: docker tag $(docker images | grep project_web | awk '{ print $3 }') ${DOCKERHUB_ORG_NAME}/${APP_NAME}_web:$DEPLOY_TAG
38
+
39
+
40
+ - run: docker push ${DOCKERHUB_ORG_NAME}/${APP_NAME}_app:$DEPLOY_TAG
41
+ - run: docker push ${DOCKERHUB_ORG_NAME}/${APP_NAME}_web:$DEPLOY_TAG
42
+
43
+ deploy:
44
+ machine: true
45
+ steps:
46
+ - checkout
47
+ - add_ssh_keys
48
+ - run: gem install handsome_fencer-circle_c_i
49
+ - run: handsome_fencer-circle_c_i expose circleci
50
+ - run: handsome_fencer-circle_c_i expose development
51
+ - run: echo 'source docker/env_files/circleci.env' >> $BASH_ENV
52
+
53
+ - run: rake --rakefile .circleci/Rakefile
54
+
55
+ workflows:
56
+ version: 2
57
+ build-and-deploy:
58
+ jobs:
59
+ - build
60
+ - push:
61
+ requires:
62
+ - build
63
+ filters:
64
+ branches:
65
+ only: master
66
+ - deploy:
67
+ requires:
68
+ - push
69
+ filters:
70
+ branches:
71
+ only: master
@@ -0,0 +1,20 @@
1
+ default: &default
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ host: <%= ENV.fetch('DATABASE_HOST') %>
5
+ username: <%= ENV.fetch('POSTGRES_USER') %>
6
+ password: <%= ENV.fetch('POSTGRES_PASSWORD') %>
7
+ database: <%= ENV.fetch('POSTGRES_DB') %>
8
+ pool: 5
9
+ variables:
10
+ statement_timeout: 5000
11
+
12
+ development:
13
+ <<: *default
14
+
15
+ test:
16
+ <<: *default
17
+
18
+
19
+ production:
20
+ <<: *default
@@ -0,0 +1,51 @@
1
+ version: '3.1'
2
+
3
+ services:
4
+ chrome:
5
+ image: selenium/standalone-chrome-debug
6
+ volumes:
7
+ - /dev/shm:/dev/shm
8
+ app:
9
+ build:
10
+ context: .
11
+ dockerfile: docker/containers/app/Dockerfile
12
+
13
+ depends_on:
14
+ - database
15
+ ports:
16
+ - "35729:35729"
17
+ - "3000:3000"
18
+ volumes:
19
+ - app-data:/usr/src/app
20
+ - gem_cache:/gems
21
+ env_file:
22
+ - docker/containers/database/development.env
23
+ - docker/containers/app/development.env
24
+ command: [ "bin/rails", "s" ]
25
+
26
+ stdin_open: true
27
+ tty: true
28
+ secrets:
29
+ - host_ssh_key
30
+
31
+ database:
32
+ image: postgres
33
+ env_file:
34
+ - docker/containers/database/development.env
35
+
36
+ volumes:
37
+ - database-data:/var/lib/postgresql/data
38
+
39
+ web:
40
+ build:
41
+ context: .
42
+ dockerfile: docker/containers/web/Dockerfile
43
+
44
+ volumes:
45
+ database-data:
46
+ gem_cache:
47
+ app-data:
48
+
49
+ secrets:
50
+ host_ssh_key:
51
+ file: ~/.ssh/id_rsa
@@ -0,0 +1,12 @@
1
+ FROM ruby:2.5-alpine
2
+
3
+ LABEL maintainer=<%= config[:email] %>
4
+
5
+
6
+ RUN apk add --no-cache --update build-base linux-headers \
7
+ postgresql-dev nodejs tzdata libxml2-dev libxslt-dev imagemagick
8
+
9
+ COPY Gemfile* /usr/src/app/
10
+ WORKDIR /usr/src/app
11
+ RUN bundle install
12
+ COPY . /usr/src/app/
@@ -0,0 +1,18 @@
1
+ FROM nginx
2
+
3
+ RUN apt-get update -qq && apt-get -y install apache2-utils
4
+
5
+ ENV RAILS_ROOT /usr/src/app
6
+
7
+ WORKDIR $RAILS_ROOT
8
+
9
+ RUN mkdir log
10
+
11
+ # Copy Nginx config template
12
+ COPY docker/containers/web/app.conf /tmp/<%= config[:app_name] %>.nginx
13
+
14
+ # substitute variable references in the Nginx config template for real values from the environment
15
+
16
+ # put the final config in its place
17
+
18
+ RUN envsubst '$RAILS_ROOT' < /tmp/<%= config[:app_name] %>.nginx > /etc/nginx/conf.d/default.conf
@@ -0,0 +1,23 @@
1
+ upstream puma_rails_app {
2
+ server app:3000;
3
+ }
4
+ server {
5
+ listen 80;
6
+ proxy_buffers 64 16k;
7
+ proxy_max_temp_file_size 1024m;
8
+ proxy_connect_timeout 5s;
9
+ proxy_send_timeout 10s;
10
+ proxy_read_timeout 10s;
11
+ location / {
12
+ try_files $uri $uri/ @rails_app;
13
+ }
14
+ location @rails_app {
15
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
16
+ proxy_set_header Host $http_host;
17
+ proxy_redirect off;
18
+ proxy_pass http://puma_rails_app;
19
+ # limit_req zone=one;
20
+ access_log /usr/src/app/log/nginx.access.log;
21
+ error_log /usr/src/app/log/nginx.error.log;
22
+ }
23
+ }
@@ -0,0 +1,19 @@
1
+ version: '3.1'
2
+
3
+ services:
4
+
5
+ database:
6
+ env_file:
7
+ - docker/containers/database/production.env
8
+
9
+ app:
10
+ env_file:
11
+ - docker/containers/app/production.env
12
+ - docker/containers/database/production.env
13
+
14
+ web:
15
+ build:
16
+ context: .
17
+ dockerfile: docker/containers/web/Dockerfile
18
+ env_file:
19
+ - docker/containers/web/development.env
@@ -0,0 +1,26 @@
1
+ version: '3.1'
2
+
3
+ services:
4
+
5
+ database:
6
+ env_file:
7
+ - docker/containers/database/production.env
8
+
9
+ app:
10
+ image: "${DOCKERHUB_ORG}/${APP_NAME}_app:${DEPLOY_TAG}"
11
+ env_file:
12
+ - docker/containers/app/production.env
13
+ - docker/containers/database/production.env
14
+ expose:
15
+ - '3000'
16
+
17
+ web:
18
+ image: <%= config[:dockerhub_org] %>/<%= config[:app_name] %>_web:${DEPLOY_TAG}
19
+ depends_on:
20
+ - app
21
+ ports:
22
+ - "80:80"
23
+
24
+ chrome:
25
+ command: echo "Chrome service not started in production"
26
+ restart: "no"
@@ -0,0 +1,20 @@
1
+ FROM nginx
2
+
3
+ RUN apt-get update -qq && apt-get -y install apache2-utils
4
+
5
+ ENV RAILS_ROOT /usr/src/app
6
+
7
+ WORKDIR $RAILS_ROOT
8
+
9
+ RUN mkdir log
10
+
11
+ COPY public public/
12
+
13
+ # Copy Nginx config template
14
+ COPY docker/web/app.conf /tmp/docker_example.nginx
15
+
16
+ # substitute variable references in the Nginx config template for real values from the environment
17
+
18
+ # put the final config in its place
19
+
20
+ RUN envsubst '$RAILS_ROOT' < /tmp/docker_example.nginx > /etc/nginx/conf.d/default.conf
@@ -0,0 +1,23 @@
1
+ upstream puma_rails_app {
2
+ server app:3000;
3
+ }
4
+ server {
5
+ listen 80;
6
+ proxy_buffers 64 16k;
7
+ proxy_max_temp_file_size 1024m;
8
+ proxy_connect_timeout 5s;
9
+ proxy_send_timeout 10s;
10
+ proxy_read_timeout 10s;
11
+ location / {
12
+ try_files $uri $uri/ @rails_app;
13
+ }
14
+ location @rails_app {
15
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
16
+ proxy_set_header Host $http_host;
17
+ proxy_redirect off;
18
+ proxy_pass http://puma_rails_app;
19
+ # limit_req zone=one;
20
+ access_log /usr/src/app/log/nginx.access.log;
21
+ error_log /usr/src/app/log/nginx.error.log;
22
+ }
23
+ }
@@ -0,0 +1,27 @@
1
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ # Ignore bundler config.
8
+ /.bundle
9
+
10
+ # Ignore all logfiles and tempfiles.
11
+ /log/*
12
+ /tmp/*
13
+ !/log/.keep
14
+ !/tmp/.keep
15
+
16
+ # Ignore uploaded files in development
17
+ /storage/*
18
+ !/storage/.keep
19
+
20
+ /node_modules
21
+ /yarn-error.log
22
+
23
+ /public/assets
24
+ .byebug_history
25
+
26
+ # Ignore master key for decrypting credentials and more.
27
+ /config/master.key