Nasazení na Azure — krok za krokem
deploy/azure/main.bicep provisionuje bezestavovou vrstvu na Azure Container Apps plus Postgres Flexible Server + Log Analytics.
1. Předpoklady
- Azure CLI (
az loginhotovo), subscription, oprávnění vytvářet resource groups. - Tři image pushnuté do registru, ze kterého může Azure stahovat (např. GHCR public, nebo ACR).
2. Vytvořte resource group
az group create -n cmind-rg -l westeurope
3. Deploy Bicep
az deployment group create -g cmind-rg -f deploy/azure/main.bicep \
-p imageRegistry=ghcr.io/your-org/cmind imageTag=1.0.0 \
ownerEmail=you@example.com \
ownerPassword='Change-Me-Str0ng!' \
pgPassword="$(openssl rand -hex 16)" \
discoveryJoinToken="$(openssl rand -hex 24)"
Vytvoří: Container Apps environment, Web (external ingress), MCP (external ingress), Postgres Flexible Server + appdb, Log Analytics, workspace-based Application Insights komponent. Discovery zapnuto pro Web. Jeho connection string je injectovaný do Web + MCP jako APPLICATIONINSIGHTS_CONNECTION_STRING, takže traces + metriky exportují nativně do App Insights zatímco logy přistávají ve stejném Log Analytics workspace — žádný collector není třeba. Předejte -p otlpEndpoint=... pro také forwardování do OTLP collectoru.
4. Získejte URL
az deployment group show -g cmind-rg -n main --query properties.outputs
# webUrl, mcpUrl
Otevřete webUrl, přihlaste se jako owner (při prvním přihlášení vynucena změna hesla).
5. Přidání node agentů (samostatně)
Container Apps nemůže spouštět privilegované/DinD, takže agenty spouštějte jinde a směřujte je na webUrl:
- AKS — deploy Helm chart (kubernetes.md) s
nodeAgent.privileged=true, škálujte Web/MCP na 0 pokud chcete pouze agent vrstvu. - VM / VMSS — spusťte
cmind-node-agentimage--privilegedsNodeAgent:MainUrl=<webUrl>,NodeAgent:AdvertiseUrl=<vm reachable url>,NodeAgent:JwtSecret=<discoveryJoinToken>.
Agenti se sami registrují do jednoho heartbeat intervalu — viz ../operations/node-discovery.md.
6. Ověření
az containerapp logs show -g cmind-rg -n cmind-web --tail 50 # compact JSON logy
curl -s <webUrl>/version
Produkční poznámky
- Předejte Azure Front Door / App Gateway pro TLS + WAF.
- Ukládejte tajemství do Key Vault; předejte stabilní Data Protection cert (
App__DataProtectionCertBase64/...Password) aby key ring přežil restarty replik. - App Insights (traces+metriky) + Log Analytics (logy) jsou automaticky propojeny; korelace přes
trace_id. Viz ../operations/logging.md. - Nastavte
otlpEndpointparam (neboOTEL_EXPORTER_OTLP_ENDPOINTna aplikacích) pro také forwardování do collectoru. - Container Apps
scalepravidla (min/max) jsou zapojená v Bicep.
Copy-trading agent + Key Vault (S5)
deploy/azure/main.bicep také provisionuje copy-agent Container App hostující CopyEngineSupervisor (App:Copy:Enabled=true, App:Features:CopyTrading=true) bez ingressu — worker držící dlouho běžící cTrader sockety. Čte DB connection string z Azure Key Vault secret přes user-assigned managed identity (Key Vault Secrets User role) místo inline plaintext secret. Každá replica's NodeName defaultuje na svůj container hostname (unique), takže DB lease atribuuje běžící profily per replica a dvě repliky nikdy nehostují jednu duplikátně. Škálujte minReplicas/maxReplicas pro přidání copy kapacity; DataProtection key ring sdílen přes Postgres, takže jakákoliv replica může dešifrovat uložené Open API tokeny. Výstupy: copyAgentName, keyVaultName.