# Provoz (https://docs.vitrinka.ai/cs/operator/operations)



## Upgrade [#upgrade]

Nejdřív zazálohujte `/data`, pak ukažte na nový tag a spusťte. Migrace proběhnou při startu.

```bash
# uprav .env: VITRINKA_VERSION=vX.Y.Z
docker compose up -d
```

Při startu server povýší každou databázi workspace, která zaostává za schématem, po `VITRINKA_MIGRATE_WORKERS` najednou (výchozí min(8, CPUs)). `/readyz` odpovídá 503 s průběhem, dokud to neskončí, zatímco `/healthz` zůstává nahoře, takže kontrolu připravenosti v proxy nasměrujte na `/readyz`.

* **Žádné tvrdé zarážky** — každé vydání migruje z libovolného předchozího, takže můžete verze přeskakovat.
* **Dodané soubory neupravujete** — poznámky k vydání můžou přidat **volitelné** klíče do `.env`; nic z toho, co dostanete, není určené k úpravám.
* **Server před klienty** — nasaďte server dřív, než rozešlete klienty volající nové endpointy.

## Zálohy [#backup]

`/data` — volume `vitrinka-data` — nese SQLite databáze a, pokud nepoužíváte S3, i blob soubory. Zálohujte podle svého běžného plánu a **před každým upgradem**.

```bash
docker compose stop vitrinka
docker compose run --rm --no-deps --entrypoint sh -v "$PWD:/backup" vitrinka \
  -c 'cd /data && tar czf /backup/vitrinka-data-$(date +%F).tgz .'
docker compose start vitrinka
```

<Callout type="warn">
  Spusťte to **přes compose**, jak je výše. Holé `docker run -v vitrinka-data:…` připojí jiný, nesouvisející globální volume než ten, který aplikace opravdu používá — zálohovali byste nic.
</Callout>

## Licence není v /data [#license-location]

Leží v adresáři `./license/` v balíku, připojeném do kontejneru jen pro čtení. Zálohujte `/data` kvůli datům a uchovejte adresář balíku kvůli licenci — jsou to dvě různé věci k zachování.

## Air-gapped instalace [#airgap]

