Skip to content

Backup & Restore

Guide for backing up and restoring your Bifolk installation.

Target Audience: System administrators


What to Back Up

Component Location Method
Database (SQLite) /bifolk/db/db.sqlite3 File copy
Database (PostgreSQL) PostgreSQL server pg_dump
Media files /bifolk/media/ File copy
Configuration .env, secrets/ File copy
Docker volumes Named volumes docker volume commands

SQLite Backup

Simple File Copy

# Stop the application (recommended for consistency)
docker compose stop bifolk-app

# Copy the database file
docker cp bifolk-app:/bifolk/db/db.sqlite3 ./backup/db.sqlite3

# Restart
docker compose start bifolk-app

Using Django dumpdata

# Export as JSON (application running)
docker compose exec bifolk-app python manage.py dumpdata \
    --exclude auth.permission \
    --exclude contenttypes \
    --indent 2 > backup/data.json

PostgreSQL Backup

# Using pg_dump
docker compose exec bifolk-db pg_dump -U bifolk bifolk > backup/bifolk.sql

# Compressed
docker compose exec bifolk-db pg_dump -U bifolk bifolk | gzip > backup/bifolk.sql.gz

Media Files Backup

# Copy media files from the container
docker cp bifolk-app:/bifolk/media/ ./backup/media/

Full Backup Script

#!/bin/bash
# Full Bifolk backup
BACKUP_DIR="./backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"

# Database (SQLite)
docker cp bifolk-app:/bifolk/db/db.sqlite3 "$BACKUP_DIR/db.sqlite3"

# Media files
docker cp bifolk-app:/bifolk/media/ "$BACKUP_DIR/media/"

# Configuration
cp .env "$BACKUP_DIR/.env"
cp -r ../../secrets/ "$BACKUP_DIR/secrets/"

echo "Backup completed: $BACKUP_DIR"

Restoring from Backup

SQLite Restore

# Stop the application
docker compose stop bifolk-app

# Restore the database
docker cp ./backup/db.sqlite3 bifolk-app:/bifolk/db/db.sqlite3

# Restart
docker compose start bifolk-app

PostgreSQL Restore

# Drop and recreate the database
docker compose exec bifolk-db psql -U bifolk -c "DROP DATABASE bifolk;"
docker compose exec bifolk-db psql -U bifolk -c "CREATE DATABASE bifolk;"

# Restore
cat backup/bifolk.sql | docker compose exec -T bifolk-db psql -U bifolk bifolk

Media Restore

docker cp ./backup/media/ bifolk-app:/bifolk/media/

Django loaddata Restore

docker compose exec bifolk-app python manage.py loaddata backup/data.json

Backup Schedule Recommendations

Frequency What to Back Up
Daily Database
Weekly Database + Media files
Before upgrades Full backup (database + media + configuration)

Testing Backups

Regularly test your backups by restoring to a test environment:

  1. Set up a separate Docker Compose instance
  2. Restore the backup
  3. Verify data integrity
  4. Verify media files are accessible