Skip to content

Backup & Recovery

What to back up

Component Location Contains
.env Project root Secrets, API keys, configuration
Docker volumes docker volume ls Indexed documents, vector databases, audit logs
Configuration docker-compose.yml Service definitions

Backup procedure

1. Back up configuration

# Copy .env to secure location (encrypted)
cp .env /secure/backup/haagsman-products/.env.$(date +%Y%m%d)

2. Back up data volumes

# Stop services (ensures data consistency)
docker compose stop

# Back up all volumes
for vol in $(docker volume ls -q | grep hai-); do
  docker run --rm -v ${vol}:/data -v /backup:/backup alpine \
    tar czf /backup/${vol}-$(date +%Y%m%d).tar.gz -C /data .
done

# Restart services
docker compose start

Add to crontab for nightly backups:

# Run at 2 AM daily
0 2 * * * cd /path/to/haagsman-products && bash deploy/scripts/backup.sh

Recovery

From volume backup

# Stop the affected service
docker compose stop document-search

# Remove existing volume
docker volume rm haagsman-products_doc-search-data

# Recreate and restore
docker volume create haagsman-products_doc-search-data
docker run --rm -v haagsman-products_doc-search-data:/data -v /backup:/backup alpine \
  tar xzf /backup/doc-search-data-20260408.tar.gz -C /data

# Restart
docker compose start document-search

Full rebuild

If all data is lost:

docker compose down -v
docker compose up -d
# Re-upload documents and knowledge base content

Retention

Data retention is enforced automatically based on HAAGSMAN_DATA_RETENTION_DAYS. Files and audit entries older than the configured period are purged daily.

For questions about backup and disaster recovery: niels@haagsman.ai