Vzhled
Hosting a nasazení
Tato příručka provede správce platformy přípravou serveru, konfigurací služeb a nasazením systému Než zazvoní CMS. Dozvíte se, jaké technické parametry musí splňovat hosting, jak nastavit proměnné prostředí a jak zprovoznit zabezpečení domén certifikáty TLS.
Dokument je určen pro správce platformy se znalostí správy Linuxu, nástrojů Docker a Docker Compose.
Požadavky na server
Platforma běží na samostatném virtuálním serveru (VPS) v datacentru v rámci Evropské unie (například Hetzner Cloud v Německu či Finsku). Umístění v EU zajišťuje soulad s legislativou a nařízením GDPR.
| Oblast | Minimální požadavky | Doporučená konfigurace |
|---|---|---|
| Operační systém | Linux (Debian 12 nebo Ubuntu 24.04 LTS) | Debian 12 x86_64 |
| Operační paměť | 4 GB RAM (překlad administrace vyžaduje kolem 3 GB RAM) | 4 až 8 GB RAM s odkládacím prostorem (swap 2 GB) |
| Procesor | 2 vCPU | 2 až 4 vCPU |
| Úložiště | 40 GB SSD nebo NVMe | 80 GB NVMe SSD |
| Docker | Docker Engine a compose plugin ≥ 2.24 | Aktuální stabilní verze |
Samostatný virtuální server
Neinstalujte systém na server, kde běží jiné aplikace. Platforma vyžaduje výhradní kontrolu nad porty 80 a 443 pro reverzní proxy Caddy a správu certifikátů.
Nastavení sítě a firewallu
Na serveru povolte pouze tyto porty:
- Port 22 (SSH): Přístup správce přes SSH klíč. Přihlašování heslem i přímé přihlášení uživatele root zakažte.
- Port 80 (HTTP): Ověřování domén protokolem ACME a přesměrování na šifrované HTTPS.
- Port 443 (HTTPS a HTTP/3 UDP): Šifrovaný přístup k webům i administraci.
Ostatní porty zůstávají uzavřené. Databáze PostgreSQL (port 5432) ani Strapi (port 1337) nesmí být přístupné z internetu.
Příprava DNS záznamů
Před spuštěním služeb nastavte DNS záznamy:
- Administrace CMS: A záznam pro doménu administrace (například
cms.vasedomena.cz) na IP adresu serveru. - Domény škol: Pro každou školu A záznam pro doménu i subdoménu
www(napříkladoapv.czawww.oapv.cz). - Základní doména: Pro školy na subdoménách nastavte wildcard A záznam tvaru
*.weby.vasedomena.cz.
Konfigurace služeb v Docker Compose
Provoz na serveru řídí dva konfigurační soubory:
docker-compose.yml: Definuje základní službydb,cmsawebvčetně limitů zdrojů a síťového propojení.docker-compose.prod.yml: Produkční rozšíření nahrazující lokální směrování služboucaddy.
Limity zdrojů jednotlivých služeb:
- Databáze (
db): Obrazpostgres:16-alpine, limit 1 GB RAM a 1.0 CPU, svazekpgdata. - Administrace (
cms): Sestavení z./cms, limit 2 GB RAM a 2.0 CPU, svazekuploads. - Webový frontend (
web): Sestavení z./web, limit 1 GB RAM a 1.0 CPU. - Reverzní proxy (
caddy): Obrazcaddy:2.10.2-alpine, porty 80 a 443.
Proměnné prostředí (.env)
Konfigurační volby a tajné klíče se načítají ze souboru .env v kořenovém adresáři. Soubor neukládejte do gitu a nastavte mu práva chmod 600.
Tajné hodnoty vygenerujte příkazem openssl rand -base64 32 a uložte je do správce hesel Passbolt.
Přehled proměnných
| Proměnná | K čemu slouží | Příklad nebo hodnota |
|---|---|---|
POSTGRES_PASSWORD | Heslo k databázi PostgreSQL | Náhodný řetězec |
APP_KEYS | Klíče relací ve Strapi | Čtyři klíče oddělené čárkou |
API_TOKEN_SALT | Sůl pro API tokeny | Náhodný řetězec |
ADMIN_JWT_SECRET | Tajný klíč pro JWT tokeny | Náhodný řetězec |
TRANSFER_TOKEN_SALT | Sůl pro datové přenosy | Náhodný řetězec |
ENCRYPTION_KEY | Šifrovací klíč aplikace | Náhodný řetězec |
CMS_HOST | Doména administrace | cms.vasedomena.cz |
CMS_PUBLIC_URL | Veřejná URL administrace | https://cms.vasedomena.cz |
SITE_BASE_DOMAIN | Základní doména pro subdomény | weby.vasedomena.cz |
DEFAULT_SCHOOL_SLUG | Výchozí škola pro interní volání | Na produkci prázdné |
SITE_HOSTS | Seznam domén pro Caddy | oapv.cz www.oapv.cz demo.vasedomena.cz |
ACME_EMAIL | E-mail pro Let's Encrypt | spravce@vasedomena.cz |
SITE_NOINDEX | Zákaz indexace pro test | Pro produkci prázdné, pro test 1 |
ADMIN_EMAIL | E-mail prvního superadministrátora | Jen při startu bez databáze |
ADMIN_PASSWORD | Heslo prvního superadministrátora | Po prvním startu ihned smažte |
Postup nasazení krok za krokem
Při nasazení na nový server postupujte podle těchto kroků:
- Příprava adresáře: Na VPS vytvořte adresář
/opt/webyskol. - Přenos zdrojových kódů: Přeneste kód nástrojem
rsyncbez dočasných souborů:shrsync -az --exclude node_modules --exclude .next --exclude data --exclude .env --exclude dist ./ <vps>:/opt/webyskol/ - Příprava konfigurace: Vytvořte soubor
/opt/webyskol/.enva nastavte mu právachmod 600. - Spuštění databáze: Spusťte databázi pro inicializaci svazku:sh
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d db - Nahrání dat ze zálohy: Přeneste záložní adresář a spusťte obnovovací skript:shPři čisté instalaci vyplňte v
WEBYSKOL_PROD=1 ops/restore.sh ops/backups/<časové_razítko>.envproměnnéADMIN_EMAILaADMIN_PASSWORD. Docker Compose předá heslo jako secret. Po nastartování systému heslo z.envsmažte. - Sestavení a spuštění služeb: Spusťte kompletní sestavu příkazem:sh
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build - Kontrola funkčnosti po startu: Ověřte stav CMS dotazem na zdraví systému:shOvěřte hlavičky webu školy:
curl -I https://$CMS_HOST/_healthshSpusťte kontrolu odkazů:curl -I https://<domena-skoly>/shnode web/scripts/crawl.mjs --base https://<domena-skoly> --cms https://$CMS_HOST --school <slug>
V detailu nastavení školy se konfiguruje její doména, na kterou Caddy automaticky naváže zabezpečený certifikát.

