stack_car 0.3.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab548993e40ac69f202ebd527b9267a894384564
4
- data.tar.gz: e83132c55cb05ecbfa64030fc4ef1c285a30e4ea
3
+ metadata.gz: 599420272bb040246155a839e357acd506c30da0
4
+ data.tar.gz: e3782f587282d7023088dca86532d631ae6e56c4
5
5
  SHA512:
6
- metadata.gz: 83328c92add8711e0d8a22519de375069ad8f3b11e5741eca0daaee75305564bdda5038f74183cb6da4b2c0da830791dfb2a2ea613761720b80fb373be6e99dc
7
- data.tar.gz: 070fc4e7bf7d2d00a3b0607ac23d20ae77f33c3fdf398b605383c362dd527167634c64c3b2002738d6a4320b635cd8bbf9815536f8fd9c969fc882283789dacd
6
+ metadata.gz: bc0c57d5111533f813b3534fdc58b1c736594d3190b5716a9d8cfea210342523152e31c51304ebaf59161d8cea900d8ff9ac76752820ad74a7b0d24c76835c91
7
+ data.tar.gz: 417b8a1e0865568b470f048debdb80f9bbb34abe4c45bf93df8e087b4ae7a027ca31152931abb1b427989547f431d2e6239a9b9db253492110485dd8ab5b54e5
data/README.md CHANGED
@@ -43,7 +43,10 @@ Bug reports and pull requests are welcome on Gitlab at https://gitlab.com/notch8
43
43
 
44
44
  ## TODO
45
45
 
46
- - Implement build
46
+ - move .env files to dot style
47
+ - make .env secret by default
48
+ - update .gitlab to latest (see learn and ansur)
49
+
47
50
  - Fill out readme
48
51
  - Implement deploy
49
52
  - Implement deploy templates
data/exe/sc ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "stack_car"
4
+
5
+ StackCar::HammerOfTheGods.start(ARGV)
data/lib/stack_car/cli.rb CHANGED
@@ -138,6 +138,9 @@ module StackCar
138
138
  template("#{template_file}.erb", template_file)
139
139
  end
140
140
  template("database.yml.erb", "config/database.yml")
141
+ template(".env.erb", ".env-example")
142
+ template(".env.erb", ".env-prod")
143
+
141
144
  if File.exists?('README.md')
142
145
  prepend_to_file "README.md" do
143
146
  File.read("#{self.class.source_root}/README.md")
@@ -158,7 +161,7 @@ module StackCar
158
161
  end
159
162
 
160
163
  # Do this after we figure out whether to use an empty ops directory or a full one
161
- ['env.conf', 'webapp.conf'].each do |template_file|
164
+ ['env.conf', 'webapp.conf', 'worker.sh', 'nginx.sh'].each do |template_file|
162
165
  template("#{template_file}.erb", "ops/#{template_file}")
163
166
  end
164
167
  end
@@ -166,7 +169,7 @@ module StackCar
166
169
  protected
167
170
  def compose_depends(*excludes)
168
171
  @compose_depends = []
169
- services = [:postgres, :mysql, :elasticsearch, :solr, :redis, :mongodb, :memcached, :delayed_job] - excludes
172
+ services = [:postgres, :mysql, :elasticsearch, :solr, :redis, :mongodb, :memcached] - excludes
170
173
  services.each do |service|
171
174
  if options[service]
172
175
  @compose_depends << " - #{service}"
@@ -1,3 +1,3 @@
1
1
  module StackCar
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
data/stack_car.gemspec CHANGED
@@ -25,6 +25,6 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "yard"
26
26
  spec.add_development_dependency "yard-thor"
27
27
  spec.add_development_dependency "pry"
28
- spec.add_dependency "dotenv", "~> 2.0"
29
- spec.add_dependency "thor", "~> 0.19"
28
+ spec.add_runtime_dependency "dotenv", "~> 2.2"
29
+ spec.add_runtime_dependency "thor", "~> 0.19"
30
30
  end
data/templates/.env.erb CHANGED
@@ -13,6 +13,9 @@ MYSQL_ROOT_PASSWORD=DatabaseFTW
13
13
  MYSQL_HOST=mysql
14
14
  TEST_DB=<%= @project_name %>_test
15
15
  <% end -%>
16
+ <% if options[:elasticsearch] -%>
17
+ ES_URL=http://elasticsearch:9200
18
+ <% end -%>
16
19
  <% if options[:deploy] || options[:rancher] -%>
17
20
  REGISTRY_HOST=registry.gitlab.com
