webiny / backup-service
一个简单的库,用于备份并存储到AWS S3
Requires
- php: >=7.0
- webiny/amazon: ~1.6 || dev-master
- webiny/config: ~1.6 || dev-master
- webiny/std-lib: ~1.6 || dev-master
- wp-cli/php-cli-tools: ^0.11.1
Requires (Dev)
- mybuilder/phpunit-accelerator: dev-master
- phpunit/phpunit: ~4
- webiny/amazon: ~1
README
该库用于创建服务器上一个或多个文件夹和一个或多个MongoDb数据库的加密备份存档。一旦创建备份存档,它将被存储到定义的S3存储桶中。
该库自动管理S3存储桶上的备份,并且只会上传一次备份存档。如果需要保留每周、每月或每年的备份副本,可以使用S3 API制作备份副本,因此我们不需要多次上传相同的存档。
备份是一个tar gzip
存档,然后使用定义的密码短语通过openssl
或gpg
加密,然后才将其以加密状态传输到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小时的备份快照。您还可以添加weekly
、monthly
和yearly
快照。TempPath
:这是本地机器上的一个可写路径,脚本将在其中放置一些临时文件和一些日志,您可以稍后参考这些日志以查看脚本执行了什么操作。加密
:这是用于加密存档的加密设置。注意:加密是可选的,如果不定义密钥,则备份不会加密。支持两种加密类型:gpg
或openssl
。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 :)