Domény a správa SSL certifikátů
Správu šifrovacích certifikátů TLS zajišťuje reverzní proxy Caddy zcela automaticky:
- Caddy se při prvním požadavku spojí s autoritou Let's Encrypt (případně ZeroSSL), provede ověření přes HTTP na portu 80 a vystaví certifikát.
- Obnova certifikátů probíhá automaticky na pozadí před vypršením jejich platnosti.
- Všechny domény škol musí být vyjmenovány v proměnné
SITE_HOSTSv souboru.env. - Po přidání nové domény doplňte doménu do proměnné
SITE_HOSTSa restartujte Caddy:shdocker compose -f docker-compose.yml -f docker-compose.prod.yml up -d caddy
Budoucí přechod na on-demand TLS
Při větším počtu zapojených škol (desítky domén) je plánován přechod na Caddy on-demand TLS s autorizačním dotazem (ask endpoint), aby nebylo nutné udržovat ruční seznam domén v proměnné SITE_HOSTS.
Tipy a doporučení
Bezpečné ukládání klíčů
Nikdy neposílejte obsah souboru .env e-mailem. Pro sdílení hesel a produkčních klíčů v týmu používejte výhradně šifrovaný trezor Passbolt.
Kontrola po každé aktualizaci
Po každém sestavení nové verze spusťte testovací skript crawl.mjs. Nástroj projde celý strom stránek školy, ověří stavové kódy odkazů a prověří dostupnost obrázků v Knihovně médií.
Časté chyby
- Ponechání ADMIN_PASSWORD v souboru .env: Pokud heslo v souboru zůstane, hrozí jeho vyzrazení. Po prvním spuštění čisté instalace proměnnou ze souboru smažte.
- Chybějící proměnná WEBYSKOL_PROD=1: Při spouštění provozních skriptů na produkčním serveru (například
ops/backup.shneboops/restore.sh) vždy uveďteWEBYSKOL_PROD=1. Bez ní hledá Docker Compose lokální síť a příkaz selže. - Chybně otevřené porty ve firewallu: Publikování portu databáze 5432 nebo portu CMS 1337 do internetu představuje bezpečnostní riziko. Přístup k nim musí probíhat výhradně z interní sítě Dockeru.

