stack_car 0.3.0 → 0.3.1

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