webiny/backup-service

一个简单的库,用于备份并存储到AWS S3

v1.0.0 2017-09-29 06:49 UTC

This package is not auto-updated.

Last update: 2024-09-15 00:49:08 UTC


README

该库用于创建服务器上一个或多个文件夹和一个或多个MongoDb数据库的加密备份存档。一旦创建备份存档,它将被存储到定义的S3存储桶中。

该库自动管理S3存储桶上的备份,并且只会上传一次备份存档。如果需要保留每周、每月或每年的备份副本,可以使用S3 API制作备份副本,因此我们不需要多次上传相同的存档。

备份是一个tar gzip存档,然后使用定义的密码短语通过opensslgpg加密,然后才将其以加密状态传输到S3存储桶。

安装

安装组件的最佳方式是使用Composer。

composer require webiny/backup-service

有关包的附加版本,请访问Packagist页面

配置

要运行备份脚本,只需创建一个小PHP脚本,并将其指向您的配置文件

<?php

require_once '../vendor/autoload.php';

$service = new \Webiny\BackupService\Service(__DIR__.'/SampleConfig.yaml');
$service->createBackup();

您可以通过CLI运行脚本,也可以配置cron作业。

关于配置参数,这里有一个示例配置。

BackupService:
    Folders:
        - /var/www/site1.com
        - /var/www/site2.com
    MongoDatabases:
        BackupTest1:
            Host: 127.0.0.1:27017
            Database: BackupTest1
            Username: Admin
            Password: password
        BackupTest2:
            Host: 127.0.0.1:27017
            Database: BackupTest2
    Frequency: # daily backup is always on
        - Week
        - Month
    TempPath: "/tmp/backups/"
    Encryption:
        Passphrase: "test-password"
        Type: openssl
    BackupStoragePath: "/mnt/gluster/backups/"
    S3:
        RemotePath: "Backups/"
        AccessId: # S3 access id
        AccessKey: # S3 access key
        Bucket: # bucket where to store the backups
        Region: # AWS region name where your bucket is located, eg eu-central-1
  • 文件夹:包含一个或多个要添加到备份存档中的文件夹。
  • MongoDatabases:要导出(使用mongodump)的mongo数据库列表,它们也将包含在备份存档中。
  • 频率:默认情况下,脚本保留24小时和48小时的备份快照。您还可以添加weeklymonthlyyearly快照。
  • TempPath:这是本地机器上的一个可写路径,脚本将在其中放置一些临时文件和一些日志,您可以稍后参考这些日志以查看脚本执行了什么操作。
  • 加密:这是用于加密存档的加密设置。注意:加密是可选的,如果不定义密钥,则备份不会加密。支持两种加密类型:gpgopenssl
  • BackupStoragePath:如果您希望将备份存储在当前文件系统上,只需在此处设置您的路径即可。如果没有设置路径,则不会在本地存储备份。
  • S3:这是您的S3配置。注意:确保您正确获取AWS区域名称,否则脚本将在上传过程中挂起(http://docs.aws.amazon.com/general/latest/gr/rande.html)。如果您未设置S3配置,则文件不会存储到S3。

解密备份

根据您使用的解密类型,您需要按照以下步骤解密您的存档。

OpenSSL

openssl bf -d < backup-1day-old > backup.restored.tar.gz

这会提示您输入密码短语。如果密码短语正确,存档将被解密,然后您可以提取它。

GPG

GPG有一个更复杂的模型。在使用此加密之前,请确保您已生成gpg密钥,并将其导入到您想要解密备份的机器上。

如果您不确定如何操作,请参阅此StackOverflow答案:http://serverfault.com/questions/489140/what-is-a-good-solution-to-encrypt-some-files-in-unix

一旦您在机器上备份好您的数据,并准备好您的gpg密钥,请在终端中输入以下命令以解密存档

gpg --output backup.restored.tar.gz --decrypt backup-1day-old

这会提示您输入密码短语。如果密码短语正确,存档将被解密,然后您可以提取它。

日志

库在每次运行时都会在{TempPath}/logs文件夹中生成一些日志。您可以参考这些日志来查看备份过程是否成功。

许可协议和贡献

贡献 > 随意发送Pull Request。

许可协议 > MIT

错误和改进

只需在问题下报告它们,或者更好的是,发送一个Pull Request :)