service-teams-browser-bot/AZURE_SETUP.md
ValueOn AG a4062fc57c Update docs: multi-instance Gateway support
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 23:00:54 +01:00

4.7 KiB

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)

az group create \
  --name rg-poweron-int \
  --location westeurope

1.2 Container Apps Environment

az containerapp env create \
  --name cae-poweron-int \
  --resource-group rg-poweron-int \
  --location westeurope

1.3 Container App erstellen

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

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

az ad sp create-for-rbac \
  --name "github-teams-browser-bot" \
  --role contributor \
  --scopes /subscriptions/<SUBSCRIPTION_ID>/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:

# 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 <GITHUB_USERNAME> \
  --password <GITHUB_PAT>

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.<xyz>.azurecontainerapps.io

env_int.env:

TEAMSBOT_BROWSER_BOT_URL=https://teams-browser-bot.<xyz>.azurecontainerapps.io

env_dev.env:

TEAMSBOT_BROWSER_BOT_URL=https://teams-browser-bot.<xyz>.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

# 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:

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

az containerapp logs show \
  --name teams-browser-bot \
  --resource-group rg-poweron-int \
  --follow

Metriken

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

# 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