Technická příručka: Nasazení a údržba AI Hodnocení
Tento dokument popisuje technické řešení projektu. Zahrnuje problematiku Docker kontejnerizace, integrace OpenClaw a správu relační databáze PostgreSQL běžící nad frameworkem Supabase.
1. Architektura kontejnerů a systémové požadavky
Systém vyžaduje ke spolehlivému chodu stabilní VPS platformu pro asynchronní vytěžování metadat a hodnocení AI agenty.
- Operační systém: Ubuntu 24.04.4 LTS (Noble Numbat)
- Minimální hardware: 6 CPU jader, 11+ GB RAM
- Uživatelé: Oprávnění root (k instalacím systémových démonů) a omezený privilegovaný uživatel agentai (k produkčnímu běhu Flasku a CRON botů).
OpenClaw Gateway
Nasazení softwarových agentů (např. bota na Discord/Telegram, který poskytuje příkazy) je obsluhováno frameworkem OpenClaw. Naše Python skripty fungují v tomto pojetí jako samostatné Skills. Umožňují mimo jiné agenty notifikovat nebo se nechat řídit pomocí chatu, aniž by tím byla svázána nebo limitována přímo hlavní iterativní smyčka v Python kódu nad žákovskými databázemi.
2. Relační Databáze – Supabase v Dockeru
Celý projekt je datově centralizován z předchozích rozdrobených file-based CSV souborů do formální kontejnerové vrstvy pomocí Self-Hosted edice Supabase.
2.1 Nasazení Supabase
Iniciováno pomocí uživatele root. Závislosti (Docker Engine, docker-ce, docker-compose-plugin) jsou aplikovány k provozu z produkčního adresáře /opt/supabase.
mkdir -p /opt/supabase && cd /opt/supabase
git clone --depth 1 https://github.com/supabase/supabase .
cd docker
cp .env.example .env
Soubor .env byl modifikován na unikátních proměnných POSTGRES_PASSWORD, JWT_SECRET, ANON_KEY a SERVICE_ROLE_KEY pro zachování hardwarové bezpečnosti.
⚠️ Úprava portů a síťování (Direct DB)
Pro eliminaci chyb ("Tenant or user not found" viz Supavisor pooler), byl uvnitř docker-compose.yml zpřístupněn přímý komunikační TCP port PostgreSQL: 5433.
Uvnitř sítě tedy běží kontejner na mapování 5433:5432.
docker compose pull
docker compose up -d
3. Návrh relačního SQL schématu
Aby Python (app.py a main.py) mohl pracovat rychle, data jsou uspořádána do normalizovaných logických celků s využitím pevných vazeb (Foreign Keys).
- Tabulka
students(Studenti): Hlavní páteř žáků. Záznamy tvoří nezávislýiduuid standard, unikátní login (nickname) a kmenovou skupinu (group_name). - Tabulka
evaluation_periods(Období): Uzly času. Obsahuje zřetelná data např. Týden 09/2026 s mezníky pondělí-neděle. Lze tak odděleně počítat měsíce a cykly. - Tabulka
weekly_evaluations(Průsečík hodnocení): Pevná křižovatka tvořící reporty. Pomocí FK si najde svého Studenta a Své Období. Je dedikována na body od AI (odměny/srážky), popisy commitů a celkové podmínkové asertace. Spočítá dynamicky skóre (pts_total). - Tabulka
commits: Slouží pro hluboký audit log nebo historická bádání "Kdo vytvořil jaký zdroják v 03:00".
Díky tomuto SQL schematu webová aplikace generuje celoroční top-list naprosto exaktně do sekundy bez pomalého parsování složek dotazem:
SELECT s.nickname, SUM(w.pts_total) FROM weekly_evaluations w JOIN students s ...
4. Konfigurace Python (agentai) a Ochrana soukromí
Uživatel agentai využívá virtuální prostředí venv a komunikuje s databází lokálně na portu 5433 s knihovnou psycopg2-binary. Relační zabezpečení:
- Dotazování serverem: Flask a Boti na CRONu znají identitu a komunikují ze skrytého souboru
.env(SUPABASE_URL,SUPABASE_SERVICE_KEY,DATABASE_URL). Neproniknou klientům skrz HTML/JS vrstvu. Žádný row-level policy není v Supabase uvolněn pro čtení ven do internetu (anon), firewall (UFW) blokuje vnější volání databázového portu, povolen jen lokální Loopback a porty 443(Web) / 22(SSH).
5. Zálohování a Exhalační Cyklus
Administrativní garance nepoškozených dat a historie obhajuje samostatný Linuxový script /home/agentai/ai_hodnoceni/db_backup.sh.
#!/bin/bash
pg_dump "$DATABASE_URL" --format=custom -f "/home/agentai/ai_hodnoceni/backups/ai_kredit_db_backup_$(date +%F).sql"
gzip "/home/agentai/ai_hodnoceni/backups/ai_kredit_db_backup_$(date +%F).sql"
- Cron: Zajišťuje kompletní automatizaci serveru. Soubor
run_monitor.shzajišťuje real-time monitorovací dashboard aktivací v pravidelných 2 hodinách. Databázový cyklusdb_backup.shobsluhuje Linux Task Scheduler na rutině Každé pondělí v 8:00 Ráno bezprostředně po AI hodnocení celé třídy z půlnoci. - Zajištěna je komprimace
gzippro minimalizaci objemu uložených binárních dat na disku.