18
21
  REGISTRY_URI=/TODO/<%= @project_name %>
@@ -21,3 +24,4 @@ DEPLOY_HOOK=TODO
21
24
  <% end -%>
22
25
  TAG=dev
23
26
  VIRUAL_PORT=80
27
+ PASSENGER_APP_ENV=development
@@ -28,21 +28,28 @@ variables:
28
28
  <% if options[:postgres] -%>
29
29
  POSTGRES_DB: <%= @project_name %>
30
30
  POSTGRES_USER: postgres
31
- POSTGRES_PASSWORD: DatabaseFTW
31
+ POSTGRES_PASSWORD: password
32
+ POSTGRES_HOST: postgres
32
33
  <% end -%>
33
- <% if options[:MYSQL] -%>
34
+ <% if options[:mysql] -%>
34
35
  MYSQL_DATABASE: <%= @project_name %>
35
- MYSQL_ROOT_PASSWORD: DatabaseFTW
36
+ MYSQL_ROOT_PASSWORD: password
37
+ MYSQL_USER: <%= @project_name %>_test
38
+ MYSQL_PASSWORD: password
39
+ MYSQL_HOST: mysql
36
40
  <% end -%>
37
41
  TEST_DB: <%= @project_name %>
38
42
  DOCKER_DRIVER: overlay
43
+ REGISTRY_HOST: registry.gitlab.com
44
+ REGISTRY_URI: TODO/<%= @project_name %>
45
+ SITE_URI_BASE: TODO
39
46
 
40
47
  build:
41
48
  stage: build
42
49
  script:
43
50
  - docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY
44
- - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_BUILD_REF_SLUG" .
45
- - docker push "$CI_REGISTRY_IMAGE:$CI_BUILD_REF_SLUG"
51
+ - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_PROJECT_NAME-$CI_BUILD_REF_SLUG" .
52
+ - docker push "$CI_REGISTRY_IMAGE:$CI_PROJECT_NAME-$CI_BUILD_REF_SLUG"
46
53
  variables:
47
54
  GIT_STRATEGY: fetch
48
55
  tags:
@@ -50,7 +57,7 @@ build:
50
57
 
51
58
  test:
52
59
  stage: test
53
- image: $CI_REGISTRY_IMAGE:$CI_BUILD_REF_SLUG
60
+ image: $CI_REGISTRY_IMAGE:$CI_PROJECT_NAME-$CI_BUILD_REF_SLUG
54
61
  script:
55
62
  - cd /app && bundle exec rake db:create db:schema:load spec
56
63
  tags:
@@ -63,19 +70,21 @@ review:
63
70
  image: docker:latest
64
71
  type: deploy
65
72
  environment:
66
- name: $CI_BUILD_REF_SLUG
67
- url: http://web.$CI_BUILD_REF_SLUG.staging.$SITE_URI
73
+ name: $CI_PROJECT_NAME-$CI_BUILD_REF_SLUG
74
+ url: http://web.$CI_PROJECT_NAME-$CI_BUILD_REF_SLUG.staging.$SITE_URI_BASE
68
75
  on_stop: stop_review
69
76
  only:
70
77
  - branches
71
78
  except:
72
79
  - master
73
80
  script:
81
+ <% if options[:rancher] -%>
74
82
  - wget https://github.com/rancher/cli/releases/download/v0.4.1/rancher-linux-amd64-v0.4.1.tar.gz
75
83
  - tar zxfv rancher-linux-amd64-v0.4.1.tar.gz
76
84
  - export RANCHER_ENVIRONMENT=staging
77
- - export TAG=$CI_BUILD_REF_SLUG
85
+ - export TAG=$CI_PROJECT_NAME-$CI_BUILD_REF_SLUG
78
86
  - ./rancher-v0.4.1/rancher up -p -d -u -c -s $TAG -f docker-compose-ci.yml
87
+ <% end %>
79
88
  variables:
80
89
  GIT_STRATEGY: fetch
81
90
  tags:
@@ -89,13 +98,13 @@ stop_review:
89
98
  - wget https://github.com/rancher/cli/releases/download/v0.4.1/rancher-linux-amd64-v0.4.1.tar.gz
90
99
  - tar zxfv rancher-linux-amd64-v0.4.1.tar.gz
91
100
  - export RANCHER_ENVIRONMENT=staging
92
- - ./rancher-v0.4.1/rancher rm $CI_BUILD_REF_SLUG
101
+ - ./rancher-v0.4.1/rancher rm $CI_PROJECT_NAME-$CI_BUILD_REF_SLUG
93
102
  <% end %>
