Skip to content

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.

OblastMinimální požadavkyDoporučená konfigurace
Operační systémLinux (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)
Procesor2 vCPU2 až 4 vCPU
Úložiště40 GB SSD nebo NVMe80 GB NVMe SSD
DockerDocker Engine a compose plugin ≥ 2.24Aktuá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:

  1. Administrace CMS: A záznam pro doménu administrace (například cms.vasedomena.cz) na IP adresu serveru.
  2. Domény škol: Pro každou školu A záznam pro doménu i subdoménu www (například oapv.cz a www.oapv.cz).
  3. 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žby db, cms a web včetně limitů zdrojů a síťového propojení.
  • docker-compose.prod.yml: Produkční rozšíření nahrazující lokální směrování službou caddy.

Limity zdrojů jednotlivých služeb:

  • Databáze (db): Obraz postgres:16-alpine, limit 1 GB RAM a 1.0 CPU, svazek pgdata.
  • Administrace (cms): Sestavení z ./cms, limit 2 GB RAM a 2.0 CPU, svazek uploads.
  • Webový frontend (web): Sestavení z ./web, limit 1 GB RAM a 1.0 CPU.
  • Reverzní proxy (caddy): Obraz caddy: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_PASSWORDHeslo k databázi PostgreSQLNáhodný řetězec
APP_KEYSKlíče relací ve StrapiČtyři klíče oddělené čárkou
API_TOKEN_SALTSůl pro API tokenyNáhodný řetězec
ADMIN_JWT_SECRETTajný klíč pro JWT tokenyNáhodný řetězec
TRANSFER_TOKEN_SALTSůl pro datové přenosyNáhodný řetězec
ENCRYPTION_KEYŠifrovací klíč aplikaceNáhodný řetězec
CMS_HOSTDoména administracecms.vasedomena.cz
CMS_PUBLIC_URLVeřejná URL administracehttps://cms.vasedomena.cz
SITE_BASE_DOMAINZákladní doména pro subdoményweby.vasedomena.cz
DEFAULT_SCHOOL_SLUGVýchozí škola pro interní voláníNa produkci prázdné
SITE_HOSTSSeznam domén pro Caddyoapv.cz www.oapv.cz demo.vasedomena.cz
ACME_EMAILE-mail pro Let's Encryptspravce@vasedomena.cz
SITE_NOINDEXZákaz indexace pro testPro produkci prázdné, pro test 1
ADMIN_EMAILE-mail prvního superadministrátoraJen při startu bez databáze
ADMIN_PASSWORDHeslo prvního superadministrátoraPo prvním startu ihned smažte

Postup nasazení krok za krokem ​

Při nasazení na nový server postupujte podle těchto kroků:

  1. Příprava adresáře: Na VPS vytvořte adresář /opt/webyskol.
  2. Přenos zdrojových kódů: Přeneste kód nástrojem rsync bez dočasných souborů:
    sh
    rsync -az --exclude node_modules --exclude .next --exclude data --exclude .env --exclude dist ./ <vps>:/opt/webyskol/
  3. Příprava konfigurace: Vytvořte soubor /opt/webyskol/.env a nastavte mu práva chmod 600.
  4. 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
  5. Nahrání dat ze zálohy: Přeneste záložní adresář a spusťte obnovovací skript:
    sh
    WEBYSKOL_PROD=1 ops/restore.sh ops/backups/<časové_razítko>
    Při čisté instalaci vyplňte v .env proměnné ADMIN_EMAIL a ADMIN_PASSWORD. Docker Compose předá heslo jako secret. Po nastartování systému heslo z .env smažte.
  6. 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
  7. Kontrola funkčnosti po startu: Ověřte stav CMS dotazem na zdraví systému:
    sh
    curl -I https://$CMS_HOST/_health
    Ověřte hlavičky webu školy:
    sh
    curl -I https://<domena-skoly>/
    Spusťte kontrolu odkazů:
    sh
    node 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.

Nastavení školy a její domény

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_HOSTS v souboru .env.
  • Po přidání nové domény doplňte doménu do proměnné SITE_HOSTS a restartujte Caddy:
    sh
    docker 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.sh nebo ops/restore.sh) vždy uveďte WEBYSKOL_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.

Související ​