Přeskočit na obsah

Lokální vývoj

Sencai je event-driven microservices architektura spravovaná přes Docker Compose. Tento průvodce vás naučí, jak stack spustit lokálně.

  • Docker ≥ 20.10
  • Docker Compose ≥ 2.0
  • Git
  • Node.js ≥ 18 (pro lokální vývoj jednotlivých služeb)
  • Minimálně 8 GB RAM (doporučeno 12 GB)
  • Minimálně 20 GB volného místa
Terminál
git clone https://github.com/sencai-ai/sencai.space.git
cd code
  1. Zkopírujte šablonu:
Terminál
cd orchestration
cp .env.example .env
  1. Vyplňte kritické proměnné:
Terminál
JWT_SECRET=$(openssl rand -base64 32)
API_MANAGER_ENCRYPTION_KEY=$(openssl rand -base64 32)
APP_KEYS=$(openssl rand -hex 16),$(openssl rand -hex 16),$(openssl rand -hex 16),$(openssl rand -hex 16)
ADMIN_ENCRYPTION_KEY=$(openssl rand -hex 32)
  1. Upravte .env a doplňte zbývající hodnoty (cloud tokeny, SMTP atd.)

Základní příkaz:

Terminál
cd orchestration
./run-local.sh [profily...]

run-local.sh bez argumentů spustí výchozí sadu profilů (orchestration/run-local.sh, proměnná DEFAULT_PROFILES):

core,traefik,backend,backend-db,auth,git,mq,webhook,monitoring,frontend,web,cloud,docs,admin,audit,agent,vault,billing,watchdog,glitchtip,posthog,opsloop,llm,backup,cell,bootstrap
ProfilSlužby
coreAPI Manager + ssh-proxy-service + workspace-connector (+ Traefik)
backend / backend-dbStrapi backend / jeho MySQL
frontendNuxt platform frontend (auth + gravity)
webVeřejný marketingový web (sencai-web, nginx SSG)
adminAdmin dashboard (sencai-admin)
auditSencai Audit viewer (port 3300, audit.sencai.localhost)
authKeycloak + keycloak-db + auth-service-consumer
mqRabbitMQ (sencai-mq) + notification-service + event-store-consumer
webhookWebhook Publisher
cloudCloud Connector + worker + PostgreSQL
gitGitea Apps + MySQL + act-runner + Git Connector
docsDokumentace (Astro 5 + Starlight — tento web)
agentagent-gateway (fleet C2 brána, port 4400)
billingbilling-adapter (Lago/Stripe, port 3600)
watchdogsencai-watchdog (dunning microservice — payment-failure suspend/archive cron, port 3700)
llmllm-service (LLM fasáda, port 4430)
opsloopopsloop-consumer (intelligence loop, port 3005)
backupbackup-scheduler (MySQL → S3/GCS)
cellcell-metadata (region/cell routing)
vaultHashiCorp Vault
monitoringPrometheus, Grafana, Loki, Tempo, OTEL collector, exportéry, Alertmanager, uptime-kuma
bootstrapOne-shot seed dat do Strapi
forumSencai Forum (Lemmy backend + UI + Postgres + pict-rs + oauth2-proxy) — není ve výchozí sadě, spouští se explicitně
allVše najednou
Terminál
# Pouze backend + auth
./run-local.sh core backend auth mq
# Vše
./run-local.sh all

Po spuštění přistupujte ke službám přes Traefik na jejich *.sencai.localhost hostnamech — to je primární způsob přístupu k celému stacku (přímý přístup přes port je záložní debug varianta, viz níže):

