Where Does Self-Hosted FreeScout Store Data?
FreeScout keeps app state in /data with mailboxes in MySQL. Env carries secrets; volumes carry everything else.
Last updated
FreeScout splits into env, files, and database. Environment (SITE_URL, DB_*, ADMIN_*, mail driver) seeds the install; the app writes some settings back into its own .env at /data/config. Uploads, caches, and sessions live under /data. Tickets, users, and mailbox definitions live in MySQL/MariaDB (Postgres in newer images).
That triangle is the backup: database dump plus /data volume plus env record. APP_KEY ties them together by encrypting stored secrets, which makes key rotation a planned event, not a restore step. Tiredofit images add /www/html and logs mounts for source exposure and self-updates; the etkecc hardened image instead runs read-only with a single /data surface.
Where FreeScout stores this, by platform
/data (Docker volume)
Uploads, cache, sessions, plus the self-written .env with APP_KEY. Mount persistently. Guard APP_KEY with the database dump; mismatched keys corrupt every stored credential.
MySQL data (/var/lib/mysql)
Tickets, mailboxes, users. Dump on schedule. Pair every dump with the /data volume and env from the same moment; the three drift apart silently otherwise.
Frequently asked questions
how do i back up freescout
Dump MySQL plus copy the /data volume (storage, .env/config, uploads) with the app stopped. Tickets, mailboxes, and settings span both. Restore to identical paths; APP_KEY must match or encrypted values break.
can i regenerate the app key on restore
No. The .env/APP_KEY pair encrypts stored credentials, so a fresh key against an old database locks every mailbox. Copy the existing /data/config .env with the dump and keep both halves in sync.
Notice an outdated path? Let us know.