AWS-Bereitstellung — Schritt für Schritt
deploy/aws = Terraform-Modul: ECS Fargate (Web + MCP) hinter ALB, RDS Postgres, CloudWatch-Protokolle.
1. Voraussetzungen
- Terraform ≥ 1.5 + AWS-Anmeldedaten (
aws configure/ Umgebungsvariablen) mit Rechten zum Erstellen von VPC-bezogenen Ressourcen, ECS, RDS, ALB, IAM. - Drei Images in einer Registry, die ECS abrufen kann (ECR oder GHCR öffentlich).
2. Initialisierung
cd deploy/aws
terraform init
3. Anwenden
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)"
Erstellt: RDS Postgres (appdb), ECS-Cluster, Fargate-Services für Web + MCP, ALB (Web unter /, MCP unter /mcp), Sicherheitsgruppen, CloudWatch-Protokollgruppe, ADOT (AWS Distro for OpenTelemetry) Collector-Sidecar in jeder Task. Die App exportiert OTLP an den Sidecar, der Traces an X-Ray und Metriken an CloudWatch (EMF, Namespace cmind) versendet; Protokolle bleiben auf dem awslogs-Treiber als kompaktes JSON. Ermittlung für Web aktiviert. Task-Rolle gewährt Sidecar X-Ray + CloudWatch-Schreibzugriff — kein Collector zum Selberlaufen erforderlich.
Verwendet für Kürze das Standard-VPC/Subnets des Kontos. Für die Produktion eigene VPC, private Subnetze, HTTPS-Listener (ACM-Zertifikat) verdrahten.
4. URLs abrufen
terraform output web_url # ALB-Wurzel
terraform output mcp_url # ALB /mcp
Öffnen Sie web_url, melden Sie sich mit dem Besitzer an (erzwungener Passwortänderung beim ersten Login).
5. Node-Agenten hinzufügen (separate)
Fargate verbietet privilegierte/DinD, daher führen Sie Agenten an anderer Stelle aus und verweisen auf web_url:
- ECS auf EC2 — Kapazitätsanbieter mit Task-Definitionen
privileged = truemitcmind-node-agent. - EKS — Helm-Diagramm (kubernetes.md) mit
nodeAgent.privileged=true.
Setzen Sie NodeAgent__MainUrl=<web_url>, NodeAgent__AdvertiseUrl=<agent erreichbare url>, NodeAgent__JwtSecret=<discovery_join_token>. Agenten registrieren sich selbst — siehe ../operations/node-discovery.md.
6. Überprüfung
aws logs tail /ecs/cmind --since 5m # kompakte JSON-Protokolle
curl -s "$(terraform output -raw web_url)/version"
Produktionshinweise
- Fügen Sie HTTPS-Listener + ACM-Zertifikat hinzu; beschränken Sie ALB-Sicherheitsgruppe.
- Speichern Sie Geheimnisse in AWS Secrets Manager / SSM, injizieren Sie über Task-Definition
secretsanstelle von Klartextenvironment. - Aktivieren Sie RDS Multi-AZ + Sicherungen.
- Traces (X-Ray), Metriken (CloudWatch EMF), Protokolle (CloudWatch Logs) werden automatisch über ADOT-Sidecar verdrahtet; korrelieren Sie auf
trace_id. Siehe ../operations/logging.md. - Die App verweist bereits auf in-task Sidecar
OTEL_EXPORTER_OTLP_ENDPOINT; verweisen Sie auf externen Collector um, wenn Sie es vorziehen zu zentralisieren.
Copy-Trading-Agent + Secrets Manager (S5)
deploy/aws/copy-agent.tf fügt copy-agent ECS Fargate-Service hinzu, der CopyEngineSupervisor hostet (App:Copy:Enabled=true, App:Features:CopyTrading=true) ohne ALB — Worker, der langlebige cTrader-Sockets hält. DB-Verbindungszeichenfolge gespeichert in AWS Secrets Manager, injiziert über den secrets-Block der Task (Ausführungsrolle gewährt secretsmanager:GetSecretValue nur auf diesem Secret), nicht Klartext env. NodeName jeder Task standardmäßig auf ihrem Container-Hostnamen (eindeutig pro Fargate-Task), daher DB-Lease-Attribute ausführende Profile pro Task — zwei Tasks hosten niemals eine doppelt. Skalieren Sie copy_agent_count, um Kopierkapazität zu erhöhen; DataProtection-Schlüsselring, der über Postgres freigegeben wird, daher kann jede Task gespeicherte Open-API-Token entschlüsseln.