Obsah · Kapitola 10 · Server a platforma

Server a platforma

← Kapitola 10: Technické požadavky

PHP backend je lehký – rozhoduje volba webového serveru. Zabezpečení configu a kiosku: samostatná kapitola.

Platforma Vhodnost Poznámka
Windows + IIS + PHP Výchozí / ověřené Současné nasazení; nastavení serveru chrání konfigurační soubory
Linux + nginx + php-fpm Výborná pro produkci Stejný PHP kód; chraňte konfigurační soubory pravidlem serveru
Raspberry Pi 4 (4 GB) Ano, s rezervou PHP backend lehký; kiosk potřebuje plynulý Chromium a kvalitní USB audio
Raspberry Pi 5 Lepší volba na Pi Plynulejší animace (Rive), pohodlnější celodenní provoz

Detailní sestavy kiosku podle OS: hardware Windows / Linux / Pi.

MySQL (volitelná znalostní báze)

Katalog exponátů v MySQL vyžaduje dostupný MySQL/MariaDB server ze stejné sítě jako PHP (typicky localhost nebo interní host). Rozšíření PHP pdo_mysql musí být zapnuté – bez něj test připojení v adminu selže. Připojení, vytvoření tabulky a naplnění katalogu popisuje Znalostní báze exponátů. Bez MySQL kiosk funguje dál; chat jen nevyhledává váš vlastní seznam exponátů.

IIS + PHP: hromadný náhled generování AI textů v katalogu posílá data po jednom řádku (krátké JSON odpovědi), aby průběh byl vidět i když IIS přes CGI bufferuje dlouhé odpovědi. Pro běžný provoz kiosku to není překážka; detail v návodu – náhled generování.

Kontrolní seznam před spuštěním

Před otevřením exponátu veřejnosti projděte body níže na stejném hardware a v podobném hluku, jako bude v provozu. Většina problémů v terénu (mikrofon, ozvěna, síť) se v tiché kanceláři neprojeví. Pořadí odpovídá logice nasazení: nejdřív server, pak kiosk, nakonec zvuk a volitelná D-ID varianta.

Krok Co ověřit Kde / jak
1. Server "ready": true v diagnostice check v prohlížeči nebo z adminu
1b. Config Config 404 v prohlížeči (/config, cesta ve skryté složce); PHP jen čtení Vlastní název, ne ke stažení, kontrolní seznam
2. Kiosk Chrome/Edge, kiosk režim, HTTPS, mikrofon Hardware – autostart
3. Hlas a AI TTS v adminu + reálná otázka na exponátu Administrace → Hlas; základní nebo Rive URL
4. Hlasitost Slyšitelné z ~2 m, bez ozvěny do mic Mikrofon a zvuk
5. Barge-in V hluku vypnout, pokud mic „slyší“ TTS Administrace → Hlas → barge_in
6. D-ID (jen video varianta) Síť k api.d-id.com, výkon PC, plynulé video Varianty avatara, náklady D-ID

1. Diagnostika serveru – ready: true

Aplikace volá cloudová API (Gemini, OpenAI, případně D-ID). PHP server musí umět bezpečné HTTPS požadavky a číst konfiguraci. Vestavěná diagnostika je v souboru check v kořeni instalace – otevřete v prohlížeči na stejném hostu jako exponát, např. https://kiosk.vase-domena.cz/check. Síťový test odchozího HTTPS (bez API klíče): check?probe=1.

Očekávaná odpověď (JSON, zkrácená ukázka):

JSON check – ukázka

{
  "php_version_ok": true,
  "https": true,
  "pdo_mysql": true,
  "data_dir_writable": true,
  "ready": true,
  "config_storage_mode": "data",
  "config_active_pointer": "provoz-xx7/.ukazatel-cfg",
  "config_file_exists": true,
  "config_active_pointer_writable": true,
  "config_readable": true,
  "config_writable": false,
  "config": { "api_key_set": true, "test_mode": false },
  "mysql": { "connection_ok": true },
  "exhibit_ready": true,
  "warnings": []
}

