Commit b03a0e45b13fb95bb79587c4b97a7843aefb3001

Authored by Stephen Crosby
1 parent 0d02c7cc
Exists in master and in 1 other branch production

update deployment docs with env-config instructions

config/deploy.example.rb
... ... @@ -2,9 +2,9 @@
2 2 # =============
3 3 #
4 4 # Copy this file to config/deploy.rb and customize it as needed.
5   -# Then run `cap deploy:setup` to set up your server and finally
  5 +# Then run `cap errbit:setup` to set up your server and finally
6 6 # `cap deploy` whenever you would like to deploy Errbit. Refer
7   -# to the Readme for more information.
  7 +# to ./docs/deployment/capistrano.md for more info
8 8  
9 9 # config valid only for current version of Capistrano
10 10 lock '3.3.5'
... ... @@ -20,9 +20,8 @@ set :ssh_options, forward_agent: true
20 20  
21 21 set :linked_files, fetch(:linked_files, []) + %w(
22 22 .env
23   - config/config.yml
24   - config/mongoid.yml
25 23 config/newrelic.yml
  24 + config/unicorn.rb
26 25 )
27 26  
28 27 set :linked_dirs, fetch(:linked_dirs, []) + %w(
... ... @@ -38,36 +37,51 @@ set :linked_dirs, fetch(:linked_dirs, []) + %w(
38 37 # set :rbenv_roles, :all
39 38  
40 39 namespace :errbit do
41   - task :setup_configs do
  40 + desc "Setup config files (first time setup)"
  41 + task :setup do
42 42 on roles(:app) do
43 43 execute "mkdir -p #{shared_path}/config"
  44 + execute "mkdir -p #{shared_path}/pids"
  45 + execute "touch #{shared_path}/.env"
  46 +
44 47 {
45   - 'config/config.example.yml' => 'config/config.yml',
46   - 'config/mongoid.example.yml' => 'config/mongoid.yml',
47   - 'config/newrelic.example.yml' => 'config/newrelic.yml'
  48 + 'config/newrelic.example.yml' => 'config/newrelic.yml',
  49 + 'config/unicorn.default.rb' => 'config/unicorn.rb',
48 50 }.each do |src, target|
49   - execute "if [ ! -f #{shared_path}/#{target} ]; then cp #{current_path}/#{src} #{shared_path}/#{target}; fi"
  51 + unless test("[ -f #{shared_path}/#{target} ]")
  52 + upload! src, "#{shared_path}/#{target}"
  53 + end
50 54 end
51 55 end
52 56 end
53 57 end
54 58  
55 59 namespace :db do
56   - desc "Create the indexes defined on your mongoid models"
57   - task :create_mongoid_indexes do
  60 + desc "Create and setup the mongo db"
  61 + task :setup do
58 62 on roles(:db) do
59 63 within current_path do
60 64 with rails_env: fetch(:rails_env) do
61   - execute :rake, 'db:mongoid:create_indexes'
  65 + execute :rake, 'errbit:bootstrap'
62 66 end
63 67 end
64 68 end
65 69 end
66 70 end
67 71  
68   -set :unicorn_pid, "`cat #{"#{fetch(:deploy_to)}/shared/pids"}/unicorn.pid`"
  72 +set :unicorn_pidfile, "#{fetch(:deploy_to)}/shared/pids/unicorn.pid"
  73 +set :unicorn_pid, "`cat #{fetch(:unicorn_pidfile)}`"
69 74  
70 75 namespace :unicorn do
  76 + desc 'Start unicorn'
  77 + task :start do
  78 + on roles(:app) do
  79 + within current_path do
  80 + execute "UNICORN_PID=\"#{fetch(:unicorn_pidfile)}\"", "bundle exec unicorn -D -c ./config/unicorn.rb"
  81 + end
  82 + end
  83 + end
  84 +
71 85 desc 'Reload unicorn'
72 86 task :reload do
73 87 on roles(:app) do
... ...
config/unicorn.default.rb
... ... @@ -3,6 +3,8 @@
3 3 worker_processes 3 # amount of unicorn workers to spin up
4 4 timeout 30 # restarts workers that hang for 30 seconds
5 5 preload_app true
  6 +listen 8080
  7 +pid ENV['UNICORN_PID'] if ENV['UNICORN_PID']
6 8  
7 9 # Taken from github: https://github.com/blog/517-unicorn
8 10 # Though everyone uses pretty miuch the same code
... ... @@ -17,7 +19,7 @@ before_fork do |server, worker|
17 19 # we send it a QUIT.
18 20 #
19 21 # Using this method we get 0 downtime deploys.
20   -
  22 +
21 23 old_pid = "#{server.config[:pid]}.oldbin"
22 24 if File.exists?(old_pid) && server.pid != old_pid
23 25 begin
... ... @@ -27,3 +29,4 @@ before_fork do |server, worker|
27 29 end
28 30 end
29 31 end
  32 +
... ...
docs/deployment/capistrano.md
1 1 # Deploy with Capistrano
2 2 These instructions should be good enough to get you started deploying
3   -capistrano with Errbit. More than likely, you'll have to adjust some things to
4   -suit your needs, so you should understand how to use capistrano before you
5   -continue.
  3 +capistrano with Errbit. More than likely, you'll have to adjust some
  4 +things to suit your needs, so you should understand how to use
  5 +capistrano before you continue.
6 6  
7 7 ## Clone and prepare the source code repository
8 8  
... ... @@ -18,20 +18,48 @@ $EDITOR config/deploy.rb
18 18 cp config/deploy/production.example.rb config/deploy/production.rb
19 19 $EDITOR config/deploy/production.rb
20 20  
21   -# Create required directories.
22   -# It will print out what files are missing.
23   -# Create them manually or use errbit:setup_configs task after first deploy
  21 +# Check to make sure configs exist
24 22 bundle exec cap production deploy:check
  23 +
  24 +# Create the configs yourself, or run errbit:setup_configs to upload the
  25 +# defaults
  26 +bundle exec cap production errbit:setup_configs
  27 +
  28 +# Deploy
  29 +bundle exec cap production deploy
  30 +
  31 +# Setup the remote DB if you haven't already
  32 +bundle exec cap production db:setup
25 33 ```
26 34  
  35 +## Static Assets
  36 +For a deployment of any real size, you'll probably want to set up a web
  37 +server for efficiently serving static assets. If you choose to go this
  38 +route, just map all requests for /assets/.\* to
  39 +/deploy/path/shared/public/assets
  40 +
  41 +## Starting Errbit
  42 +Errbit comes with some capistrano tasks to manage running Errbit under
  43 +unicorn.
  44 +To start Errbit, you can run:
  45 +```bash
  46 +bundle exec cap production unicorn:start
  47 +```
  48 +
  49 +Supervising and monitoring Errbit is beyond the scope of this
  50 +documentation.
  51 +
  52 +
27 53 ### rbenv support
28 54  
29   -Pass `rbenv` environment when running `cap` to use rbenv.
  55 +Pass `rbenv` environment when running `cap` to use rbenv. See
  56 +[capistrano/rbenv](https://github.com/capistrano/rbenv) for more
  57 +information.
30 58  
31 59 ```bash
32 60 rbenv=1 bundle exec cap production deploy
33 61 ```
34 62  
35 63 ## Schedule recurring tasks
36   -You may want to periodically clear resolved errors to free up space. Schedule
37   -the ```rake errbit:db:clear_resolved``` rake task to run every day or so.
  64 +You may want to periodically clear resolved errors to free up space.
  65 +Schedule ```rake errbit:db:clear_resolved``` to run every day or so.
... ...
docs/deployment/heroku.md
... ... @@ -23,19 +23,17 @@ git commit -m "Update db/seeds.rb with initial login"
23 23 heroku apps:create
24 24 heroku addons:add mongolab:sandbox
25 25 heroku addons:add sendgrid:starter
26   -heroku config:add HEROKU=true
27   -heroku config:add SECRET_TOKEN="$(bundle exec rake secret)"
  26 +heroku config:add GEMFILE_RUBY_VERSION=2.2.0
  27 +heroku config:add SECRET_KEY_BASE="$(bundle exec rake secret)"
28 28 heroku config:add ERRBIT_HOST=some-hostname.example.com
29 29 heroku config:add ERRBIT_EMAIL_FROM=example@example.com
30 30 git push heroku master
31 31 ```
32 32  
33 33 ## Prepare the DB
34   -No bootstrap task is used on Heroku!
35 34  
36 35 ```bash
37   -heroku run rake db:seed
38   -heroku run rake db:mongoid:create_indexes
  36 +heroku run rake errbit:bootstrap
39 37 ```
40 38  
41 39 ## Schedule recurring tasks
... ...