94
103
  variables:
95
104
  GIT_STRATEGY: none
96
105
  when: manual
97
106
  environment:
98
- name: $CI_BUILD_REF_SLUG
107
+ name: $CI_PROJECT_NAME-$CI_BUILD_REF_SLUG
99
108
  action: stop
100
109
 
101
110
  staging:
@@ -36,6 +36,8 @@ ADD ops/worker.sh /etc/service/worker/run
36
36
  COPY . $APP_HOME
37
37
  RUN chown -R app $APP_HOME
38
38
 
39
+ # Asset complie and migrate if prod, otherwise just start nginx
40
+ ADD ops/nginx.sh /etc/service/nginx/run
39
41
  RUN rm -f /etc/service/nginx/down
40
42
 
41
43
  CMD ["/sbin/my_init"]
data/templates/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  1) Install Docker.app
4
4
 
5
- 2) Get .env file from team member or copy it from .env.example and fill it out
5
+ 2) Get .env file from team member or copy it from .env-example and fill it out
6
6
 
7
7
  3) gem install stack_car
8
8
 
@@ -21,3 +21,4 @@ sc release {staging | production} # creates and pushes the correct tags
21
21
  sc deploy {staging | production} # deployes those tags to the server
22
22
  ```
23
23
 
24
+ Releaese and Deployment are handled by the gitlab ci by default. See ops/deploy-app to deploy from locally, but note all Rancher install pull the currently tagged registry image
@@ -4,21 +4,17 @@ services:
4
4
  postgres:
5
5
  image: postgres
6
6
  env_file:
7
- - .env
7
+ - .env-example
8
8
  ports:
9
9
  - "5432"
10
- volumes:
11
- - 'postgres:/var/lib/postgresql/data'
12
10
  <% end -%>
13
11
  <% if options[:mysql] -%>
14
12
  mysql:
15
13
  image: mysql
16
14
  env_file:
17
- - .env
15
+ - .env-example
18
16
  ports:
19
17
  - '3306'
20
- volumes:
21
- - 'mysql:/var/lib/mysql'
22
18
  <% end -%>
23
19
  <% if options[:elasticsearch] -%>
24
20
  elasticsearch:
@@ -26,16 +22,12 @@ services:
26
22
  ports:
27
23
  - "9200"
28
24
  - "9300"
29
- volumes:
30
- - 'elasticsearch:/usr/share/elasticsearch/data'
31
25
  <% end -%>
32
26
  <% if options[:solr] %>
33
27
  solr:
34
28
  image: solr:latest
35
29
  ports:
36
30
  - "8983"
37
- volumes:
38
- - 'solr:/opt/solr/server/solr/mycores'
39
31
  entrypoint:
40
32
  - docker-entrypoint.sh
41
33
  - solr-precreate
@@ -48,14 +40,10 @@ services:
48
40
  command: redis-server
49
41
  ports:
50
42
  - '6379'
51
- volumes:
52
- - 'redis:/var/lib/redis/data'
53
43
  <% end -%>
54
44
  <% if options[:mongodb] -%>
55
45
  mongodb:
56
46
  image: mongo:2.6.12
57
- volumes:
58
- - 'mongodb:/data/db'
59
47
  ports:
60
48
  - "27017"
61
49
  <% end -%>
@@ -73,55 +61,16 @@ services:
73
61
  ports:
74
62
  - "8080"
75
63
  <% end -%>
76
- main:
64
+ web:
77
65
  image: "${REGISTRY_HOST}/${REGISTRY_URI}:${TAG:-master}"
78
- volumes:
79
- - .:/app
80
66
  env_file:
81
- - .env
82
- # Keep the stdin open, so we can attach to our app container's process
83
- # and do things such as byebug, etc:
84
- stdin_open: true
85
- # Enable sending signals (CTRL+C, CTRL+P + CTRL+Q) into the container:
86
- tty: true
87
- <% if options[:delayed_job] -%>
88
- delayed_job:
89
- extends:
90
- service: main
91
- command: ./bin/delayed_job run
92
- depends_on:
93
- <%= compose_depends(:delayed_job) %>
94
- <% end -%>
95
- web:
96
- extends:
97
- service: main
98
- command: bundle exec rails s -p 3000 -b '0.0.0.0'
67
+ - .env-example
99
68
  labels:
100
69
  rap.host: ${SITE_URI}
101
70
  rap.le_host: ${SITE_URI}
102
71
  rap.le_test: true
72
+ io.rancher.container.pull_image: always
103
73
  ports:
104
- - "3000"
74
+ - "80"
105
75
  depends_on:
106
76
  <%= compose_depends %>
107
-
108
- volumes:
109
- <% if options[:postgres] -%>
110
- postgres:
111
- <% end -%>
112
- <% if options[:mysql] -%>
113
- mysql:
114
- <% end -%>
115
- <% if options[:elasticsearch] -%>
116
- elasticsearch:
117
- <% end -%>
118
- <% if options[:solr] -%>
119
- solr:
120
- <% end -%>
121
- <% if options[:redis] -%>
122
- redis:
123
- <% end -%>
124
- <% if options[:mongodb] -%>
125
- mongodb:
126
- <% end -%>
127
-
@@ -2,19 +2,20 @@ version: '2.1'
2
2
  services:
3
3
  web:
4
4
  image: "${REGISTRY_HOST}/${REGISTRY_URI}:${TAG:-master}"
5
- command: bash -c "bundle exec rake assets:precompile db:migrate && bundle exec passenger start -p 3000 -b '0.0.0.0'""
6
5
  environment:
7
6
  - RAILS_ENV=production
8
7
  - RACK_ENV=production
8
+ - PASSENGER_APP_ENV=production
9
9
  restart: unless-stopped
10
10
  ports:
11
- - "3000"
11
+ - "80"
12
12
  labels:
13
13
  rap.host: ${SITE_URI}
14
14
  rap.le_host: ${SITE_URI}
15
15
  rap.le_test: true
16
+ io.rancher.container.pull_image: always
16
17
  env_file:
17
- .env
18
+ .env-prod
18
19
 
19
20
  <% if options[:rancher] -%>
20
21
  volumes:
@@ -23,6 +23,8 @@ services:
23
23
  <% if options[:elasticsearch] -%>
24
24
  elasticsearch:
25
25
  image: elasticsearch:1.7.1
26
+ env_file:
27
+ - .env
26
28
  ports:
27
29
  - "9200"
28
30
  - "9300"
@@ -19,4 +19,4 @@ env REGISTRY_URI;
19
19
  env SITE_URI;
20
20
  <% end -%>
21
21
  env TAG;
22
- env VIRUAL_PORT;
22
+ env VIRTUAL_PORT;
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+ set -e
3
+ if [[ ! -e /var/log/nginx/error.log ]]; then
4
+ # The Nginx log forwarder might be sleeping and waiting
5
+ # until the error log becomes available. We restart it in
6
+ # 1 second so that it picks up the new log file quickly.
7
+ (sleep 1 && sv restart /etc/service/nginx-log-forwarder)
8
+ fi
9
+
10
+ if [ -z $PASSENGER_APP_ENV ]
11
+ then
12
+ export PASSENGER_APP_ENV=development
13
+ fi
14
+
15
+ if [ $PASSENGER_APP_ENV == "production" ]
16
+ then
17
+ /sbin/setuser app /bin/bash -l -c 'cd /home/app/webapp && bundle exec rake assets:precompile db:migrate'
18
+ fi
19
+
20
+
21
+ exec /usr/sbin/nginx
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+
3
+ # `/sbin/setuser memcache` runs the given command as the user `memcache`.
4
+ # If you omit that part, the command will be run as root.
5
+
6
+ exec /sbin/setuser app /bin/bash -l -c 'cd /home/app/webapp && ./bin/delayed_job run >>/var/log/worker.log 2>&1'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stack_car
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Kaufman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-04-29 00:00:00.000000000 Z
11
+ date: 2017-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '2.0'
103
+ version: '2.2'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '2.0'
110
+ version: '2.2'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: thor
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -161,6 +161,7 @@ files:
161
161
  - templates/docker-compose.yml.erb
162
162
  - templates/env.conf.erb
163
163
  - templates/hosts.erb
164
+ - templates/nginx.sh.erb
164
165
  - templates/ops/deploy-app
165
166
  - templates/ops/deploy.yml
166
167
  - templates/ops/provision.yml
@@ -181,6 +182,7 @@ files:
181
182
  - templates/ops/roles/docker.ubuntu/tests/vagrant.yml
182
183
  - templates/ops/roles/docker.ubuntu/vars/main.yml
183
184
  - templates/webapp.conf.erb
185
+ - templates/worker.sh.erb
184
186
  homepage: https://gitlab.com/notch8/stack_car
185
187
  licenses: []
186
188
  metadata: {}
data/exe/sc DELETED
@@ -1 +0,0 @@
1
- exe/stack_car