·조회수 159
Github Actions使用的调度
DLog博客服务启动时最担心的部分是数据库备份。如果使用像MongoDB Atlas这样的云服务,应该会提供自动备份,但由于我在本地环境中运行MongoDB,必须自行建立备份系统。
起初,我简单地使用Ubuntu的cron命令定期运行mongodump。但是在某个时刻,这个调度不再起作用了,而我在进行数据库迁移时没有意识到这一点,导致部分数据丢失的危险情况。
之后,我认为需要一个“绝对不会关闭的备份系统”。在思考后,我选择了使用GitHub Actions的schedule功能。这种方法具有以下优点:
-
即使服务器关闭或重新启动,也不会受到影响
-
GitHub Actions本身运行稳定
-
备份日志保存在GitHub上,因此在出现问题时可以快速确定原因
现在,我每天在指定时间使用mongodump创建备份存档文件,并将其上传到AWS S3。
曾经令人不安的备份现在变成了可信赖的自动化系统。
name: MongoDB Backup
on:
schedule:
- cron: "0 16 * * *" # 每天KST凌晨1点
workflow_dispatch:
jobs:
backup:
runs-on: self-hosted
env:
CONTAINER_NAME: mongodb
MONGO_URI: ${{ secrets.MONGO_URI }}
AWS_BUCKET: danver-db-backup
AWS_REGION: ap-northeast-2
steps:
- name: Set backup file path
run: |
DATE=$(date +'%Y%m%d_%H%M%S')
FILENAME="mongo_backup_$DATE.gz"
BACKUP_PATH="/tmp/$FILENAME"
echo "BACKUP_PATH=$BACKUP_PATH" >> $GITHUB_ENV
echo "FILENAME=$FILENAME" >> $GITHUB_ENV
- name: Run mongodump
run: |
docker exec $CONTAINER_NAME mongodump \
--uri="$MONGO_URI" \
--archive \
--gzip > "$BACKUP_PATH"
- name: Upload to AWS S3
run: |
export AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}
export AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws s3 cp "$BACKUP_PATH" "s3://$AWS_BUCKET/$FILENAME" --region $AWS_REGION
- name: Cleanup
run: rm -f "$BACKUP_PATH"

김지식
웹, 앱 개발자입니다.