Přeskočit obsah

Deployment: Infrastruktura a prostředí

Poslední aktualizace: 2026-05-15


Účty a placené plány

Služba Plán Cena Co odemyká
GitHub Pro (placený od 2026-05) $4/měsíc Branch protection na private repo, CODEOWNERS gate, 3000 Actions minut/měsíc
Supabase Cloud Pro (placený od 2026-05-15) $25/měsíc Mailer 30+/h (Free 4/h), 7-day PITR, daily backups, DB branching (mcp__supabase__create_branch), 8GB DB, 250GB transfer
Vercel Free $0 100GB bandwidth, 1 concurrent build, preview deploys veřejné (žádné password protection)
GCP VM e2-small ~$13/měsíc Twenty CRM + BookStack hosting
Resend Free $0 3000 mailů/měsíc — bulk Sofie mailing (transactional zatím přes Supabase mailer)

Otevřené rozhodnutí: Vercel Pro ($20/měsíc) — viz „Co odemyká Vercel Pro" níže.


Aktuální URL adresy

Prostředí URL Poznámka
Produkce (MVP) sofie-kosmo.vercel.app Quick-login buttons zapnuté (demo); vypne se až bude reálná data
Supabase Cloud iwcisgvhwdzztrfdrpkl.supabase.co Pro plan (od 2026-05-15), Frankfurt EU
Supabase Studio supabase.com/dashboard/project/iwcisgvhwdzztrfdrpkl Admin UI
GitHub repo github.com/docek/sofie-kosmo Auto-deploy na push do main
Doména (plán) app.sofie.education DNS přes Cloudflare, zatím nenastaveno

TL;DR

Dvě prostředí dnes (Local + Cloud), v EU, žádná produkční data (k 5/2026). Self-hosted služby na GCP VM (e2-small), aplikační data v Supabase Cloud Free (1 projekt), frontend na Vercelu.

Prostředí Supabase BookStack Frontend
Local Supabase CLI (Docker) Nepotřeba pnpm dev
Cloud (dev → produkce) iwcisgvhwdzztrfdrpkl (Free, EU Frankfurt) GCP VM (sdílená) Vercel main

Staging strategie (po Pro upgrade 2026-05-15): mcp__supabase__create_branch je nyní dostupný — per-branch Supabase DB preview je možné. Implementace: prozatím neaktivováno, zapne se až bude první PR vyžadující ostré DB migrace.


1. Prostředí: Local → Cloud

Lokální vývoj

~/Dev/sofie-kosmo/
├── web/                → Next.js app (pnpm dev)
├── supabase/           → Supabase CLI (supabase start)
│   ├── migrations/     → SQL migrace (verzované v Gitu)
│   └── seed.sql        → Testovací data (fiktivní, bezpečná pro Git)
└── infra/              → Docker Compose (VM produkce — Twenty + BookStack)

supabase start spustí celý Supabase stack lokálně v Dockeru: PostgreSQL 15 (s pgvector), Auth (GoTrue), Realtime, Storage, Studio dashboard. Migrace, RLS policies, triggers — vše se testuje lokálně.

Supabase — jeden Cloud projekt (stav 2026-05-11)

iwcisgvhwdzztrfdrpkl (aktivní)
Region EU Frankfurt
Plán Pro (od 2026-05-15)
Kdo používá Solo dev, produkce zatím bez reálných dat
pgvector Enabled
Branching feature Dostupné (Pro plán) — neaktivováno zatím
PITR 7 dní (Pro plán)
Daily backups Ano (Pro plán)

Flow migrací (současný stav)

Lokální (supabase start)
  │ supabase db reset — testuj migraci
Cloud (`iwcisgvhwdzztrfdrpkl`)
  │ supabase db push --linked — aplikuj migraci
  ✅ Hotovo

Až přijde čas reálných dat (přechod GDPR gate — viz AGENTS.md), workflow se rozšíří o staging vrstvu podle vybrané strategie.

Vercel — Next.js hosting

  • MVP: Vercel free tier. Frontend neobsahuje osobní data (ta jsou v Supabase v EU). Next.js renderuje UI, osobní data se tahají client-side ze Supabase EU endpointu. Akceptovatelné pro MVP.
  • Produkce: Zvážit Vercel Pro s EU regionem ($20/měs) nebo Cloud Run v EU.

Data strategie

Prostředí Zdroj dat V Gitu? Reálná data?
Local supabase/seed.sql Ano Fiktivní
Staging Kopie z produkce Ne Ano
Produkce Živá data Ne Ano

2. GCP VM — self-hosted služby

Parametry VM

