Backups

What to back up (database, .env, storage and your own plugins) and why the APP_KEY matters.

Tidemark Billing does not include a backup tool, so you back up the pieces yourself. This article lists what holds your data. Test a restore before you rely on any backup.

What to back up#

What Why
The database Clients, invoices, services, settings and tickets.
.env Database login, mail defaults and the APP_KEY.
The storage/ folder Ticket attachments, knowledge base images, logs and installed font packs.
Plugins you added yourself Folders you put in plugins/ or BILLING_EXTRA_PLUGINS_PATH.

The database#

  • SQLite: copy database/database.sqlite. Copy it while no one is using the system, or use a dump tool you trust.
  • MySQL / MariaDB or PostgreSQL: use your host's backup tool, or mysqldump or pg_dump.

The APP_KEY#

The APP_KEY in .env encrypts secret values saved in settings (for example the SMTP password) and department IMAP passwords. If you restore a database without the matching .env, those secrets cannot be read and you would have to enter them again. Always keep .env with the database backup, and store backups somewhere private.

Storage#

Uploaded files live under storage/app/private. That includes ticket attachments (tickets/) and knowledge base images (kb/). Do not skip this folder if you use support tickets or the knowledge base.

Docker#

Everything that changes is in the /data volume: .env, database.sqlite, storage/ and plugins/. Back up the whole volume. For example, with the compose volume name from the project's file:

docker run --rm -v billing-data:/data -v "$PWD":/backup alpine tar czf /backup/billing-data.tgz -C /data .

Docker Compose may prefix the volume name with your project name, so check docker volume ls for the exact name. If you use docker-compose.mysql.yml, also back up the MariaDB data, for example with mysqldump, because the database is in the separate db-data volume.

Restoring#

  1. Install the same version of Tidemark Billing, or a newer one.
  2. Put your .env and storage/ back, then restore the database.
  3. Run php artisan migrate --force if you restored onto a newer version. In Docker this happens on start.
Was this article helpful?
Last updated 10 Nov 2026
Powered by Tidemark Billing