Backups

There are three different things to keep safe, and each is backed up its own way.

1. Installation secrets

/opt/game-panel/.env and /opt/game-panel/certs/. They hold the database password, the encryption keys for game settings, the node certificate authority and the NATS keys. They are not in any panel backup.

Copy them off the server after installing and after every change of keys:

sudo tar czf game-panel-secrets.tar.gz -C /opt/game-panel .env certs

Without them a restored database can't decrypt game secrets, and the nodes don't trust a new certificate authority — every node would have to be connected again.

2. Panel backup

The panel's own data: users, API keys, the game catalog, plans, game servers, S3 storages, webhooks, the audit log, the logo. Managed in System → Panel backup.

  • Schedule — once a day at a chosen hour; the last N automatic backups are kept.
  • Where — in an S3 storage configured in the panel. Without S3, use Download as file.
  • Backup password — set it on the same page (at least 12 characters, can be generated). Without it the archive isn't encrypted and contains password hashes, S3 keys and webhook secrets.

Besides that, every update writes a backup to /opt/game-panel/backups/ on the server itself.

Restore

From a backup in S3 or from a file, on the same page. The archive must come from the same panel version and the same encryption keys — otherwise the panel refuses with the reasons and doesn't change anything. Before restoring, a safety backup is taken; the data is replaced in one transaction.

After restoring, restart the panel (docker compose restart master) and sign in again. Game servers on the nodes keep running; the panel reconciles them with the restored data.

3. Game server backups

Backups of customers' servers go to S3 storages and are managed per server and by schedules in the panel. The objects stay in the buckets — back up the buckets themselves with your S3 provider's tools if you need a second copy. See Server backups and S3 storages.

Move the panel to a new server

  1. Take a fresh panel backup as a file (Download as file) and stop the old panel.
  2. On the new server copy your saved .env and certs/ into /opt/game-panel, then run the installer of the same version as the old panel — it keeps existing secrets. If the domain still points to the old server, the installer warns; answer “yes”. Don't open the setup link.
  3. Restore the backup from the command line:
cd /opt/game-panel
docker compose stop master
docker compose run --rm -T --no-deps -e PANEL_BACKUP_PASSPHRASE='<backup password>' \
  master panel-backup import - < panel-backup.tar.gz.age
docker compose up -d
  1. Point the domain to the new server. Let's Encrypt issues the certificate once DNS has updated.

The nodes reconnect on their own: the certificate authority and the domain are the same. The restored panel keeps its installation ID, so the license keeps renewing. For an unencrypted backup, leave out -e PANEL_BACKUP_PASSPHRASE=….

Alternatively stop the stack and copy the whole /opt/game-panel together with the Docker volumes.