Parametr Hodnota
VM typ e2-small (2 vCPU, 4 GB RAM)
Boot disk 30 GB SSD (OS + Docker)
Data disk 100 GB HDD, oddělený, mountnutý jako /data
Statická IP Pevná veřejná adresa
Region europe-west1-b (Belgie, GDPR)
Cena ~$25/měs (VM + disky + IP)

Oddělený datový disk přežije restart i smazání VM, lze zvětšit online, umožňuje samostatné zálohy.

Kontejnery (aktuální stav po cleanup 2026-05-11)

Kontejner Image RAM limit Účel
traefik traefik:v3.3 128 MB Reverse proxy
landing nginx:alpine 64 MB Rozcestník sofie.education
postgres postgres:16-alpine 512 MB Sdílená DB (Twenty CRM)
redis redis:7-alpine 128 MB Cache (Twenty)
twenty twentyhq/twenty 2 GB CRM (správa leadů a kontaktů)
twenty-worker twentyhq/twenty 1 GB Background worker pro Twenty
bookstack linuxserver/bookstack 512 MB Wiki / znalostní báze
bookstack-db mariadb:11 512 MB BookStack MySQL

Odstraněno (2026-05-11): n8n, listmonk (viz DEV-LOG).

Služby a URL

Služba URL Účel
Twenty CRM crm.sofie.education Správa leadů a kontaktů
BookStack wiki.sofie.education Znalostní báze (veřejná + interní)
Landing sofie.education Rozcestník
Docs docs.sofie.education Cloudflare Pages (MkDocs)

Odstraněno: ai.sofie.education (n8n), newsletter.sofie.education (Listmonk).

Reverse proxy: Traefik

Internet → Cloudflare (HTTPS, edge certifikát) → sofie-vm (port 80)
                                                     ↓ Traefik
    crm.sofie.education        → Twenty (:3000)
    wiki.sofie.education       → BookStack (:80)
    sofie.education            → Landing page (:80)

HTTPS zajišťuje Cloudflare (SSL mode: Flexible). Traefik routuje po HTTP.

Data volumes

/data/
├── postgres/       → PostgreSQL data (Twenty CRM)
├── redis/          → Redis persistence (Twenty)
├── bookstack/      → BookStack config + uploads
├── bookstack-db/   → MariaDB data
├── landing/        → Landing page HTML
└── backups/        → Database dumps (gitignored)

DNS: Cloudflare

  • Doména: sofie.education (registrovaná u Wedosu, DNS na Cloudflare)
  • CDN cache, DDoS ochrana zdarma, rychlá propagace DNS změn (~30s)

3. AI: Vertex AI (Gemini)

n8n byl odstraněn (2026-05-11). AI volání jdou přímo z Next.js aplikace přes Vertex AI SDK.

Proč Vertex AI (ne Gemini API Studio)

Gemini API (AI Studio) Vertex AI
EU data residency Ne Ano (europe-west3 Frankfurt)
DPA Consumer ToS GCP Enterprise DPA
Autentizace API klíč GCP IAM / service account

Pro školu s GDPR → Vertex AI.

Modely

  • Gemini Flash — hlavní model (klasifikace, extrakce, běžné odpovědi)
  • Gemini Pro — komplexní úlohy (sumarizace, plánování)
  • text-embedding-004 — embeddingy pro RAG (pgvector v Supabase — pipeline zatím neimplementována)

Náklady

Položka Měsíčně
VM e2-small + disky + IP ~$25
Vertex AI (Flash + Pro) ~$0–10 (MVP, nízký traffic)
Supabase $0 (free tier)
Celkem ~$25–35

4. Zálohovací strategie

Co kde zálohovat

Data Kde žijí Záloha Frekvence Retence
App data (studenti, docházka) Supabase prod Supabase auto + pg_dump na VM Denně 30 dní
KB obsah BookStack (MariaDB) mysqldump na VM Denně 30 dní
KB soubory BookStack (/data/bookstack) GCP disk snapshot Denně 14 dní
Twenty CRM data PostgreSQL (twenty DB) pg_dump Denně 30 dní
Konfigurace Git repo Git Při změně Neomezeně

GCP disk snapshot (automatický)

gcloud compute resource-policies create snapshot-schedule sofie-backup \
  --region=europe-west1 \
  --max-retention-days=14 \
  --daily-schedule \
  --start-time=02:00

gcloud compute disks add-resource-policies sofie-data-disk \
  --resource-policies=sofie-backup \
  --zone=europe-west1-b

Disaster recovery