Hlavní pole a co znamenají:

  • readyserver připraven (PHP 8.1+, cURL/fopen, OpenSSL, mbstring, config, SSL balíček). Neověřuje platnost API klíčů.
  • exhibit_ready – navíc klíč aktivního providera, vypnutý test_mode, změněné heslo admina.
  • warnings – textová upozornění (chybí klíč, HTTPS, MySQL, výchozí heslo…).
  • config_storage_mode – kde leží aktivní config: "data" (vlastní soubor ve skryté složce přes ukazatel) nebo "legacy" (výchozí config v kořeni). Diagnostika neuvádí skutečný název souboru. config_active_pointer – cesta k ukazateli aktivního souboru (fiktivní příklad: provoz-xx7/.ukazatel-cfg). config_file_exists – zda JSON na disku existuje. Viz vlastní název configu.
  • config – stav bez tajemství: api_key_set, provider, tier, mysql_enabled.
  • mysql – při nakonfigurované DB jen connection_ok a obecná zpráva (bez hostitele a názvu databáze).
  • https – zda je diagnostika přes HTTPS (důležité pro mikrofon na kiosku).
  • data_dir_writable – zápis statistik API do provozní složky.
  • network_probe – s ?probe=1: test odchozího HTTPS na Google a Gemini API.
  • ca_bundle, http_client_ok, config_readable – viz dřívější návod; při ca_bundle: false často connection_error – viz Hlášení a texty.

Platnost API klíčů (quota, billing) ověřte v administraci – Využití API, test hlasu. Viz Nastavení Gemini. check po nasazení chraňte – neukládá klíče, ale prozradí např. že chybí nebo je zapnutý test_mode.

2. Prohlížeč na kiosku – Chrome nebo Edge, celá obrazovka, mikrofon

Hlasový vstup (STT) běží v prohlížeči, ne na serveru. Firefox nemá spolehlivé české rozpoznávání – pro veřejný kiosk používejte Google Chrome nebo Microsoft Edge.

  • Kiosk režim – spouštění s --kiosk (ne jen F11). Po restartu PC musí exponát naběhnout sám; postup v Hardware – autostart a Doporučený provoz.
  • HTTPS – URL exponátu musí být https://… (nebo localhost při lokálním testu). Bez HTTPS prohlížeč na síťové adrese často zablokuje mikrofon – návštěvník klepne Start, ale systém „neslyší“ otázku.
  • Povolení mikrofonu – jednorázově povolte pro danou doménu (ikona zámku v liště při prvním testu). Nepoužívejte anonymní režim – povolení se neukládá. Při více kioscích lze nastavit firemní politiku Chrome/Edge.
  • Skrytí plochy Windows (volitelně) – taskkill explorer.exe v autostart bat souboru, aby návštěvník neviděl hlavní panel. Viz Bezpečnost – explorer.exe.

3. Test hlasu v administraci + reálná otázka na exponátu

Ověřte celý řetězec: server → AI → TTS → reproduktory → mikrofon → další otázka. Nestačí jen zelená diagnostika – musí fungovat i zvuk a rozpoznávání v provozním prostředí.

  1. Administrace → Hlas – tlačítko testu TTS (ukázková věta). Uslyšíte-li robotický nebo přerušovaný hlas, zkontrolujte tts_engine (cloud Gemini/OpenAI TTS je srozumitelnější než hlas prohlížeče – viz Mikrofon a zvuk).
  2. Exponát na kiosku – klepněte Start, položte krátkou otázku česky (nebo jazykem zvolené vlajky). Ověřte: rozpoznání → krátké „Přemýšlím…“ → slyšitelná odpověď. Zkuste to na URL varianty, kterou nasadíte: základní SVG (index) nebo Rive (rive) – obě sdílejí stejnou konfiguraci, liší se jen vizuál.
  3. Druhá otázka za sebou – ověří continuous_listen a případně barge-in. Pokud první odpověď ještě hraje a systém „přepíše“ sám sebe, řešte hlasitost nebo vypněte barge_in (bod 5).
  4. Vlajky jazyků – pokud očekáváte cizince, přepněte CS/EN/DE/PL/SK a jednu otázku zopakujte – viz Jazyk exponátu.

