·조회수 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"
김지식
김지식
웹, 앱 개발자입니다.

댓글

댓글을 불러오는 중...