Balík obsahuje `image.tar`, `LOAD-AIRGAP.md` a binárky CLI. Nahrajte image do interního registru nebo rovnou do Dockeru, nasměrujte na něj `VITRINKA_IMAGE` a nastavte `AIR_GAP=1`, čímž vymažete každé napojení, které by sahalo na veřejný internet — e-mailového poskytovatele, Telegram, GitHub, AI kanál i AI backend (`EVE_*`, `AI_BACKEND_*`), spravovanou AI, Plane, Stripe, web push, Sentry, export traces přes OTLP, kontrolu úniků i náhledy odkazových karet — zatímco S3, SMTP, capture a přepisový sidecar i listener metrik dál fungují proti vaší vlastní síti. Tracker, AI backend workspace nebo AI endpoint organizace do ní dosáhne, až když ho uloží pravomoc nad instalací ([Odchozí cíle](/cs/operator/connectors#outbound)); stejně tak připojení SSO, a to jen uvnitř rozsahů, které vyjmenuje `VITRINKA_SSO_PRIVATE_NETWORKS` ([poskytovatel identity ve vaší vlastní síti](/cs/operator/sso#private)). MCP klienti se registrují na `POST /oauth/register`, protože se nestahuje žádný dokument metadat client ID. Když je Stripe vymazaný, tarify se měří, jen když je nastavené `VITRINKA_METERED=1`. Server nikdy nevolá domů kvůli verzi: kontrola aktualizací žije v CLI a `VITRINKA_RELEASE_FEED` níže ji nasměruje na váš mirror.

```bash
shasum -a 256 -c SHA256SUMS    # nejdřív ověřte balík
```

## CLI bez registru [#cli-offline]

Balík nese i CLI — šest statických binárek, jednu na platformu, plus `cli/latest.json`. Pracovní stanice ho potřebují na pořizování sad a obsluhu fronty, a `npm install -g` předpokládá registr, který ve vaší síti být nemusí.

<Callout type="warn">
  Nasměrujte `$VITRINKA_RELEASE_FEED` na vlastní interní mirror a `vitrinka update` bude fungovat i offline. Instrukce a cestu pro PowerShell nese `cli/README.md` v balíku.
</Callout>

## Operátorské příkazy [#verbs]

Serverová binárka nese údržbové příkazy. Každý destruktivní je zprávou nanečisto, dokud nepředáte `-execute`. `shred-workspace` odmítne provést změnu bez `-server-stopped` a `reconcile-storage` bez `-offline`. Pro `rewrap-deks` server také zastavte, protože to sám nekontroluje. `seal-existing` je stavěný na běh vedle živého serveru (`-batch`, `-pace`), a stejně tak `platform-admin`.

| Příkaz                                                                                       | Co dělá                                                                                                                                | Podrobnosti                                           |
| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| `vitrinka backup -data /data -out <file>.vtbk`                                               | Konzistentní kopie každé databáze, zapečetěné do jednoho archivu; bloby vynechané.                                                     | [Zálohy](/cs/security/backups#archive)                |
| `vitrinka restore-backup -in <file>.vtbk -out <empty dir>`                                   | Odpečetí archiv do prázdného adresáře, nikdy přes živý `DATA_DIR`.                                                                     | [Zálohy](/cs/security/backups#restore)                |
| `vitrinka seal-existing -data /data [-execute \| -verify]`                                   | Zapečetí starší řádky a objekty v prostém textu na místě; `-verify` je brána před přísným režimem.                                     | [Šifrování](/cs/security/encryption#strict)           |
| `vitrinka rewrap-deks -data /data -old-kek … -new-kek … [-execute]`                          | Rotuje klíč instalace přebalením klíče každého workspace; dat se nedotkne.                                                             | [Šifrování](/cs/security/encryption#rotate)           |
| `vitrinka shred-workspace -data /data <workspace> -server-stopped [-execute]`                | Zničí datový klíč workspace a označí ho náhrobkem.                                                                                     | [Uchovávání a mazání](/cs/security/retention#shred)   |
| `vitrinka inventory -data /data -out <manifest>`                                             | Sčítání každého odkazovaného blobu jen pro čtení proti jednomu výpisu úložiště; vypíše očištěné shrnutí.                               | Předchází `migrate-blobs`.                            |
| `vitrinka migrate-blobs -data /data -manifest <manifest> [-execute]`                         | Přesun starších objektů do prefixů jejich workspaců jen kopírováním; zdroj nikdy nemaže.                                               | Idempotentní; po částečném selhání spusťte znovu.     |
| `vitrinka reconcile-storage -data /data -workspace <ws> -backend fs\|s3 [-execute -offline]` | Přepočítá evidenci úložiště workspace po ruční offline údržbě a předtím udělá zapečetěnou zálohu.                                      | Spusťte před restartem zapisujících procesů.          |
| `vitrinka audit-export-key -data /data`                                                      | Vypíše veřejný klíč, který podepisuje dávky exportu auditu.                                                                            | [Export auditu](/cs/security/encryption#audit-export) |
| `vitrinka audit-verify -data /data` (nebo `-dir <dir> -key <key>`)                           | Ověří každý hashový článek i podpis exportu a u prvního přerušeného článku skončí nenulovým kódem.                                     | [Export auditu](/cs/security/encryption#audit-export) |
| `vitrinka platform-admin grant <email>` · `revoke <email>` · `list`                          | Otevře nebo zavře administrátorskou konzoli účtu, který se už jednou přihlásil; platí od jeho dalšího požadavku a zapíše se do auditu. | [První administrátor](/cs/operator/install#admin)     |
| `vitrinka smtp-test -to <you@example.com>`                                                   | Pošle jeden testovací e-mail přes relay `SMTP_*` bez startu serveru.                                                                   | [Pošta](/cs/operator/mail#check)                      |
| `vitrinka license-inspect <file>`                                                            | Rozparsuje a ověří licenční soubor bez startu serveru.                                                                                 | [Licence](/cs/security/licensing#install)             |
| `vitrinka healthcheck`                                                                       | Kontrola zdraví kontejneru, kterou spouští compose.                                                                                    |                                                       |

Spouštějte je přes compose, aby viděly stejný `/data`, klíče a backend blobů jako server:

```bash
docker compose stop vitrinka
docker compose run --rm --no-deps -v "$PWD/backups:/backups" vitrinka backup -data /data -out /backups/vitrinka-$(date +%F).vtbk
docker compose start vitrinka
```

<Callout type="warn">
  `backup` odmítne `-out` uvnitř `DATA_DIR`. Zapečetěné bezpečnostní snímky, které údržbové příkazy pořizují, než přepíšou data — třeba `reconcile-storage -execute` — míří do `VITRINKA_BACKUP_DIR`, výchozí `<DATA_DIR>-backups`. Uvnitř kontejneru tato sousední cesta na volume neleží, proto připojte adresář a nasměrujte na něj proměnnou; cesta uvnitř `DATA_DIR` je odmítnutá.
</Callout>

## Administrátorská konzole [#admin-console]

`/admin` je platformní konzole. Každému, kdo není platform admin, odpoví 404; příznak udělíte přes `platform-admin` ([první administrátor](/cs/operator/install#admin)).

* **Statistiky** — účty, workspaces, organizace podle tarifu a čekající položky čekací listiny.
* **Workspaces** — hledání podle slugu nebo názvu. Výběr nastavuje uložený tarif organizace, které workspace patří. Dokud se tarify neměří, ukazuje každý řádek i tarif Enterprise, na kterém organizace běží, a poznámka říká, že uložený tarif začne platit, jakmile se měření zapne — tarify tak můžete připravit dřív, než nastavíte `VITRINKA_METERED=1`. Pozastavení workspace — pozastavený neobslouží nic, dokud ho neobnovíte — a kontrola AI plateb, kde se schodek spravované AI dá uzavřít bez účtování, s písemným důvodem.
* **Uživatelé** — hledání podle e-mailu nebo jména; platform admini nesou ★.
* **Čekací listina** — při `VITRINKA_WAITLIST=1` sem přistane každá nová adresa, která se pokusí přihlásit. Schvalte ji a její další přihlášení účet vytvoří; adresa s čekající pozvánkou schválení nepotřebuje.

Změna tarifu se v auditu zapíše jako `org.plan`, pozastavení jako `workspace.suspend`.

## Licencování [#licensing]

Vložte podepsaný `license.json` do `./license/`; compose ho připojí jen pro čtení na `/run/license`, kde ho server hledá. Jak ho server ověřuje, co udělá se souborem, který nemůže použít, co expirace pozastaví a jak funguje obnova, najdete na [Licence](/cs/security/licensing).
