Skip to content

Frona stores all its data on disk. Backing up is a matter of copying the right directories.

What to back up

DirectoryContentsPriority
data/db/SurrealDB database (users, agents, chats, messages, tasks, memory)Critical
data/workspaces/Workspace filesImportant
data/files/Uploaded file attachmentsImportant
.envConfiguration and secretsCritical

The database contains everything. User accounts, agent definitions, conversation history, memory, tasks, and credentials. Losing it means losing all platform state.

Backup procedure

1. Stop the engine

For a consistent backup, stop the engine first:

bash
docker compose stop frona

This ensures the database files are in a clean state (no active write-ahead logs).

2. Copy the data directory

bash
tar czf frona-backup-$(date +%Y%m%d).tar.gz data/ .env

3. Restart the engine

bash
docker compose start frona

Automated backups

Set up a cron job for regular backups:

cron
0 2 * * * cd /path/to/frona && docker compose stop frona && tar czf /backups/frona-$(date +\%Y\%m\%d).tar.gz data/ .env && docker compose start frona

This runs at 2 AM daily. Adjust the schedule and backup location to your needs.

Restoring from backup

  1. Stop the engine: docker compose stop frona
  2. Remove or rename the current data directory: mv data/ data.old/
  3. Extract the backup: tar xzf frona-backup-20260227.tar.gz
  4. Start the engine: docker compose start frona

Considerations

  • Downtime: stopping the engine for backup causes a brief outage. For most deployments, a few seconds of downtime during off-hours is acceptable.
  • Backup size: the database grows over time, especially with many conversations. Monitor backup sizes and implement retention policies.
  • Off-site storage: keep copies of backups in a different location (cloud storage, different server) for disaster recovery.
  • Test restores: periodically test that you can actually restore from a backup. An untested backup is not a backup.