Scénář Postup Downtime
Služba spadne docker compose restart ~30s
VM nereaguje gcloud compute instances reset ~2 min
Data poškozena Nový disk ze snapshotu ~10 min
Supabase výpadek Čekáme (SaaS), app degraduje gracefully N/A
Celý rebuild Snapshot → nová VM + Supabase restore ~1 hod

5. EU Data Residency

Služba Region GDPR
GCP VM europe-west1 (Belgie) OK
Vertex AI europe-west3 (Frankfurt) OK
Supabase EU Frankfurt OK
Cloudflare DNS Edge (globální, ale data = jen DNS) OK
Vercel US (free tier) Akceptovatelné pro MVP (frontend nemá PII)
Google Workspace EU (pokud nastaveno) OK

6. CI/CD — trunk-based development

Princip: KISS pro solo vývojáře

Žádná staging větev. Vercel automaticky generuje preview URL pro každý PR — to je preview.

feature branch → PR → Vercel preview → review → merge to main → prod deploy

Git branching

Větev Deploy kam Kdy
main Production (app.sofie.education) Merge PR → auto-deploy
feature/* / PR Preview (unikátní URL per PR) Push → Vercel auto-preview

Žádná staging větev — zbytečná merge complexity pro jednoho vývojáře.

Vercel konfigurace

Production Branch:  main
Preview Branches:   * (všechny ostatní)
Environment Variables:
  Production:  NEXT_PUBLIC_SUPABASE_URL = <prod>
  Preview:     NEXT_PUBLIC_SUPABASE_URL = <prod>  ← dnes sdílíme s prod (žádná reálná data)

Až budou reálná data: Preview prostředí potřebuje izolovat data od produkce. Strategie není ještě rozhodnuta (Pro upgrade pro per-branch Supabase preview vs. druhý projekt jako shared staging vs. Docker lokálně). Viz architect-review TBD.

Backend prostředí (dnes)

Služba Stav
Supabase Jeden Cloud projekt iwcisgvhwdzztrfdrpkl (Free, EU Frankfurt)
BookStack Jedna sdílená instance na GCP VM
Twenty CRM Jedna sdílená instance na GCP VM

Flow

┌──────────────────────────────────────────────────┐
│                 DEV (lokální)                     │
│  Next.js (pnpm dev) ←→ Supabase CLI (Docker)    │
│  Migrace: supabase migration new → test → commit │
└──────────────────┬───────────────────────────────┘
                   │ git push (feature branch)
┌──────────────────────────────────────────────────┐
│              PREVIEW (per-PR)                     │
│  Vercel preview URL ←→ Supabase Cloud (sdílený)   │
│  Ředitel testuje na preview URL                   │
└──────────────────┬───────────────────────────────┘
                   │ merge PR to main
┌──────────────────────────────────────────────────┐
│              PRODUCTION                           │
│  app.sofie.education ←→ Supabase Cloud            │
│  supabase db push --linked                        │
└──────────────────────────────────────────────────┘

Checklist pro deploy

  • Migrace otestovaná lokálně (supabase db reset)
  • PR vytvořen, Vercel preview funguje
  • Ředitel otestoval na preview URL
  • PR merged → Vercel auto-deploy to prod
  • Migrace pushnutá na Supabase Cloud (supabase db push --linked)
  • Smoke test (třídnice, přihlášení, žáci)

Až přijdou reálná data, checklist přibyde o kroky pro staging vrstvu (TBD).


7. Denní development workflow

Lokální vývoj

supabase start                  # Lokální Supabase (Docker)
cd web && pnpm dev              # Next.js na localhost:3000

Supabase CLI spustí Postgres, Auth, Storage, Studio (localhost:54323).

Změna DB

supabase migration new popis → napiš SQL → supabase db reset (smaže + znovu aplikuje) → commitni s frontend kódem.

Vždy migrace PŘED frontendem — DB o krok napřed, frontend se adaptuje.

Monitoring (minimum)

Nástroj Co sleduje Cena
Uptime Robot Dostupnost app.sofie.education + wiki.sofie.education Zdarma
Vercel Analytics Frontend performance Free tier
Supabase Dashboard DB velikost, API, Auth logy Součást plánu
GCP Monitoring VM CPU/RAM/disk Součást GCP

Feedback loop: učitelé → vývoj

Primární: Google Form (kdo, typ, popis) → Google Sheets → GitHub Issue → dev notifikace.


Metriky úspěchu (za 1 měsíc)

Metrika Cíl Jak měřit
Učitelé evidují třídnici Denně (aspoň jeden slot/den) Supabase: počet classbook_entries
Budget < $35/měs GCP billing
VM RAM utilization < 80 % GCP monitoring
Vercel build zelená 100 % Vercel dashboard