Nasazení na AWS — krok za krokem
deploy/aws = Terraform modul: ECS Fargate (Web + MCP) za ALB, RDS Postgres, CloudWatch logs.
1. Předpoklady
- Terraform ≥ 1.5 + AWS credentials (
aws configure/ env vars) s právy na vytváření VPC-scoped zdrojů, ECS, RDS, ALB, IAM. - Tři image v registru, ze kterého může ECS stahovat (ECR, nebo GHCR public).
2. Inicializace
cd deploy/aws
terraform init
3. Apply
terraform apply \
-var image_registry=ghcr.io/your-org/cmind \
-var image_tag=1.0.0 \
-var owner_email=you@example.com \
-var owner_password='Change-Me-Str0ng!' \
-var pg_password="$(openssl rand -hex 16)" \
-var discovery_join_token="$(openssl rand -hex 24)"
Vytvoří: RDS Postgres (appdb), ECS cluster, Fargate služby pro Web + MCP, ALB (Web na /,
MCP na /mcp), security groups, CloudWatch log group, ADOT (AWS Distro for
OpenTelemetry) collector sidecar v každém tasku. Aplikace exportuje OTLP do sidecaru, ten posílá
trace do X-Ray, metriky do CloudWatch (EMF, namespace cmind); logy zůstávají na
awslogs driveru jako compact JSON. Discovery zapnuto pro Web. Task role uděluje sidecaru
přístup k X-Ray + CloudWatch pro zápis — žádný collector není třeba spouštět samostatně.
Používá default VPC/subnets účtu pro stručnost. Pro produkci připojte vlastní VPC, privátní subnets, HTTPS listener (ACM cert).
4. Získejte URL
terraform output web_url # ALB root
terraform output mcp_url # ALB /mcp
Otevřete web_url, přihlaste se jako owner (při prvním přihlášení vynucena změna hesla).
5. Přidání node agentů (samostatně)
Fargate nepovoluje privilegované/DinD, takže agenty spouštjte jinde a směřujte je na web_url:
- ECS na EC2 — capacity provider s
privileged = truetask definitions, které spouštějícmind-node-agent. - EKS — Helm chart (kubernetes.md) s
nodeAgent.privileged=true.
Nastavte NodeAgent__MainUrl=<web_url>, NodeAgent__AdvertiseUrl=<agent reachable url>,
NodeAgent__JwtSecret=<discovery_join_token>. Agenti se sami registrují — viz
../operations/node-discovery.md.
6. Ověření
aws logs tail /ecs/cmind --since 5m # compact JSON logy
curl -s "$(terraform output -raw web_url)/version"
Produkční poznámky
- Přidejte HTTPS listener + ACM certifikát; omezte ALB security group.
- Ukládejte tajemství do AWS Secrets Manager / SSM, injectujte přes task-definition
secretsmísto plaintextovéhoenvironment. - Zapněte RDS Multi-AZ + zálohy.
- Traces (X-Ray), metriky (CloudWatch EMF), logy (CloudWatch Logs) jsou automaticky propojeny přes
ADOT sidecar; korelace přes
trace_id. Viz ../operations/logging.md. - Aplikace již směřuje
OTEL_EXPORTER_OTLP_ENDPOINTna in-task sidecar; přesměrujte na externí collector, pokud preferujete centralizaci.
Copy-trading agent + Secrets Manager (S5)
deploy/aws/copy-agent.tf přidává copy-agent ECS Fargate službu hostující CopyEngineSupervisor
(App:Copy:Enabled=true, App:Features:CopyTrading=true) bez ALB — worker držící dlouho běžící
cTrader sockety. Connection string k DB je uložen v AWS Secrets Manager, injectovaný přes
task's secrets block (execution role má secretsmanager:GetSecretValue pouze pro toto tajemství),
ne plaintextový env. Každý task's NodeName defaultuje na svůj container hostname (unique per Fargate task), takže
DB lease atribuuje běžící profily per task — dva tasky nikdy nehostují jeden profil. Škálujte
copy_agent_count pro přidání copy kapacity; DataProtection key ring sdílen přes Postgres, takže jakýkoliv task
může dešifrovat uložené Open API tokeny.