4. Hlasitost – slyšitelné z 2 m, bez řvání

Cíl: návštěvník u stánku (typicky 1,5–2 m od reproduktoru) pohodlně rozumí odpovědi, ale mikrofon nezachytává ozvěnu vlastního TTS ze zdi nebo skla.

  • Nastavte hlasitost ve Windows (nebo Linuxu) na střední úroveň – raději externí repro/soundbar než tenké repro v monitoru.
  • Mikrofon umístěte mimo přímou osu reproduktorů (30–80 cm od úst návštěvníka).
  • V hlučném vestibulu zvažte USB směrový mikrofon – vestavěný mic v monitoru v provozu často selže.
  • Pokud asistent po odpovědi „slyší sám sebe“ a rozpozná nesmysl, snižte hlasitost nebo přidejte absorpční panel za kiosk (textilie, ne skleněná komora).

Podrobné srovnání hardware a TTS: Mikrofon a zvuk, Doporučený provoz.

5. Hlučný prostor – barge_in (přerušení odpovědi mluvením)

Volba barge_in v administraci (sekce Hlas) umožní návštěvníkovi mluvit přes probíhající odpověď – jako u živého průvodce. Ve frontě u kiosku nebo v hlučné hale je to přirozené; v tichém muzeu může být rušivé.

  • Nechte zapnuto, pokud mikrofon kvalitní, hlasitost rozumná a návštěvníci často skáčou do řeči.
  • Vypněte, pokud mikrofon zachytává TTS z reproduktorů – systém pak „přeruší sám sebe“, STT rozpozná fragment odpovědi jako novou otázku a vznikne zacyklení. Typický příznak: exponát mluví, sám se přeruší a odpovídá na vlastní slova.
  • Při vypnutém barge-in čeká exponát, až domluví – pod stavem mikrofonu je text typu „Počkejte na konec odpovědi“ (překládá se s vlajkami). Viz Hlášení a texty, Administrace – Hlas.

6. Varianta D-ID (video avatar) – navíc oproti základní / Rive

Pokud nasazujete fotorealistické video (did), platí vše výše a navíc:

  • Síť – server i kiosk musí mít stabilní odchozí HTTPS k api.d-id.com (firewall, proxy, DNS). Pomalá nebo kolísající linka = trhané video a delší čekání po otázce.
  • API klíč D-ID – v administraci; bez kreditů nebo s vyčerpaným limitem se zobrazí setup obrazovka místo avatara. Odhad nákladů: Náklady D-ID.
  • Výkon PC – dekódování videa v prohlížeči je náročnější než Rive/SVG. Doporučeno mini PC s 4+ jádry a 8 GB RAM; na Raspberry Pi 4 počítejte s rezervou, Pi 5 je pohodlnější.
  • Test na místě – jedna delší odpověď (20–30 s videa) při současném přehrávání TTS; ověřte plynulost bez sekání a že mikrofon stále funguje po skončení videa.

Srovnání všech variant: Možnosti avatara.

7. Varianta Kinect (kin1.php / kin2.php) – navíc oproti základní / Rive

Pokud nasazujete Kinect Xbox 360, platí vše výše a navíc celý postup z Kinect 360 – příprava PC (Windows 11):

  • Windows 11 na stejném PC jako prohlížeč – Kinect SDK 1.8 a bridge na Linuxu/Pi nejsou podporované.
  • Kinect360Bridge.exe běží na pozadí (autostart) dříve než Chrome kiosk.
  • Demo režim v adminu vypnutý v produkci; WebSocket ws://127.0.0.1:8765 odpovídá portu bridge.
  • Prostor – návštěvník v záběru 1,5–2,5 m; ověřte pohyb kostry (kin1) nebo bodů (kin2).
Shrnutí: ready: true + zabezpečení configu a kiosku + HTTPS s povoleným mikrofonem + test TTS v adminu + reálná otázka na místě + správná hlasitost. D-ID a barge_in ověřte zvlášť, pokud je používáte.