SlužbaURLPoznámka
App / Frontendhttp://app.sencai.localhost/Nuxt platform (auth + gravity dashboard)
Backend APIhttp://app.sencai.localhost/apiStrapi
Strapi Adminhttp://app.sencai.localhost/adminPři prvním přihlášení vytvořte admin účet
Keycloakhttp://app.sencai.localhost/kcviz poznámka níže — holé PathPrefix, bez Host()
Cloud Consolehttp://app.sencai.localhost/cloudCloud Connector — holé PathPrefix, bez Host()
Gitea Appshttp://app.sencai.localhost/gitea-appsholé PathPrefix, bez Host()
Dozzle (kontejnerové logy)http://app.sencai.localhost/dozzleholé PathPrefix, bez Host()
Admin Dashboardhttp://admin.sencai.localhost/sencai-admin
Audit Viewerhttp://audit.sencai.localhost/port 3300
Marketingový webhttp://sencai.localhost/sencai-web
Dokumentace (tento web)http://docs.sencai.localhost/
GraphQL Gatewayhttp://graphql.sencai.localhost/
RabbitMQ UIhttp://mq.sencai.localhost/admin / admin
Grafanahttp://grafana.sencai.localhost/admin / admin
Prometheushttp://prometheus.sencai.localhost/
Alertmanagerhttp://alertmanager.sencai.localhost/
Status / Uptime Kumahttp://status.sencai.localhost/při prvním spuštění vytvořte admin účet
Traefik Dashboardhttp://localhost:8080není za Traefikem samotným
Lago Billinghttp://lago.sencai.localhost/profil: billing
Vaulthttp://vault.sencai.localhost/profil: vault
GlitchTiphttp://glitchtip.sencai.localhost/profil: glitchtip, při prvním spuštění vytvořte admin účet
PostHoghttp://posthog.sencai.localhost/profil: posthog, při prvním spuštění vytvořte admin účet
Agent Gateway (Fleet C2)http://agent-gateway.sencai.localhost/profil: agent
Opsloop Consumerhttp://opsloop.sencai.localhost/profil: opsloop
LLM Servicehttp://llm.sencai.localhost/profil: llm
Notification Servicehttp://notify.sencai.localhost/profil: mq
Workspace Connectorhttp://workspace-connector.sencai.localhost/profil: core
SSH Proxy (terminál v prohlížeči)http://ssh-proxy.sencai.localhost/profil: core
Cell Metadatahttp://cell.sencai.localhost/profil: cell
Sencai Forumhttp://forum.sencai.space/ nebo http://forum.localhost/profil: forum
127.0.0.1 app.sencai.localhost admin.sencai.localhost audit.sencai.localhost sencai.localhost docs.sencai.localhost graphql.sencai.localhost mq.sencai.localhost grafana.sencai.localhost prometheus.sencai.localhost alertmanager.sencai.localhost status.sencai.localhost lago.sencai.localhost vault.sencai.localhost glitchtip.sencai.localhost posthog.sencai.localhost agent-gateway.sencai.localhost notify.sencai.localhost opsloop.sencai.localhost llm.sencai.localhost workspace-connector.sencai.localhost ssh-proxy.sencai.localhost cell.sencai.localhost forum.localhost

Routy bez Host(): keycloak (/kc), cloud-connector (/cloud), gitea-apps (/gitea-apps) a dozzle (/dozzle) jsou v Traefiku zaregistrované jako holá pravidla PathPrefix(...) bez omezení Host(). Odpovídají tedy za jakýmkoliv hostnamem, který Traefik přijme na web entrypointu — nejen za app.sencai.localhost — takže i http://sencai.localhost/kc nebo http://docs.sencai.localhost/dozzle se doroutuje na tyto služby. Nespoléhejte na hostname jako izolační mechanismus.

Port 80 už je obsazený: na strojích, kde je port 80 obsazený (např. lokální k3s cluster se svým ServiceLB/klipper-lb), nastavte TRAEFIK_WEB_HOST_PORT v .env (např. 8088) a připojte :PORT ke každé URL výše (http://app.sencai.localhost:8088/, http://grafana.sencai.localhost:8088/, …). Traefik Dashboard na portu 8080 tím není dotčen.

Obejití Traefiku (debug přes přímý port)

Section titled “Obejití Traefiku (debug přes přímý port)”

Každou službu, která má ports: mapování v docker-compose.ports.yml, lze dosáhnout i přímo na jejím kontejnerovém portu, mimo Traefik host-routing — užitečné při zjišťování, jestli problém je v aplikaci, nebo v reverse-proxy vrstvě:

Terminál
http://localhost:1337/admin # Strapi admin, přímo
http://localhost:15672 # RabbitMQ UI, přímo

Toto je záložní varianta pouze pro debugging — standardní způsob práce se stackem jsou *.sencai.localhost adresy výše.

Pro rychlejší vývoj lze služby spouštět mimo Docker:

Terminál
# Backend (Strapi)
cd sencai.space && npm run develop
# Frontend (Nuxt)
cd sencai.space-frontend && npm run dev
# API Manager
cd api-manager && npm run dev
Terminál
mysql -h 127.0.0.1 -P 3306 -u root -p
Terminál
psql -h localhost -p 5434 -U cloud_user -d cloud_connector
Terminál
# Všechny služby
docker compose -f orchestration/docker-compose.yml logs -f
# Jedna služba
docker compose -f orchestration/docker-compose.yml logs -f backend
Terminál
# Zastavit stack
cd orchestration && ./run-local.sh stop
# Smazat úplně vše (včetně dat!)
docker compose -f orchestration/docker-compose.yml down -v
ProblémPříčinaŘešení
„Port already in use”Port je obsazenýZměňte port v .env
Strapi se nespustíMySQL ještě není readyPočkejte 30 s a restartujte
RabbitMQ connection refusedJeště není readyZkontrolujte logy
Keycloak 503Pomalý start (normální)Počkejte 30–90 s

Kompletní referenci najdete v kořenovém CLAUDE.md.