# Aktualizace a pády: guard

> Poslední dobrý start uložený, co se od něj změnilo, doktor pádů, návrat jedním příkazem, ochrana proti smyčce pádů a – když je zapneš – pack, který se sám aktualizuje z CurseForge, a zašifrované zálohy mimo stroj. Novinka v 0.3.

Source: https://stygion.eu/cs/docs/keystone/guard
Updated: 2026-10-25

Novinka v 0.3, modul `guard`, **ve výchozím stavu zapnutý**: jen hlídá a drží poslední dobrý start. Co server mění samo – aktualizace packu (`update.*`) a zálohy mimo stroj (`offsite.*`) – je vypnuté, dokud to nezapneš. Aktualizovat bez strachu.

## Poslední dobrý start

Každý start, který vydrží `good-after` (10 minut), se uloží jako poslední dobrý: jary modů jako pevné odkazy, konfigurační soubory jako kopie. Další start, který se liší, řekne, co se změnilo: aktualizované, přidané a odebrané mody, **co odebraný mod vezme ze světa** (jeho bloky, itemy a entity), konfigurační soubory, které se liší, a – to stojí za přečtení dvakrát – jar, jehož bajty se změnily a verze ne, nebo jar, který nevydává CurseForge ani Modrinth (`check-portals`; stroj opouští jen hashe jarů; klíč CurseForge v `curseforge-key`). Označený jar se nikdy neodstraní.

**Doktor pádů** čte crash reporty hry a řekne příčinu a mody, na které ukazuje, v editoru (*Updates & crashes*) i na Discordu.

## Návrat a smyčka pádů

- `/keystone guard rollback confirm` (nebo jedno tlačítko v editoru) vrátí poslední dobrý start, **až se server příště zastaví**; co nahradí, se odloží stranou, nikdy nesmaže. `/keystone guard cancel` čekající návrat nebo aktualizaci zruší (`keystone.guard.rollback`).
- Po `crash-limit` (3) startech po sobě, které spadnou, rozhodne `rollback`: `updates-only` (výchozí; vrátí jen aktualizaci, kterou nasadil Keystone, dřív než další start otevře svět), `always` (jakoukoli změnu od posledního dobrého startu) nebo `never`. Když se nic nevrací, server naběhne **zavřený kvůli údržbě**, ať se stejný pád neopakuje; `/keystone guard release` ho otevře.

## Pack, který se aktualizuje sám (`update.*`, ve výchozím stavu vypnuto)

`update.enabled` s `update.project` (id projektu na CurseForge): každých `update.check-every` (1 h) se zeptá CurseForge; nový server pack stáhne mimo vlákno serveru z vlastních serverů CurseForge (do `update.max-mib`), ověří jeho SHA-1, připraví ho se zachováním tvých modů navíc a tvých změn v configu (`update.overwrite` jmenuje soubory packu, které ty tvoje přepíšou, výchozí `config/ftbquests/quests/**`), zazálohuje a vymění při restartu – `update.apply`: `empty` (poprvé, když nikdo není online `update.empty-for`, 3 min), `daily` (s příštím plánovaným restartem) nebo `manual` (`/keystone guard update apply`). `/keystone guard update check` se zeptá hned.

## Zálohy mimo stroj (`offsite.*`, ve výchozím stavu vypnuto)

`offsite.after-backup` pošle každou novou zálohu zašifrovanou heslem `offsite.passphrase` (AES-256-GCM, klíč přes PBKDF2, aspoň 12 znaků – drž ho jinde než na tomhle serveru) do S3 kompatibilního bucketu (`offsite.s3.*`: AWS, Cloudflare R2, Backblaze B2, Wasabi, MinIO, Hetzner) a/nebo přes SFTP (`offsite.sftp.*`, s otiskem klíče stroje). `offsite.keep` (7) na každém místě. **Cvičná obnova** (`offsite.drill = verify`, každých `offsite.drill-every`, 7 dní) stáhne nejnovější zálohu mimo stroj, otevře ji a přečte level.dat a každý region soubor; `/keystone guard offsite drill` ji spustí hned.

## API

`GET /v1/guard` (`status.read`); `GET /v1/guard/detail`, `POST /v1/guard/rollback`, `/update` a `/drill` (`backup.restore`, jen majitel).
