# Instalace na vlastní server

draften můžete provozovat na vlastním serveru. Pošta, koncepty i klíče pak
zůstávají u vás; ven jde jen to, co pošlete poskytovateli jazykového modelu
(nebo nic, když použijete lokální model).

Tahle stránka je přehled. **Podrobný a vždy aktuální postup je v souboru
`README.md` v repozitáři draftenu** — řiďte se jím; tady je jen to, co je
dobré vědět předem.

## Z čeho se instalace skládá

Všechno běží v Dockeru přes `docker compose`:

| Služba | Co dělá |
|---|---|
| `db` | databáze MariaDB — drží všechno: nastavení, pokyny, zprávy, koncepty, šifrovaná tajemství |
| `worker` | čte schránky, volá modely, píše koncepty, učí se, spouští kroky průvodce. Může jich běžet víc |
| `web` | webové rozhraní a API (Symfony na FrankenPHP) |
| `cloudflared` | volitelně: zveřejnění rozhraní přes Cloudflare Tunnel |

Rozhraní a worker spolu přímo nemluví — oba pracují se stejnou databází;
co potřebuje poštu nebo model, zařadí rozhraní do fronty úloh pro workera.

## Co budete potřebovat

- server s Dockerem (Docker Compose v2),
- **Node.js ani PHP na serveru nejsou potřeba** — vše je v obrazech,
- přístup ke schránkám: registraci aplikace v Microsoft Entra, servisní účet
  Google Workspace nebo údaje k IMAP,
- API klíč k modelu (Anthropic, OpenAI) nebo vlastní OpenAI-kompatibilní server,
- adresu, na které bude rozhraní dostupné, a u ní HTTPS.

Na Windows s Docker Desktopem ho mějte v automatickém spuštění a vypněte
*Resource Saver*.

## Nastavení v `.env`

Soubor `.env` (vzor je `.env.example`) drží jen infrastrukturu a tajemství.
Všechno o asistentech je v databázi a nastavuje se v rozhraní.

| Proměnná | K čemu |
|---|---|
| `DB_ROOT_PASSWORD`, `DB_PASSWORD` | hesla databáze |
| `MASTER_KEY` | klíč, kterým se šifrují tajemství v databázi (API klíče, přístupy ke schránkám, klienti). Vygenerujte `openssl rand -hex 32` a **uložte si kopii mimo server** — bez něj je záloha databáze nečitelná |
| `WEB_APP_SECRET` | náhodný řetězec pro podepisování relací |
| `WEB_PUBLIC_URL` | adresa, na které uživatelé rozhraní otevírají; z ní se skládají redirect URI |
| `CLOUDFLARE_TUNNEL_TOKEN` | jen s Cloudflare Tunnelem |
| `INTERVAL_SECONDS`, `WORKER_CONCURRENCY` | výchozí interval kontrol a počet souběžných kontrol (jdou měnit i v rozhraní) |
| `WORKER_REPLICAS` | kolik procesů `worker` běží na tomto stroji (výchozí 1), viz [Provoz a výkon](/admin/operations) |

## První spuštění

1. `docker compose up -d --build` — worker při startu sám provede migrace
   databáze a založí úvodní data.
2. **První přihlášení provozovatele**: dokud nemá heslo ani vazbu na Microsoft
   či Google, najdete v logu workera jednorázový odkaz
   (`docker compose logs worker | grep set-password`). Platí 7 dní a při každém
   startu se obnoví.
3. Na stránce **Instalace** nastavte výchozí API klíče a výchozí odesílání
   pošty (pro pozvánky).
4. Na stránce **Organizace** založte organizaci nebo pošlete pozvánku
   k založení — viz [Správa instalace](/admin/installation-admin).

## Zveřejnění

Nic na serveru nemusí poslouchat na internetu: Cloudflare Tunnel
(`docker compose --profile tunnel up -d`) vede veřejnou adresu na službu
`http://web:80`. Před adresu se hodí i Cloudflare Access jako druhá brána.
`WEB_PUBLIC_URL` nastavte na veřejnou adresu a přidejte ji jako redirect URI
u klientů Microsoft a Google.

## Dál

- [Správa instalace](/admin/installation-admin) — organizace, výchozí klíče
  a odesílatel,
- [Provoz a výkon](/admin/operations) — kolik workerů a jak to poznat,
- [Zálohy a obnova](/admin/backup-and-restore),
- [Aktualizace draftenu](/admin/updating),
- [Řešení potíží](/admin/troubleshooting).
