capistrano-ops
Library of useful scripts for DevOps using capistrano with rails.
Only supports Capistrano 3 and above.
Requirements
'capistrano', '~> 3.0'
'whenever'
Installation
Add the gem to your Gemfile
after setting up Capistrano
group:
group :development do
gem 'capistrano', require: false
end
gem 'capistrano-ops'
Then bundle
and add it to your Capfile
# Capfile
require 'capistrano/ops'
and initializers
# initializers/capistrano_ops.rb
require 'capistrano/ops'
Script overview
Script | Description |
---|---|
cap <environment> backup:create |
creates backup of postgres database on the server |
cap <environment> backup:pull |
download latest postgres backup from server |
cap <environment> figaro_yml:compare |
compare local application.yml with server application.yml |
cap <environment> figaro_yml:get |
shows env vars from server application.yml configured thru figaro |
cap <environment> logs:rails |
display server log live |
cap <environment> whenever:show_crontab |
display server app crontab generated with whenever |
cap <environment> invoke:rake TASK=<your:task> |
invoke rake task on server |
rake pg:dump |
creates postgres database backup |
rake pg:remove_old_dumps |
remove old postgres backups |
Usage
for all backup task you have to setup your database.yml properly:
production:
database: database_name
username: database_username
password: database_password
host: database_host
port: database_port
Optional Settings for backup task
env | description | type/options |
---|---|---|
NUMBER_OF_BACKUPS | number of backups to keep (default: 1) | number |
BACKUPS_ENABLED | enable/disable backup task (default: Rails.env == 'production') | boolean |
DEFAULT_URL | notification message title (default: "#database Backup") | string |
NOTIFICATION_TYPE | for notification (default: nil) | string (webhook /slack ) |
SLACK_SECRET | for slack integration | string (e.g. xoxb-1234567890-1234567890-1234567890-1234567890 ) |
SLACK_CHANNEL | for slack integration | string (e.g. C234567890 ) |
WEBHOOK_URL | Webhook server to send message | e.g http://example.com |
WEBHOOK_SECRET | Secret to send with uses md5-hmac hexdigest in headerx-hub-signature |
--- |
use with whenever/capistrano
install whenever gem and add this to your schedule.rb
# config/schedule.rb
# Use this file to easily define all of your cron jobs.
env :PATH, ENV['PATH']
set :output, -> { '2>&1 | logger -t whenever_cron' }
every :day, at: '2:00 am' do
rake 'pg:dump'
end
every :day, at: '3:00 am' do
rake 'pg:remove_old_dumps'
end
add this to your capfile
# Capfile
require 'whenever/capistrano'
Configuration
You can optionally specify the capistrano roles for the rake task (Defaults to :app
):
# Defaults to [:app]
set :rake_roles, %i[db app]
Slack integration
if you want to use slack integration you have to add this to your application.yml
NOTIFICATION_TYPE: 'slack'
SLACK_SECRET: '<your-slack-secret>'
SLACK_CHANNEL: '<your-slack-channel>'
Webhook integration
if you want to use webhook integration you have to add this to your application.yml
NOTIFICATION_TYPE: 'webhook'
WEBHOOK_URL: '<your-webhook-url>'
WEBHOOK_SECRET: '<your-webhook-secret>'
Contributing
- Fork it ( https://github.com/zauberware/capistrano-ops/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
License
The gem is available as open source under the terms of the MIT License.