Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

capistrano-ops

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

capistrano-ops

  • 1.0.7
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

capistrano-ops - Comprehensive DevOps Utility for Rails 🛠️

The capistrano-ops gem is a valuable library, tailor-made for Rails DevOps professionals, offering an array of beneficial scripts to streamline and enhance operations with Capistrano. The focus is on seamless integration with Capistrano version 3 and above.

Table of Contents

Click to expand

Main Features:

🗃️ Database and Storage Backups:

  • Create, pull, and manage backups of your Postgres database and server storage.
  • Delegation of old backup removal for both Postgres database and server storage.

🛠️ Configuration Management:

  • Compare application.yml files between local and server environments using figaro_yml:compare.
  • Fetch server environment variables set via Figaro with figaro_yml:get.
  • Copy local application.yml to the server with figaro_yml:setup. This task automatically triggers figaro_yml:backup before proceeding.
  • Create a backup of the server's application.yml with figaro_yml:backup. This is automatically executed before figaro_yml:setup to ensure a recovery point is available.
  • Roll back to the previous application.yml on the server using figaro_yml:rollback. This can be used to quickly revert changes made by figaro_yml:setup if needed.

📜 Logging and Task Management:

  • Real-time viewing of Rails server logs.
  • Real-time viewing of sidekiq logs.
  • Showcase the server app's crontab generated with the 'whenever' gem.
  • Ability to invoke server-specific rake tasks.

🔔 Notification Integrations:

  • Set up notifications through Slack or generic Webhooks.
  • Customize notification levels (info/error).

⚙️ Backup Settings Customization:

  • Define the number of backups retained, both locally and externally.
  • Toggle backup tasks and external backups.
  • S3 integration for backup storage, including customization of bucket, region, and endpoint details.

📅 Schedule Tasks:

  • Couple with the 'whenever' gem to schedule daily backup creation and old backup removal.

🔗 Slack & Webhook Integrations:

  • Integrate seamlessly with Slack or use webhooks for notifications, alerting you on essential operations or any potential issues.

☁️ Backup Providers:

  • S3 and other S3-compatible services are supported to ensure your data remains secure and accessible.

Requirements

'capistrano', '~> 3.0'
'whenever' # for scheduling tasks
'figaro' # for environment variables if you use figaro_yml tasks

# hint: if you use other aws-sdk gems, its possible that you have to update them too

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'

or if you want to use only specific tasks one or more of the following:

# Capfile


require 'capistrano/ops/backup' # backup:database:create, backup:database:pull, backup:storage:create, backup:storage:pull
require 'capistrano/ops/figaro_yml' # figaro_yml:compare, figaro_yml:get, figaro_yml:setup, figaro_yml:backup, figaro_yml:rollback
require 'capistrano/ops/invoke' # invoke:rake
require 'capistrano/ops/logrotate' # logrotate:enable, logrotate:disable, logrotate:check
require 'capistrano/ops/logs' # logs:rails, logs:sidekiq, logs:sidekiq:info, logs:sidekiq:error
require 'capistrano/ops/whenever' # whenever:show_crontab

# optionally and not included in require 'capistrano/ops'
require 'capistrano/ops/wkhtmltopdf' # setup wkhtmltopdf-binary on server

and initializers

# initializers/capistrano_ops.rb

# needed for the backup tasks
require 'capistrano/ops'

Script overview

ScriptDescription
cap <environment> backup:createcreates backup of postgres database on the server (removed since v1.0.0)
cap <environment> backup:pulldownload latest postgres backup from server (removed since v1.0.0)
cap <environment> backup:database:createcreates backup of postgres database on the server
cap <environment> backup:database:pulldownload latest postgres backup from server
cap <environment> backup:storage:createcreates backup of storage on the server
cap <environment> backup:storage:pulldownload latest storage backup from server
cap <environment> figaro_yml:setupcopy local application.yml to server application.yml
cap <environment> figaro_yml:comparecompare local application.yml with server application.yml
cap <environment> figaro_yml:getshows env vars from server application.yml configured thru figaro
cap <environment> figaro_yml:backupcreates backup of server application.yml (keeps last 5 versions)
cap <environment> figaro_yml:rollbackrollback server application.yml to previous version
cap <environment> logs:railsdisplay server log live
cap <environment> logs:sidekiqdisplay sidekiq log live
cap <environment> logs:sidekiq:infodisplay sidekiq info log live
cap <environment> logs:sidekiq:errordisplay sidekiq error log live
cap <environment> whenever:show_crontabdisplay server app crontab generated with whenever
cap <environment> invoke:rake TASK=<your:task>invoke rake task on server
cap <environment> logrotate:enableenable logrotate for logfiles on server
cap <environment> logrotate:disabledisable logrotate for logfiles on server
cap <environment> logrotate:checkshow logrotate status for logfiles on server
rake pg:dumpcreates postgres database backup
rake pg:remove_old_dumpsremove old postgres backups
rake storage:backupcreates backup of storage
rake storage:remove_old_backupsremove old storage 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

