Rails 备份:生成备份模型不是 运行 Dokku

Rails Backup: Generating Backup Model not running with Dokku

使用 Backup gem 进行数据库备份,将安装了 gem 的应用程序部署到 DigitalOcean,下一步是 运行 使用

dokku run oktob bundle exec backup generate:model --trigger oktob_db_backup --databases="postgresql" --storages="dropbox" --encryptors="openssl" --compressors="gzip" --notifiers="mail"

这应该创建配置文件来设置备份,但它returns什么都没有。

当我在本地机器上 运行 生成器时,会正常生成 2 个文件,但这次没有使用 dokku run oktob,因为它在本地机器上。

Generated model file: '/Users/ahmadajmi/Backup/models/oktob_db_backup.rb'.
Generated configuration file: '/Users/ahmadajmi/Backup/config.rb'.

谢谢

这是一个没有答案的问题,但对于评论来说太长了。

你通常会遇到这样的问题,即新创建的文件不会持久化,因为 dokku run 东西 会启动一个新容器 (然后直接到达它的生命的尽头)。

您可以使用 dokku-volume 插件指定一个 "lives" 在您的应用程序容器之外的目录,并保持文件原样。

为了解决这个问题,备份 gem 应该安装在 Linux 机器的应用程序容器之外。

Backup generator 命令用于生成备份配置文件。

backup generate:model --trigger oktob_database_backup --databases="postgresql" --storages="s3" --compressor="gzip" --notifiers="mail"

这将在Linux机器中创建备份配置文件/root/Backup/models/oktob_database_backup.rb,与Dokku或应用程序容器无关,该文件包含一些与数据库连接、S3信息相关的必需配置和用于发送通知的电子邮件帐户。

/root/Backup/models/oktob_database_backup.rb 文件包含:

# encoding: utf-8

##
# Backup Generated: oktob_db_backup
# Once configured, you can run the backup with the following command:
#
# $ backup perform -t oktob_db_backup [-c <path_to_configuration_file>]
#
# For more information about Backup's components, see the documentation at:
# http://backup.github.io/backup
#
Model.new(:oktob_database_backup, 'Oktob Production Database Backup') do

  ##
  # PostgreSQL [Database]
  #
  database PostgreSQL do |db|
    db.name               = ENV['DATABASE_NAME']
    db.username           = ENV['DATABASE_USERNAME']
    db.password           = ENV['DATABASE_PASSWORD']
    db.host               = ENV['DATABASE_HOST']
    db.port               = ENV['DATABASE_PORT']
  end

  ##
  # Amazon Simple Storage Service [Storage]
  #
  store_with S3 do |s3|
    # AWS Credentials
    s3.access_key_id     = ENV['AWS_ACCESS_KEY_ID']
    s3.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
    s3.region            = "us-west-2"
    s3.bucket            = ENV['AWS_DATABASE_BACKUP_BUCKET_NAME']
    s3.path              = "/"
  end

  ##
  # Gzip [Compressor]
  #
  compress_with Gzip

  ##
  # Mail [Notifier]
  #
  # The default delivery method for Mail Notifiers is 'SMTP'.
  # See the documentation for other delivery options.
  #
  notify_by Mail do |mail|
    mail.on_success           = true
    mail.on_warning           = true
    mail.on_failure           = true

    mail.from                 = ENV['EMAIL_ADDRESS']
    mail.to                   = ENV['EMAIL_ADDRESS']
    mail.address              = "smtp.gmail.com"
    mail.port                 = 587
    mail.domain               = "oktob.io"
    mail.user_name            = ENV['SMTP_USERNAME']
    mail.password             = ENV['SMTP_PASSWORD']
    mail.authentication       = "plain"
    mail.encryption           = :starttls
  end
end

配置存储在 /etc/environment 文件中:

## Database
export DATABASE_NAME=''
export DATABASE_USERNAME=''
export DATABASE_PASSWORD=''
export DATABASE_HOST=''
export DATABASE_PORT=''

## Amazon S3
export AWS_ACCESS_KEY_ID=''
export AWS_SECRET_ACCESS_KEY=''
export AWS_DATABASE_BACKUP_BUCKET_NAME=''

## Email
export EMAIL_ADDRESS=''
export SMTP_USERNAME=''
export SMTP_PASSWORD=''

要手动执行备份,我们可以输入 backup perform -t oktob_database_backup,此命令将做 3 件事:

  • 远程连接到 Postgres Dokku 容器并进行数据库转储
  • 正在将 abckup 文件存储到 oktob-database-backup S3 存储桶中。
  • 发送电子邮件通知至 EMAIL_ADDRESS

使用 cron 作业每隔一小时进行一次备份,此作业在 crontab -e 中添加为:

0 * * * * /bin/bash -l -c '/usr/local/rvm/gems/ruby-2.0.0-p647/bin/backup perform -t oktob_database_backup'

我们可以通过在命令行中输入which backup来获取/usr/local/rvm/gems/ruby-2.0.0-p647/bin/backup部分,以获取路径。

要检查的好文章:

Hourly Production Server Database And File Backups

Backup PostgreSQL from a Rails project to Amazon S3