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
3. Automated backup (recommended)¶
Add to crontab for nightly backups:
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:
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