envdescriptiontype/options
NUMBER_OF_BACKUPSnumber of backups to keep (default: 7)number
NUMBER_OF_LOCAL_BACKUPSnumber of backups to keep locally (default: nil)number
NUMBER_OF_EXTERNAL_BACKUPSnumber of backups to keep externally (default: nil)number
BACKUPS_ENABLEDenable/disable backup task (default: Rails.env == 'production')boolean
EXTERNAL_BACKUP_ENABLEDenable/disable external backup (default: false) (only if 'BACKUPS_ENABLED', needs additional setup)boolean
KEEP_LOCAL_STORAGE_BACKUPSkeep local storage backups (default: true)boolean
DEFAULT_URLnotification message title (default: "#{database} Backup")string
NOTIFICATION_TYPEfor notification (default: nil)string (webhook/slack)
NOTIFICATION_LEVELfor notification (default: nil)string (info/error)
SLACK_SECRETfor slack integrationstring (e.g. xoxb-1234567890-1234567890-1234567890-1234567890)
SLACK_CHANNELfor slack integrationstring (e.g. C234567890)
WEBHOOK_URLWebhook server to send messagee.g http://example.com
WEBHOOK_SECRETSecret to send with uses md5-hmac hexdigest in headerx-hub-signature---
BACKUP_PROVIDERBackup provider (default: nil)string (s3)
S3_BACKUP_BUCKETS3 bucket name for backupsstring
S3_BACKUP_REGIONS3 region for backupsstring
S3_BACKUP_KEYS3 access key for backupsstring
S3_BACKUP_SECRETS3 secret key for backupsstring
S3_BACKUP_ENDPOINTS3 endpoint for backups (optional, used for other S3 compatible services)string

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'
  rake 'storage:backup'
end

every :day, at: '3:00 am' do
  rake 'pg:remove_old_dumps'
  rake 'storage:remove_old_backups'
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>'

Notification level

if you want to use notification level you have to add this to your application.yml

NOTIFICATION_LEVEL: 'info' # default is 'error'

Backups

if you want to configure the number of backups you have to add this to your application.yml

NUMBER_OF_BACKUPS: 7 # default is 7 (local + external)

to fine tune the number of local and external backups you can use this:

NUMBER_OF_LOCAL_BACKUPS: 7 # default is nil (local)
NUMBER_OF_EXTERNAL_BACKUPS: 7 # default is nil (local)

Backup provider

if you want to use an external backup provider you have to add this to your application.yml

BACKUP_PROVIDER: 's3'
S3_BACKUP_BUCKET: '<your-s3-bucket>'
S3_BACKUP_REGION: '<your-s3-region>'
S3_BACKUP_KEY: '<your-s3-key>'
S3_BACKUP_SECRET: '<your-s3-secret>'
S3_BACKUP_ENDPOINT: '<your-s3-endpoint>' # optional, used for other S3 compatible services

Logrotate

Logrotate is a utility designed for administrators who manage servers producing a high volume of log files to help them save some disk space as well as to avoid a potential risk making a system unresponsive due to the lack of disk space.

The capistrano-ops gem provides a set of tasks to manage logrotate on your server:

  • cap <environment> logrotate:enable - This task enables logrotate for logfiles on the server.
  • cap <environment> logrotate:disable - This task disables logrotate for logfiles on the server.
  • cap <environment> logrotate:check - This task shows the logrotate status for logfiles on the server.

Configuration

You can optionally specify the logrotate configuration file path (Defaults to /etc/logrotate.conf):

# Defaults to '/etc/logrotate.conf'
set :logrotate_path, '/path/to/your/logrotate.conf'

Usage

To use logrotate, you need to have it installed on your server. If it's not installed, you can install it using the package manager of your system. For example, on Ubuntu, you can install it using apt:

sudo apt-get install logrotate

Once logrotate is installed, you can use the capistrano-ops tasks to manage it.

Wkhtmltopdf Setup

This script is used to setup wkhtmltopdf-binary in your deployment environment for WickedPdf. It is designed to work with Capistrano.

The main task setup is hooked to run after the deploy:symlink:release task. It performs the following operations:

  • unzip the necessary binary file

  • set the binary file permissions

The script assumes, that you have a intializer file for wicked_pdf gem, which sets the path to the binary file. for example:

# config/initializers/wicked_pdf.rb
WickedPdf.config = {
  exe_path: "#{Bundler.bundle_path}/gems/wkhtmltopdf-binary-0.12.6.6/bin/wkhtmltopdf_ubuntu_18.04_amd64",
  # Attention: set the used binary file version also in the Gemfile
}

To use this script, include it in your Capistrano tasks and it will automatically run during deployment.

# Capfile
require 'capistrano/ops/wkhtmltopdf'

Contributing

  1. Fork it ( https://github.com/zauberware/capistrano-ops/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

License

The gem is available as open source under the terms of the MIT License.

This gem contains code/snippets from the following sources:

props to the original authors 🎉 check out their work too!

FAQs

Package last updated on 05 Dec 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc