备份
创建 Cloudflare R2 存储桶
创建一个名为 assets
的存储桶,配置公开访问链接为 https://assets.viva-la-vita.org
。获取它的 API Key ID 和 Secret Key。
安装与配置 AWS CLI
首先安装 AWS CLI,然后用 configure 输入 Cloudflare R2 的信息:
apt install awscli
aws configure
创建备份脚本
##!/bin/bash
mkdir -p /root/backup
cd /root/backup
## cms: mysql
docker exec cms-mysql-1 sh -c 'exec mysqldump strapi -uroot -p"$MYSQL_ROOT_PASSWORD"' | gzip > cms-`date +%F`.sql.gz
## bbs: mysql
docker exec bbs-mysql-1 sh -c 'exec mysqldump flarum -uroot -p"$MYSQL_ROOT_PASSWORD"' | gzip > bbs-`date +%F`.sql.gz
## bbs: assets
docker run --rm --volumes-from bbs-flarum-1 -v `pwd`:/backup ubuntu tar czPf /backup/bbs-`date +%F`.tar.gz /var/www/flarum
find . -type f -mtime +2 -exec rm -rf {} \; 2>&1
aws --endpoint-url https://<account-id>.r2.cloudflarestorage.com s3 sync . s3://assets/backup --delete
设置 cron job
以 root 用户运行 crontab -e
,然后输入
0 4 * * * /root/backup.sh
注:如果更改过时区,需要做 service cron restart
才能让 cron 获取正确的时区。
从备份中恢复
静态文件可以在容器外执行此命令直接导入:
docker run --rm --volumes-from bbs-flarum-1 -v `pwd`:/backup ubuntu tar xzPf /backup/bbs-YYYY-MM-DD.tar.gz
数据库要略复杂一些,需要先解压缩 gzip -d bbs-YYYY-MM-DD.sql.gz
,然后将它复制进容器 docker cp bbs-YYYY-MM-DD.sql bbs-mysql-1:/root/
。最后,进入容器并执行命令:
mysql -u root -p flarum < /root/bbs-YYYY-MM-DD.sql