98 lines
3.5 KiB
Markdown
98 lines
3.5 KiB
Markdown
<!-- status: done -->
|
|
<!-- started: 2026-05-25 -->
|
|
<!-- component: platform -->
|
|
|
|
# INT-Umgebung auf Infomaniak migrieren
|
|
|
|
## Beschreibung und Kontext
|
|
|
|
Migration der `poweron-swiss` INT-Umgebung (platform-core, ui-nyla) von Azure auf Infomaniak Public Cloud.
|
|
Betrifft nur `poweron-swiss`-Repos. Die `poweron`-Repos (gateway, ui-nyla) bleiben auf Azure.
|
|
|
|
## Checkliste
|
|
|
|
### Env-Dateien (platform-core, ui-nyla)
|
|
|
|
- [x] `env-int.env`: APP_API_URL → `https://api-int.poweron.swiss`
|
|
- [x] `env-int.env`: DB_HOST → `db-int.poweron.swiss`
|
|
- [x] `env-int.env`: DB_USER → `poweron_dev`
|
|
- [x] `env-int.env`: OAuth-Redirect-URIs → `api-int.poweron.swiss`
|
|
- [x] `env-int.env`: CORS (APP_ALLOWED_ORIGINS) → alle UI-Domains (poweron.swiss + poweron-center.net)
|
|
- [x] `env-int.env`: APP_KEY_SYSVAR → `/srv/platform-core/shared/secrets/master_key.txt`
|
|
- [x] `env-int.env`: APP_LOGGING_LOG_DIR → `srv/platform-core/shared/logs`
|
|
- [x] `env-int.env`: TEAMSBOT_BROWSER_BOT_URL → `http://teamsbot.poweron.swiss:4100`
|
|
- [x] `env-prod.env`: DB_HOST → `db.poweron.swiss`
|
|
- [x] `env-prod.env`: CORS aktualisiert
|
|
- [x] `env-prod.env`: TEAMSBOT_URL aktualisiert
|
|
- [x] `ui-nyla` env-int.env: bereits korrekt (`VITE_API_BASE_URL=https://api-int.poweron.swiss`)
|
|
|
|
### OAuth-Provider (externe Portale)
|
|
|
|
- [x] Microsoft Entra: Redirect-URIs auf `api-int.poweron.swiss` aktualisiert
|
|
- [x] Google OAuth Console: Redirect-URIs auf `api-int.poweron.swiss` aktualisiert
|
|
|
|
### DNS
|
|
|
|
- [x] `db.poweron.swiss` → 10.20.0.21 (porta-main-db)
|
|
- [x] `db-int.poweron.swiss` → 10.20.0.175 (porta-int-db)
|
|
- [x] `teamsbot.poweron.swiss` → eingerichtet
|
|
- [x] `api-int.poweron.swiss` → eingerichtet
|
|
|
|
### Server: porta-int-db (db-int.poweron.swiss)
|
|
|
|
SSH: `ssh -i ~/.ssh/ida-laptop.pem ubuntu@37.156.42.67`
|
|
|
|
- [x] VM läuft, SSH-Verbindung OK
|
|
|
|
**Schritt 1: Bestand prüfen**
|
|
|
|
- [x] PostgreSQL-Status prüfen
|
|
```
|
|
sudo systemctl status postgresql
|
|
```
|
|
- [x] Falls PostgreSQL läuft: vorhandene User prüfen
|
|
```
|
|
sudo -u postgres psql -c "\du" --> USER poweron_dev exists
|
|
```
|
|
- [x] Vorhandene Datenbanken prüfen
|
|
```
|
|
sudo -u postgres psql -c "\l"
|
|
```
|
|
- [x] pg_hba.conf prüfen (Zugriff vom internen Subnetz?)
|
|
```
|
|
sudo cat /etc/postgresql/*/main/pg_hba.conf | grep -v "^#" | grep -v "^$"
|
|
```
|
|
|
|
**Schritt 2: Passwort + Zugriff**
|
|
|
|
- [x] Passwort für `poweron_dev` gesetzt
|
|
- [x] Verbindungstest lokal auf DB-VM OK (`psql -h 127.0.0.1 -U poweron_dev -d postgres -c "SELECT 1;"`)
|
|
|
|
### Server: porta-int-platform-core (api-int.poweron.swiss)
|
|
|
|
- [x] Verbindungstest zur DB OK
|
|
- [x] Master Key abgelegt (`/srv/platform-core/shared/secrets/master_key.txt`)
|
|
- [x] Log-Verzeichnis vorhanden
|
|
- [x] App-Verzeichnis + Git-Repo vorhanden
|
|
- [x] Python venv vorhanden
|
|
- [x] systemd-Service `platform-core` konfiguriert
|
|
- [x] Nginx: `client_max_body_size 0`, WebSocket-Upgrade, Timeouts 600s, `proxy_request_buffering off` (analog PROD)
|
|
- [x] SSL: Let's Encrypt Zertifikat fuer `api-int.poweron.swiss` aktiv
|
|
|
|
### DB-Passwort verschlüsseln
|
|
|
|
- [x] Passwort in `env-int.env` eingetragen und verschlüsselt (`DB_PASSWORD_SECRET = INT_ENC:...`)
|
|
|
|
### Forgejo CI/CD
|
|
|
|
- [x] Workflow `int_porta-int-platform-core.yml` geprüft — zeigt korrekt auf `api-int.poweron.swiss`, Branch `int`, Pfad `/srv/platform-core/current`
|
|
|
|
### Wiki
|
|
|
|
- [x] DNS-Einträge für DB-Server in `infrastructure.md` nachgetragen
|
|
- [x] CHANGELOG aktualisiert
|
|
|
|
## Notizen
|
|
|
|
- SSH auf porta-int-db geht nur über öffentliche IP `37.156.42.67` (DNS `db-int.poweron.swiss` zeigt auf interne IP 10.20.0.175, korrekt für App-Zugriff)
|
|
- SSH auf porta-main-db: `37.156.40.141`
|