Přeskočit na obsah

Služby

Sencai používá event-driven microservices architekturu, orchestrovanou přes Docker Compose (orchestration/). Každá služba má jasně vymezenou zodpovědnost. Tato stránka je index seskupený stejně jako samotné monorepo; pro hrstku nejsložitějších služeb existují detailní podstránky.

  • Role: Backend CMS / primární API — 212 content-types
  • Tech: Strapi v5, Node.js, TypeScript, MySQL
  • Port: 1337 (admin na 1337/admin)
  • Dokumentace: Strapi backend
  • Role: Go strangler-fig náhrada sencai.space — parita content-type po content-type za stejným HTTP kontraktem, aby se provoz mohl postupně přesunout po jednotlivých routách. Shadow-only: nezapojeno do výchozích orchestračních profilů, neroutuje žádný reálný zákaznický provoz. Strapi zůstává jediný živý backend platformy.
  • Tech: Go, vlastní MySQL (go-backend-db, rozdělena z backend-db 2026-07-06)
  • Port: 8080 interně, host go-backend.sencai.localhost, profil go-backend (mimo DEFAULT_PROFILES)
  • Dokumentace: Migrace Go backendu — vývojářská reference
  • Role: UI platformy — auth flow a gravity dashboard (organizace, cloud instance)
  • Tech: Nuxt 3, Vue 3, Vuetify 3, Pinia
  • Port: 3000
  • Role: Veřejný marketingový web (sencai.space) — statický, 15 jazykových mutací
  • Tech: Astro 5 SSG, vanilla CSS, Three.js hero, servírováno přes nginx
  • Port: uvnitř kontejneru běží na nginx portu 80, dostupný přes Traefik host routing (sencai.localhost lokálně, sencai.space v produkci) — nemá vlastní surový dev port
  • Role: Viewer SPA pro audit trail — neměnný event log per organizace
  • Tech: Nuxt 3, Keycloak OIDC (klient sencai-audit)
  • Port: 3300 · Host: audit.sencai.localhost
  • Dokumentace: Audit Trail
  • Role: Interní admin dashboard — správa uživatelů a organizací
  • Tech: Nuxt 3, Vue 3, Keycloak OIDC
  • Port: 3100
  • Role: Správa API tokenů a jejich šifrování
  • Tech: Fastify 5, TypeScript, AES-256-GCM
  • Port: 3200
  • Dokumentace: API Manager
  • Role: Konfigurace Keycloaku a vlastní témata (není běžící aplikace — konfigurační adresář konzumovaný kontejnerem keycloak)
  • Tech: Keycloak realm konfigurace, themes/
  • Port: samotný Keycloak naslouchá na 8180 (za /kc)
  • Dokumentace: Keycloak autentizace
  • Role: RabbitMQ konzument — synchronizuje Strapi user/org události do Keycloaku, plus proces audit-consumer (hash-chained ukládání audit logu)
  • Tech: Node.js
  • RabbitMQ: odebírá exchange user a organisation; audit-consumer.js odebírá audit.events
  • Role: Přemosťuje Strapi webhooky do RabbitMQ
  • Tech: Koa (jediná záměrná výjimka z TypeScript konvence — čistý JavaScript)
  • Port: 1347
  • Dokumentace: Webhook Publisher
  • Role: RabbitMQ konzument — synchronizuje Gitea repozitáře/organizace
  • Tech: Express, TypeScript
  • Port: 3002
  • RabbitMQ: odebírá git.events
  • Dokumentace: Git Connector
  • Role: Konfigurace instance Gitea — dvě oddělené instance: Toolbox (systémové repozitáře/šablony) a Apps (uživatelské aplikace)
  • Tech: Pouze konfigurace (upstream Gitea image), sdílená MySQL na portu 3308
  • Porty: Toolbox HTTP 9023 / SSH 9022, Apps HTTP 9034 / SSH 9033
  • Role: Multi-cloud provisioning — REST/SDK volání přímo na API providerů (AWS, GCP, Azure, Hetzner, DigitalOcean, Vultr, Linode), plus jeho worker proces odebírající cloud.events
  • Tech: TypeScript, TypeORM, PostgreSQL
  • Port: 4321
  • Dokumentace: Cloud Connector
  • Role: CDKTF (Terraform CDK) IaC pro vlastní produkční multi-region infrastrukturu Sencai na GCP — není běžící služba, ale nástroj spouštěný při deployi
  • Tech: TypeScript, CDKTF
  • Port: n/a — není compose služba, nasazuje se nezávisle na orchestration/
  • Role: Kubernetes fleet agent — Helm chart / manifesty pro spravované K8s clustery
  • Tech: Helm, Kubernetes manifesty
  • Port: n/a — není compose služba, nasazuje se nezávisle na orchestration/
  • Role: C2 (command-and-control) brána pro on-host fleet agenty — WebSocket + REST
  • Tech: Go
  • Port: 4400
  • Role: On-host fleet agent binárka — monitoring, patch management, software inventář, spouštění runbooků
  • Tech: Go, distribuováno jako samostatná binárka (deb/rpm balíčkování, systemd unit), není Docker Compose služba
  • Port: n/a — komunikuje odchozím spojením směrem k agent-gateway
  • Role: Browser terminál — SSH/WebSocket proxy
  • Tech: Node.js, TypeScript
  • Port: 3400
  • Role: OPSLOOP intelligence loop — RCA (root cause analysis) a návrhy remediace
  • Tech: Node.js, TypeScript
  • Port: 3005
  • RabbitMQ: odebírá alertmanager.events (routing key alert.firing)
  • Dokumentace: OPSLOOP
  • Role: Jediný writer content-typů user-rank/gamification-event (F4.GAM) — počítá změny XP/hodnosti/odznaků na straně serveru z platformní aktivity, nikdy nedůvěřuje hodnotě z příchozí zprávy
  • Tech: Node.js, TypeScript, Pino
  • Port: 3800 (jen health check)
  • RabbitMQ: odebírá gamification.events (topic); re-publikuje rank.up/badge.awarded/easter-egg.triggered na tentýž exchange pro frontendový notifikační most
  • Dokumentace: Gamification Consumer
  • Role: JIT (just-in-time) provisioning most mezi Keycloakem a sencai-forum (Lemmy) — při první návštěvě fóra automaticky založí Lemmy účet, synchronizuje KC roli forum-admin na Lemmy admina, pravidelně kontroluje Lemmy na nepřečtené odpovědi/zmínky a přeposílá je do notification-service, a automaticky vytvoří Lemmy komunitu při vzniku nové organizace ve Strapi
  • Tech: Fastify 5, TypeScript
  • Port: 4181
  • RabbitMQ: odebírá organisation.forum-community-requested; publikuje na notification.events
  • Dokumentace: Komunitní fórum — vývojářská reference
  • Role: Most mezi usage events a Lago (měření využití) a Stripe (platby)
  • Tech: Node.js, TypeScript
  • Port: 3600
  • Dokumentace: Billing Adapter
  • Role: Dunning microservice — cron pro suspend/archive při selhání platby
  • Tech: Node.js, TypeScript
  • Port: 3700
  • Role: LLM fasáda — multi-provider přístup k LLM pro platformu
  • Tech: Node.js, TypeScript
  • Port: 4430
  • Role: Email + Slack konzument pro notification.events
  • Tech: Node.js, TypeScript
  • Role: Odebírá fanout platform.events a ingestuje události do Strapi
  • Tech: Node.js, TypeScript
  • Role: Synchronizace Google Workspace Directory API
  • Tech: Node.js, TypeScript
  • Port: 3500
  • Role: GraphQL fasáda — sjednocené schéma nad Strapi REST API
  • Tech: Fastify 5, TypeScript, Apollo Server 5
  • Port: 4000
  • Dokumentace: GraphQL Gateway
  • Role: Jednorázové bootstrap/seed skripty databáze pro Strapi
  • Tech: Node.js, TypeScript
  • Role: Samostatný RabbitMQ broker, plus vlastní messaging konzumenti
  • Tech: RabbitMQ (upstream image)
  • Port: 5673 (AMQP), 15673 (management UI)
  • Role: Denní zálohování MySQL do S3/GCS, plus obnovovací zkoušky (restore drills)
  • Tech: Node.js, TypeScript
  • Role: Tato dokumentační stránka
  • Tech: Astro 5, Starlight, nginx
  • Role: End-to-end testovací sada proti živému orchestrovanému stacku
  • Tech: Playwright, TypeScript

