service-teams-browser-bot/AZURE_SETUP.md
ValueOn AG dced747666 Add Gateway WebSocket integration and CI/CD pipeline
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 22:55:00 +01:00

200 lines
4.1 KiB
Markdown

# 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/<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:
```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 <GITHUB_USERNAME> \
--password <GITHUB_PAT>
```
---
## 3. Gateway Konfiguration
### 3.1 Environment Variable im Gateway
In `env_int.env` (oder Azure App Service Configuration):
```
TEAMSBOT_BROWSER_BOT_URL=https://teams-browser-bot.happysky-12345.westeurope.azurecontainerapps.io
```
### 3.2 Gateway neu deployen
```bash
# Push to int branch triggers deployment
git push origin 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