Automated DB Backups #115
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Automated DB Backups | |
| on: | |
| schedule: | |
| - cron: '* */12 * * *' | |
| workflow_dispatch: | |
| jobs: | |
| backup-database: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Copy backup script to server | |
| uses: appleboy/scp-action@v0.1.7 | |
| with: | |
| host: ${{ secrets.SERVER_HOST }} | |
| username: ${{ secrets.SERVER_USER }} | |
| key: ${{ secrets.SSH_PRIVATE_KEY }} | |
| source: "automated_db_backups/backup.sh" | |
| target: "/tmp" | |
| strip_components: 1 | |
| - name: Run backup on server | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.SERVER_HOST }} | |
| username: ${{ secrets.SERVER_USER }} | |
| key: ${{ secrets.SSH_PRIVATE_KEY }} | |
| script: | | |
| # Define script locations | |
| TEMP_SCRIPT="/tmp/backup.sh" | |
| PERMANENT_SCRIPT="/usr/local/bin/mongodb-backup.sh" | |
| # Check if script needs updating | |
| if [ -f "${PERMANENT_SCRIPT}" ]; then | |
| if ! cmp -s "${TEMP_SCRIPT}" "${PERMANENT_SCRIPT}"; then | |
| echo "Script has changes, updating..." | |
| sudo cp "${TEMP_SCRIPT}" "${PERMANENT_SCRIPT}" | |
| sudo chmod +x "${PERMANENT_SCRIPT}" | |
| echo "✓ Script updated" | |
| else | |
| echo "✓ Script is up to date" | |
| fi | |
| else | |
| echo "Installing script for first time..." | |
| sudo cp "${TEMP_SCRIPT}" "${PERMANENT_SCRIPT}" | |
| sudo chmod +x "${PERMANENT_SCRIPT}" | |
| echo "✓ Script installed" | |
| fi | |
| # Run the backup script | |
| echo "Running backup script..." | |
| sudo "${PERMANENT_SCRIPT}" | |
| # Check exit code | |
| if [ $? -eq 0 ]; then | |
| echo "✓ Backup completed successfully" | |
| else | |
| echo "✗ Backup failed" | |
| exit 1 | |
| fi | |
| # - name: Notify on failure | |
| # if: failure() | |
| # uses: appleboy/ssh-action@v1.0.3 | |
| # with: | |
| # host: ${{ secrets.SERVER_HOST }} | |
| # username: ${{ secrets.SERVER_USER }} | |
| # key: ${{ secrets.SSH_PRIVATE_KEY }} | |
| # script: | | |
| # echo "Backup failed at $(date)" >> /var/log/mongodb-backup-failures.log |