S3 storages
The panel doesn't keep game server backups, panel backups or map and mod files itself — it puts them in S3-compatible storage: AWS S3, Backblaze B2, Cloudflare R2, your own MinIO and so on. Storages are set up on Modules → Backups and S3 storages → S3 storages.
Until there's at least one storage, backups and add-on uploads aren't available.
Add a storage
First create a bucket and an access key for it with your provider. Then click Add storage in the panel:
- Endpoint — the provider's S3 API address, e.g.
https://s3.eu-central-003.backblazeb2.com. Empty — real AWS S3. - Region — the bucket's region, e.g.
eu-central-1. - Bucket — the bucket name.
- Name — how the storage is labeled in the panel. Empty — the bucket name.
- Path-style addressing — turn on for MinIO and providers that need
endpoint/bucketaddresses. - Access Key ID and Secret Access Key — the access keys. Empty — the standard AWS chain (environment variables, instance role).
- Signed URL TTL, sec — how long upload and download links live. 15 minutes by default.
- Set as default storage — the first storage added becomes the default by itself.
Changes apply at once, without restarting the panel.
Backup files travel straight between the node and the bucket over signed links, not through the panel. So the endpoint must be reachable from the panel and from every node.
Where new files go
- Default storage — new backups and add-on files go here unless set otherwise below.
- Addon storage (the Where new addon files go block) — a separate storage for uploads, bulk import, Modrinth and users' files. Handy when add-ons need other retention rules or a CDN.
- Where new backups go — a storage of its own for a location or node, e.g. MinIO in the same data center to avoid cross-region traffic. A node's assignment beats its location's; with no assignments the default storage is used.
Every backup and add-on file remembers which storage it's in and is always read from there. So changing the default storage or assignments breaks nothing: what's stored stays put, and new files go to the new storage.
Add-on uploads from the browser (CORS)
The admin panel uploads add-on files from the browser straight into the bucket, bypassing the panel — that's how large archives get through. For this the bucket must allow uploads from the panel's address: pick Allow browser uploads (CORS) in the storage's menu. The panel adds the rule it needs without touching the others.
MinIO allows uploads from any address on its own. If the provider doesn't let CORS be set over the API, set it in the provider's console. Without CORS uploads still work: the admin panel sends the file through the panel, just slower.
Rotate keys or move
Keys, region, TTL and name can be changed at any time, e.g. to rotate keys.
The Endpoint and Bucket of a storage that already holds something can't be changed — the panel would lose the stored objects. To move to another bucket:
- Add a new storage and make it the default (and the addon storage, if that was separate).
- Move the location and node assignments to the new storage.
- New backups and files go there. Keep the old storage while it still holds backups you need.
Delete a storage
Only an empty storage with no location or node assignments can be deleted. Otherwise the menu item reads Delete (free it first): delete old backups or let new ones push them out, and remove the assignments.
Built-in MinIO
With no S3 of your own, the panel can run MinIO on the same server. It's handy to get started and for testing, but external storage is better in production: the built-in MinIO speaks plain HTTP without TLS and lives on the same machine as the panel.
- In
/opt/game-panel/.envaddminiotoCOMPOSE_PROFILESand rundocker compose up -d. - Create a bucket:
cd /opt/game-panel docker compose exec minio sh -c 'mc alias set local http://localhost:9000 "$MINIO_ROOT_USER" "$MINIO_ROOT_PASSWORD" && mc mb local/panel'
- Add the storage in the panel: Endpoint
http://<panel domain>:9000, Bucketpanel, Path-style addressing on, keys —MINIO_ROOT_USER(panelby default) andMINIO_ROOT_PASSWORDfrom.env. - Open port 9000/tcp on the panel server for the nodes.
See also Server backups, Backups and Maps and mods.