← Zpět na Ducha Třince

Technická dokumentace projektu

Tato dokumentace popisuje technické pozadí, architekturu a infrastrukturu projektu Duch Třince (hostovaného na eljir.com), který kombinuje data o počasí a astrologii s generativní AI, společně se souvisejícími agenty běžícími na tomto serveru.

Architektura a Technologie

Systém je postavený na decentralizovaném zpracování dat na pozadí pomocí Bash skriptů, Pythonu a Docker kontejnerů. Výsledné webové stránky jsou generovány staticky (Static Site Generation – SSG), což zajišťuje bleskovou odezvu na straně klienta a vynikající SEO bez nutnosti klientského JavaScriptu.


Logika Aplikace a Životní Cyklus

Aplikace funguje na bázi pravidelného přegenerování statického obsahu. O to se starají dva spárované bash skripty na hostiteli, které běží v rámci plánovače cron uživatele openclaw.

1. Časování (Crontab)

Pravidelné spouštění je řízeno Linuxovým plánovačem cron pod uživatelským účtem openclaw. Skripty se spouštějí každé 3 hodiny v časovém okně od 06:00 do 21:00.

# Výpis crontab uživatele openclaw (crontab -u openclaw -l)
0 6-21/3 * * * /home/openclaw/pocasi.sh > /home/openclaw/weather_cron.log 2>&1
2 6-21/3 * * * /home/openclaw/pocasi_agent2.sh > /home/openclaw/weather_agent2_cron.log 2>&1

Druhý skript (pocasi_agent2.sh) se spouští s dvouminutovým zpožděním, aby měl první skript čas na dokončení své práce a uložení dat do databáze.


2. Generování obsahu - pocasi.sh (Agent 1)

Tento skript sestavuje hlavní kostru počasí, poezie a horoskopu.

  1. Počasí API: Pomocí nástroje curl stáhne aktuální počasí pro Třinec z OpenWeatherMap API a rozparsuje jej přes jq (teplota, stav oblohy).
  2. Jmeniny API: Stáhne aktuální a zítřejší jmeniny asynchronně přes API https://svatkyapi.cz/api/day.
  3. AI Volání (Poezie): Zavolá globální instanci OpenClaw nainstalovanou na hostiteli (/usr/bin/openclaw). Na základě meteorologických dat a identity bota ze SOUL.md vygeneruje model gemini-2.5-pro poetický popisek Třince (Nálada krajiny).
  4. AI Volání (Horoskop): Opětovně zavolá OpenClaw, přečte specifikaci úkolu z generate_daily_horoscope.md a vygeneruje kompletní denní horoskop ve strukturovaném HTML formátu (značky <details>) pro 12 znamení zvěrokruhu.
  5. Parsování & SQLite: Texty jsou vyčištěny od ANSI kódů a markdown značek pomocí perl filtrů a uloženy do SQLite3 databáze (/home/openclaw/.openclaw/historie.db) pomocí Python skriptu insert_pocasi.py.
  6. Statický build: Spustí generator_webu.py, který přečte celou historii z databáze a vygeneruje statický index.html a archivní soubory (např. archiv_2026-06-15.html).

3. Cynický Komentář - pocasi_agent2.sh (Agent 2)

Skript kriticky a jízlivě komentuje výstupy prvního agenta.

  1. Načtení vstupu: Spustí Python skript read_agent1.py, který vytáhne nejnovější záznam od prvního agenta z databáze a očistí jej od HTML tagů.
  2. Spuštění v Dockeru: Ke zpracování cynického komentáře nepoužívá novou lokální instanci, ale bleskově zavolá běžící instanci v Docker kontejneru přes:
    docker exec openclaw_bot_2 node openclaw.mjs agent ...
    Model gemini-2.5-pro vygeneruje cynický komentář na základě osobnosti popsané v cynic_commentator.md.
  3. Uložení & Finalizace: Vyčistí text od uvozovek a zpětných apostrofů, zapíše jej do SQLite databáze přes insert_agent2.py a znovu spustí generator_webu.py, který zkompiluje finální verzi webu včetně komentáře realismu.

Konfigurace Docker Kontejnerů

Na tomto serveru běží celkem 4 nezávislé služby v Docker kontejnerech spravované přes Docker Compose:

Název kontejneru Umístění projektu Hlavní technologie Účel a fungování služby
openclaw_bot_1 /home/openclaw/docker-openclaw Node.js 22 (Alpine) Rezervní kontejner OpenClaw pro Agenta 1. Hlavní běh je z důvodu rychlosti spouštěn přímo na hostiteli.
openclaw_bot_2 /home/openclaw/docker-openclaw Node.js 22 (Alpine) Trvale běžící proces OpenClaw na pozadí, do kterého skript pocasi_agent2.sh posílá bleskové požadavky přes docker exec pro generování cynických komentářů.
telegram_zpravodaj /home/openclaw/telegram_zpravodaj Python 3 (Alpine) Ranní zpravodaj z vybraných Reddit RSS kanálů. Každé ráno v 7:00 (řízeno AsyncIOScheduler) stáhne zprávy, nechá model gemini-2.5-flash provést výběr a překlad a odešle je na Telegram API.
ilou_agent_bot /home/openclaw/ilou_agent Python 3 (Alpine) Discord bot sloužící k řešení školních úloh v Pythonu. Automaticky programuje skripty, dokumentuje je a nahrává na GitHub v rozestupech 15 hodin pod jménem "Ilou Agent".

Zabezpečení (Fail2Ban)

Pro ochranu serveru a běžících služeb je nakonfigurován a povolen systém Fail2Ban, který monitoruje systémové a webové logy a blokuje IP adresy vykazující útočné chování pomocí systémového firewallu.

Základní konfigurace (/etc/fail2ban/jail.local)

Aktivní monitorované Jaily

Název jailu Monitorovaný log Popis a chování
sshd systémový log (SSH) Chrání server před pokusy o uhodnutí hesla k SSH přístupu. Po 5 špatných pokusech banuje IP adresu.
nginx-http-auth /var/log/nginx/error.log Detekuje a blokuje IP adresy, které opakovaně selžou u HTTP Basic autentizace na webovém serveru Nginx.
nginx-botsearch /var/log/nginx/error.log Chrání web před automatizovanými roboty skenujícími citlivé cesty (administrace, PHPMyAdmin apod.). Z důvodu vysoké citlivosti má nastaven přísnější limit maxretry = 2.
← Zpět na Ducha Třince