Automated backups using GitHub Actions
Backup your database on a regular basis.
You can use the Supabase CLI to backup your Postgres database. The steps involve running a series of commands to dump roles, schema, and data separately.
Inside your repository, create a new file inside the .github/workflows
folder called backup.yml
. Copy the following snippet inside the file, and the action will run whenever a new PR is created.
Never backup your data to a public repository.
Backup action
_19name: 'backup-database'_19on:_19 pull_request:_19jobs:_19 build: _19 runs-on: ubuntu-latest_19 env:_19 supabase_db_url: ${{ secrets.SUPABASE_DB_URL }} # For example: postgresql://postgres:[YOUR-PASSWORD]@db.<ref>.supabase.co:5432/postgres_19 steps:_19 - uses: actions/checkout@v2_19 - uses: supabase/setup-cli@v1_19 with:_19 version: latest_19 - name: Backup roles_19 run: supabase db dump --db-url "$supabase_db_url" -f roles.sql --role-only_19 - name: Backup schema_19 run: supabase db dump --db-url "$supabase_db_url" -f schema.sql_19 - name: Backup data_19 run: supabase db dump --db-url "$supabase_db_url" -f data.sql --data-only --use-copy
Periodic Backups Workflow
You can use the GitHub Action to run periodic backups of your database. In this example, the Action workflow is triggered by push
and pull_request
events on the main
branch, manually via workflow_dispatch
, and automatically at midnight every day due to the schedule
event with a cron
expression.
The workflow runs on the latest Ubuntu runner and requires write permissions to the repository's contents. It uses the Supabase CLI to dump the roles, schema, and data from your Supabase database, utilizing the SUPABASE_DB_URL
environment variable that is securely stored in the GitHub secrets.
After the backup is complete, it auto-commits the changes to the repository using the git-auto-commit-action
. This ensures that the latest backup is always available in your repository. The commit message for these automated commits is "Supabase backup".
This workflow provides an automated solution for maintaining regular backups of your Supabase database. It helps keep your data safe and enables easy restoration in case of any accidental data loss or corruption.
Never backup your data to a public repository.
_34name: Supa-backup_34_34on:_34 push:_34 branches: [ main ]_34 pull_request:_34 branches: [ main ]_34 workflow_dispatch:_34 schedule:_34 - cron: '0 0 * * *' # Runs every day at midnight_34jobs: _34 run_db_backup:_34 runs-on: ubuntu-latest_34 permissions:_34 contents: write_34 env:_34 supabase_db_url: ${{ secrets.SUPABASE_DB_URL }} # For example: postgresql://postgres:[YOUR-PASSWORD]@db.<ref>.supabase.co:5432/postgres_34 steps:_34 - uses: actions/checkout@v3_34 with:_34 ref: ${{ github.head_ref }}_34 - uses: supabase/setup-cli@v1_34 with:_34 version: latest_34 - name: Backup roles_34 run: supabase db dump --db-url "$supabase_db_url" -f roles.sql --role-only_34 - name: Backup schema_34 run: supabase db dump --db-url "$supabase_db_url" -f schema.sql_34 - name: Backup data_34 run: supabase db dump --db-url "$supabase_db_url" -f data.sql --data-only --use-copy_34_34 - uses: stefanzweifel/git-auto-commit-action@v4_34 with:_34 commit_message: Supabase backup
More resources
- Backing up and migrating your project: Migrating and Upgrading