# Azure Setup für Teams Browser Bot ## Voraussetzungen 1. Azure CLI installiert und eingeloggt 2. GitHub Repository erstellt unter `valueonag/service-teams-browser-bot` --- ## 1. Azure Container App erstellen ### 1.1 Resource Group (falls nicht vorhanden) ```bash az group create \ --name rg-poweron-int \ --location westeurope ``` ### 1.2 Container Apps Environment ```bash az containerapp env create \ --name cae-poweron-int \ --resource-group rg-poweron-int \ --location westeurope ``` ### 1.3 Container App erstellen ```bash az containerapp create \ --name teams-browser-bot \ --resource-group rg-poweron-int \ --environment cae-poweron-int \ --image ghcr.io/valueonag/service-teams-browser-bot:latest \ --target-port 4100 \ --ingress external \ --cpu 2 \ --memory 4Gi \ --min-replicas 0 \ --max-replicas 3 \ --env-vars \ NODE_ENV=production \ PORT=4100 \ GATEWAY_WS_URL=wss://gateway-int.poweron-center.net/api/teamsbot/bot/ws \ BOT_NAME="PowerOn AI" \ BOT_HEADLESS=true \ LOG_LEVEL=info \ SCREENSHOT_ON_ERROR=true ``` ### 1.4 Container App URL notieren ```bash az containerapp show \ --name teams-browser-bot \ --resource-group rg-poweron-int \ --query properties.configuration.ingress.fqdn \ --output tsv ``` Ergebnis z.B.: `teams-browser-bot.happysky-12345.westeurope.azurecontainerapps.io` --- ## 2. GitHub Actions Setup ### 2.1 Azure Service Principal erstellen ```bash az ad sp create-for-rbac \ --name "github-teams-browser-bot" \ --role contributor \ --scopes /subscriptions//resourceGroups/rg-poweron-int \ --sdk-auth ``` ### 2.2 GitHub Secret hinzufügen 1. GitHub Repo → Settings → Secrets and variables → Actions 2. New repository secret: `AZURE_CREDENTIALS` 3. Wert: JSON Output vom vorherigen Befehl ### 2.3 GitHub Container Registry Zugriff Der Workflow verwendet `GITHUB_TOKEN` automatisch für ghcr.io. Falls Azure die Images nicht pullen kann: ```bash # PAT mit read:packages Scope erstellen auf GitHub # Dann in Azure: az containerapp registry set \ --name teams-browser-bot \ --resource-group rg-poweron-int \ --server ghcr.io \ --username \ --password ``` --- ## 3. Gateway Konfiguration ### 3.1 Environment Variable im Gateway Der Bot Service ist **multi-instance-fähig**: Ein Bot kann mit allen Gateway-Instanzen (main, int, dev) arbeiten. In **jeder** Gateway-Instanz die gleiche Bot URL konfigurieren: **env_main.env:** ``` TEAMSBOT_BROWSER_BOT_URL=https://teams-browser-bot..azurecontainerapps.io ``` **env_int.env:** ``` TEAMSBOT_BROWSER_BOT_URL=https://teams-browser-bot..azurecontainerapps.io ``` **env_dev.env:** ``` TEAMSBOT_BROWSER_BOT_URL=https://teams-browser-bot..azurecontainerapps.io ``` **Wie es funktioniert:** 1. Gateway sendet Join-Request an Bot mit `gatewayWsUrl` Parameter 2. `gatewayWsUrl` enthält die volle WebSocket-URL zurück zum aufrufenden Gateway 3. Bot verbindet sich zur richtigen Gateway-Instanz (main/int/dev) ### 3.2 Gateway neu deployen ```bash # Push to respective branch triggers deployment git push origin main # für main git push origin int # für int ``` --- ## 4. DNS (Optional) Falls du eine eigene Domain verwenden möchtest: ```bash az containerapp hostname add \ --name teams-browser-bot \ --resource-group rg-poweron-int \ --hostname bot.poweron.swiss # Dann DNS A-Record oder CNAME auf die Container App zeigen ``` --- ## 5. Monitoring ### Logs anzeigen ```bash az containerapp logs show \ --name teams-browser-bot \ --resource-group rg-poweron-int \ --follow ``` ### Metriken ```bash az containerapp show \ --name teams-browser-bot \ --resource-group rg-poweron-int \ --query properties.latestRevisionFqdn ``` --- ## 6. Kosten Azure Container Apps (Consumption Plan): - **vCPU**: ~$0.000024/vCPU-second - **Memory**: ~$0.000003/GiB-second - **Requests**: Erste 2M/Monat kostenlos Geschätzte Kosten bei 10h Bot-Nutzung/Tag: - ~$15-25/Monat (deutlich günstiger als die alte VM!) --- ## 7. Troubleshooting ### Container startet nicht ```bash # Logs prüfen az containerapp logs show \ --name teams-browser-bot \ --resource-group rg-poweron-int \ --type system # Revision Status az containerapp revision list \ --name teams-browser-bot \ --resource-group rg-poweron-int \ --output table ``` ### Playwright/Chrome Probleme Container Apps unterstützen keine GPU. Falls Chrome-Probleme: 1. Sicherstellen dass `BOT_HEADLESS=true` 2. Shared memory erhöhen (im Dockerfile bereits konfiguriert) ### WebSocket Verbindung fehlschlägt 1. Prüfen ob Gateway CORS erlaubt 2. Prüfen ob Container App WebSockets unterstützt (Standard: ja) 3. Gateway Logs prüfen