cloud-consumer a git-consumer (HTTP bridge konzumenti) byly odstraněny (ADR-001). Worker proces cloud-connector nyní odebírá cloud.events přímo; git synchronizaci zajišťuje výhradně git-connector. Na žádnou z vyřazených služeb se nemá odkazovat v nové dokumentaci.

ExchangeTypPoznámka
userdirectStrapi user create/update → auth-service-consumer
organisationdirectStrapi organisation create/update
cloud.eventstopicCloud provisioning, odebírá cloud-connector worker
git.eventstopicGitea sync, odebírá git-connector
notification.eventstopicEmail/Slack dispatch, odebírá notification-service
audit.eventstopicRouting key audit.write; odebírá proces audit-consumer
platform.eventsfanoutVšechny platformní eventy, odebírá event-store-consumer pro ingest do Strapi
alertmanager.eventstopicMonitoring alerty, routing key alert.firing, odebírá opsloop-consumer
gamification.eventstopicXP/hodnost/odznak aktivita, odebírá gamification-consumer (routing keys xp.granted, badge.check, streak.tick, easter-egg.roll)

Fallback fronty mají TTL 14 dní. Retry logika má strop 5 pokusů s exponenciálním backoff.

SlužbaEngineHostDev port
Strapi backendMySQLbackend-db3306
KeycloakMySQLkeycloak-db3307
GiteaMySQLgit-service-mysql3308
Cloud ConnectorPostgreSQLcloud-connector-db5434
ForumPostgreSQLforum-db5435
SlužbaPort
Traefik80, 8080
Strapi1337
sencai.space-frontend3000
sencai-audit3300
sencai-admin3100
API Manager3200
Git Connector3002
workspace-connector3500
billing-adapter3600
sencai-watchdog3700
ssh-proxy-service3400
opsloop-consumer3005
gamification-consumer3800
forum-connector4181
graphql-gateway4000
Cloud Connector4321
agent-gateway4400
llm-service4430
Webhook Publisher1347
RabbitMQ (sencai-mq)5672 (AMQP), 15672 (UI) — standalone sencai-mq na 5673/15673
Keycloak8180 (za /kc)
HashiCorp Vault8200
Grafana3000 (host grafana.sencai.localhost)
Gitea Toolbox9023 (HTTP), 9022 (SSH)
Gitea Apps9034 (HTTP), 9033 (SSH)

Kompletní architektonické detaily a datové toky viz kořenový CLAUDE.md.