roro 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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