Commit b03a0e45b13fb95bb79587c4b97a7843aefb3001
1 parent
0d02c7cc
Exists in
master
and in
1 other branch
update deployment docs with env-config instructions
Showing
4 changed files
with
71 additions
and
28 deletions
Show diff stats
config/deploy.example.rb
| @@ -2,9 +2,9 @@ | @@ -2,9 +2,9 @@ | ||
| 2 | # ============= | 2 | # ============= |
| 3 | # | 3 | # |
| 4 | # Copy this file to config/deploy.rb and customize it as needed. | 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 | # `cap deploy` whenever you would like to deploy Errbit. Refer | 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 | # config valid only for current version of Capistrano | 9 | # config valid only for current version of Capistrano |
| 10 | lock '3.3.5' | 10 | lock '3.3.5' |
| @@ -20,9 +20,8 @@ set :ssh_options, forward_agent: true | @@ -20,9 +20,8 @@ set :ssh_options, forward_agent: true | ||
| 20 | 20 | ||
| 21 | set :linked_files, fetch(:linked_files, []) + %w( | 21 | set :linked_files, fetch(:linked_files, []) + %w( |
| 22 | .env | 22 | .env |
| 23 | - config/config.yml | ||
| 24 | - config/mongoid.yml | ||
| 25 | config/newrelic.yml | 23 | config/newrelic.yml |
| 24 | + config/unicorn.rb | ||
| 26 | ) | 25 | ) |
| 27 | 26 | ||
| 28 | set :linked_dirs, fetch(:linked_dirs, []) + %w( | 27 | set :linked_dirs, fetch(:linked_dirs, []) + %w( |
| @@ -38,36 +37,51 @@ set :linked_dirs, fetch(:linked_dirs, []) + %w( | @@ -38,36 +37,51 @@ set :linked_dirs, fetch(:linked_dirs, []) + %w( | ||
| 38 | # set :rbenv_roles, :all | 37 | # set :rbenv_roles, :all |
| 39 | 38 | ||
| 40 | namespace :errbit do | 39 | namespace :errbit do |
| 41 | - task :setup_configs do | 40 | + desc "Setup config files (first time setup)" |
| 41 | + task :setup do | ||
| 42 | on roles(:app) do | 42 | on roles(:app) do |
| 43 | execute "mkdir -p #{shared_path}/config" | 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 | }.each do |src, target| | 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 | end | 54 | end |
| 51 | end | 55 | end |
| 52 | end | 56 | end |
| 53 | end | 57 | end |
| 54 | 58 | ||
| 55 | namespace :db do | 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 | on roles(:db) do | 62 | on roles(:db) do |
| 59 | within current_path do | 63 | within current_path do |
| 60 | with rails_env: fetch(:rails_env) do | 64 | with rails_env: fetch(:rails_env) do |
| 61 | - execute :rake, 'db:mongoid:create_indexes' | 65 | + execute :rake, 'errbit:bootstrap' |
| 62 | end | 66 | end |
| 63 | end | 67 | end |
| 64 | end | 68 | end |
| 65 | end | 69 | end |
| 66 | end | 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 | namespace :unicorn do | 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 | desc 'Reload unicorn' | 85 | desc 'Reload unicorn' |
| 72 | task :reload do | 86 | task :reload do |
| 73 | on roles(:app) do | 87 | on roles(:app) do |
config/unicorn.default.rb
| @@ -3,6 +3,8 @@ | @@ -3,6 +3,8 @@ | ||
| 3 | worker_processes 3 # amount of unicorn workers to spin up | 3 | worker_processes 3 # amount of unicorn workers to spin up |
| 4 | timeout 30 # restarts workers that hang for 30 seconds | 4 | timeout 30 # restarts workers that hang for 30 seconds |
| 5 | preload_app true | 5 | preload_app true |
| 6 | +listen 8080 | ||
| 7 | +pid ENV['UNICORN_PID'] if ENV['UNICORN_PID'] | ||
| 6 | 8 | ||
| 7 | # Taken from github: https://github.com/blog/517-unicorn | 9 | # Taken from github: https://github.com/blog/517-unicorn |
| 8 | # Though everyone uses pretty miuch the same code | 10 | # Though everyone uses pretty miuch the same code |
| @@ -17,7 +19,7 @@ before_fork do |server, worker| | @@ -17,7 +19,7 @@ before_fork do |server, worker| | ||
| 17 | # we send it a QUIT. | 19 | # we send it a QUIT. |
| 18 | # | 20 | # |
| 19 | # Using this method we get 0 downtime deploys. | 21 | # Using this method we get 0 downtime deploys. |
| 20 | - | 22 | + |
| 21 | old_pid = "#{server.config[:pid]}.oldbin" | 23 | old_pid = "#{server.config[:pid]}.oldbin" |
| 22 | if File.exists?(old_pid) && server.pid != old_pid | 24 | if File.exists?(old_pid) && server.pid != old_pid |
| 23 | begin | 25 | begin |
| @@ -27,3 +29,4 @@ before_fork do |server, worker| | @@ -27,3 +29,4 @@ before_fork do |server, worker| | ||
| 27 | end | 29 | end |
| 28 | end | 30 | end |
| 29 | end | 31 | end |
| 32 | + |
docs/deployment/capistrano.md
| 1 | # Deploy with Capistrano | 1 | # Deploy with Capistrano |
| 2 | These instructions should be good enough to get you started deploying | 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 | ## Clone and prepare the source code repository | 7 | ## Clone and prepare the source code repository |
| 8 | 8 | ||
| @@ -18,20 +18,48 @@ $EDITOR config/deploy.rb | @@ -18,20 +18,48 @@ $EDITOR config/deploy.rb | ||
| 18 | cp config/deploy/production.example.rb config/deploy/production.rb | 18 | cp config/deploy/production.example.rb config/deploy/production.rb |
| 19 | $EDITOR config/deploy/production.rb | 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 | bundle exec cap production deploy:check | 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 | ### rbenv support | 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 | ```bash | 59 | ```bash |
| 32 | rbenv=1 bundle exec cap production deploy | 60 | rbenv=1 bundle exec cap production deploy |
| 33 | ``` | 61 | ``` |
| 34 | 62 | ||
| 35 | ## Schedule recurring tasks | 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,19 +23,17 @@ git commit -m "Update db/seeds.rb with initial login" | ||
| 23 | heroku apps:create | 23 | heroku apps:create |
| 24 | heroku addons:add mongolab:sandbox | 24 | heroku addons:add mongolab:sandbox |
| 25 | heroku addons:add sendgrid:starter | 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 | heroku config:add ERRBIT_HOST=some-hostname.example.com | 28 | heroku config:add ERRBIT_HOST=some-hostname.example.com |
| 29 | heroku config:add ERRBIT_EMAIL_FROM=example@example.com | 29 | heroku config:add ERRBIT_EMAIL_FROM=example@example.com |
| 30 | git push heroku master | 30 | git push heroku master |
| 31 | ``` | 31 | ``` |
| 32 | 32 | ||
| 33 | ## Prepare the DB | 33 | ## Prepare the DB |
| 34 | -No bootstrap task is used on Heroku! | ||
| 35 | 34 | ||
| 36 | ```bash | 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 | ## Schedule recurring tasks | 39 | ## Schedule recurring tasks |