Zálohy serverů v Pterodactylu – lokálně i do S3
Jak fungují zálohy v Pterodactylu, nastavení limitů, plánované zálohy, soubor .pteroignore, ukládání do S3 kompatibilního úložiště a záloha samotného Panelu.
Pterodactyl má vestavěný systém záloh: uživatel klikne na Create Backup a Wings zabalí soubory serveru do archivu. Kam se archiv uloží, jak často vzniká a co obsahuje, je ale potřeba nastavit. A pozor – zálohy serverů nezálohují samotný Panel.
Limit záloh na server
Ve výchozím stavu má server limit záloh 0, takže tlačítko pro zálohu nefunguje. V administraci otevřete server → Build Configuration → Backup Limit a nastavte počet (např. 3). Při vytváření nového serveru je pole přímo ve formuláři.
Když uživatel dosáhne limitu, musí starou zálohu smazat. Plánovač umí nejstarší zálohu odstranit automaticky (viz níže).
Lokální zálohy (driver wings)
Výchozí driver je wings. Archivy se ukládají na node do adresáře z config.yml:
system:
backup_directory: /var/lib/pterodactyl/backups
Výhoda: nic dalšího nenastavujete. Nevýhoda: záloha leží na stejném disku jako server. Při selhání disku nebo ztrátě VPS přijdete o obojí. Pro produkci je lepší S3.
Zálohy do S3
Pterodactyl umí ukládat zálohy do Amazon S3 nebo kompatibilního úložiště (MinIO, Backblaze B2 S3 API, Wasabi, Cloudflare R2 a další). Nastavení je v /var/www/pterodactyl/.env:
APP_BACKUP_DRIVER=s3
AWS_DEFAULT_REGION=eu-central-1
AWS_ACCESS_KEY_ID=VAS_KLIC
AWS_SECRET_ACCESS_KEY=VAS_TAJNY_KLIC
AWS_BACKUPS_BUCKET=ptero-backups
AWS_ENDPOINT=https://s3.eu-central-1.example.com
U MinIO a některých dalších poskytovatelů je potřeba path-style adresování:
AWS_USE_PATH_STYLE_ENDPOINT=true
Po změně:
cd /var/www/pterodactyl
php artisan config:clear
php artisan queue:restart
Jak to funguje: Panel vygeneruje pro Wings dočasné podepsané URL a Wings nahraje archiv přímo do bucketu. Node tedy musí mít přístup k endpointu S3, přístupové klíče ale zůstávají jen na Panelu.
Doporučení:
- Vytvořte pro Pterodactyl samostatný bucket a klíč s oprávněním jen k němu.
- Bucket nesmí být veřejný.
- Zvažte lifecycle pravidlo, které maže objekty starší než N dní, jako pojistku proti zapomenutým zálohám.
Přepnutí driveru se týká nových záloh. Staré lokální zálohy zůstanou na nodu.
Co do zálohy nepatří – .pteroignore
V kořenovém adresáři serveru můžete vytvořit soubor .pteroignore. Syntaxe je podobná .gitignore:
# logy a cache nepotřebujeme
logs/
cache/
*.log
# dynmap dlaždice se dají vygenerovat znovu
plugins/dynmap/web/tiles/
U Minecraft serverů s mapovými pluginy to umí zmenšit zálohu na zlomek. Zkontrolujte ale, že nevylučujete něco, co skutečně potřebujete – například world/.
Plánované zálohy
V uživatelském rozhraní serveru otevřete Schedules a vytvořte plán:
- Create Schedule – zadejte cron hodnoty (minute, hour, day of month, month, day of week), např. každý den ve 4:00:
0,4,*,*,*. - Přidejte úlohy (New Task):
- volitelně Send command
say Záloha za 1 minutu, - Create backup s časovým posunem (Time offset) 60 sekund.
Když je limit záloh plný, plánovaná záloha v aktuálních verzích 1.x odstraní nejstarší nezamčenou zálohu. Zálohy, které si chcete ponechat natrvalo, proto zamkněte (u zálohy volba Lock) – ty se automaticky nemažou. Pokud jsou zamčené všechny, plánovaná záloha selže.
Plánovač pro svůj běh potřebuje cron s schedule:run a běžící pteroq. Pokud plány neběží, zkontrolujte nejdřív tyto dvě věci.
U Minecraftu je bezpečnější před zálohou poslat save-all a po ní nic neřešit – zálohování za běhu funguje, ale soubor světa zapisovaný přesně v okamžiku archivace může být nekonzistentní. Spolehlivější je záloha v době s minimem hráčů.
Obnovení zálohy
U zálohy klikněte na tři tečky → Restore. Můžete zvolit, zda před obnovou smazat všechny současné soubory. Server se během obnovy zastaví. Zálohu lze také stáhnout (Download) a prohlédnout lokálně.
Doporučení: obnovu jednou nanečisto vyzkoušejte na testovacím serveru. Záloha, kterou jste nikdy neobnovili, je jen předpoklad.
Záloha samotného Panelu
Zálohy serverů neobsahují konfiguraci Panelu. Pro obnovu Panelu potřebujete:
- databázi
panel, - soubor
/var/www/pterodactyl/.env(hlavněAPP_KEY), - případně vlastní úpravy (motivy, eggy).
Jednoduchý noční skript:
#!/bin/bash
set -euo pipefail
DEST=/root/ptero-panel-backup
mkdir -p "$DEST"
mysqldump --single-transaction panel | gzip > "$DEST/panel-$(date +%F).sql.gz"
cp /var/www/pterodactyl/.env "$DEST/env-$(date +%F)"
find "$DEST" -type f -mtime +14 -delete
Uložte jako /usr/local/bin/ptero-panel-backup.sh, nastavte chmod 700 a přidejte do crontabu roota:
30 3 * * * /usr/local/bin/ptero-panel-backup.sh
Výsledek pak synchronizujte mimo server (rclone, restic, borg). Záloha uložená jen na stejném serveru vás při jeho ztrátě nezachrání.