This commit is contained in:
ValueOn AG 2026-05-24 01:51:08 +02:00
parent db4db516aa
commit 002f91464c
4 changed files with 131 additions and 9 deletions

View file

@ -66,6 +66,12 @@ Lade immer zuerst diese Datei. Dann gezielt die passende(n) Referenz-Datei(en).
| Teamsbot Director Prompts (done) | c-work/4-done/2026-04-teamsbot-director-prompts.md | Private Operator-Prompts (One-Shot/Persistent), Hybrid SPEECH_TEAMS+Agent (`needsAgent`), `_activeServices`-Registry, Reconnect-Persistenz, 26 Backend-Tests |
| **Typed Action Architecture** (canonical) | b-reference/gateway/architecture.md (Abschnitt 4-Schichten), b-reference/gateway/workflow.md (Abschnitt Typed Action Architecture), b-reference/gateway/ai-agent.md (Tool-Generierung aus Catalog), b-reference/gateway/features/trustee.md, b-reference/frontend-nyla/architecture.md (FlowEditor), c-work/3-validate/2026-04-typed-action-architecture.md, c-work/1-plan/2026-04-typed-action-followups.md | Catalog → Methods → Adapter → Runtime; FeatureInstanceRef-Envelope; Pick-not-Push; `*`-Wildcard; Save-with-errors (AC-9); DB-CLI `script_migrate_feature_instance_refs.py`; Vitest+RTL FE-Tests |
## Infrastruktur & Deployment
| Thema | Datei | Wann laden |
|-------|-------|------------|
| Deployment-Infrastruktur | b-reference/platform/infrastructure.md | Infomaniak-Projekte, Naming Convention, VM-Instanzen, Deploy-Patterns |
## Prozess & Betrieb
| Thema | Datei | Wann laden |

View file

@ -0,0 +1,112 @@
<!-- status: canonical -->
<!-- lastReviewed: 2026-05-24 -->
# Deployment-Infrastruktur
## Hosting-Provider
Infomaniak Public Cloud (OpenStack) unter dem Dach-Account **PowerOnUniverse** (ID 17397).
Horizon Dashboard: `https://api.pub1.infomaniak.cloud/horizon`
## Projektstruktur
Jeder Service-Bereich ist ein eigenes OpenStack-Projekt mit eigenem Netzwerk, eigenen Security Groups, eigenen Floating IPs. Die Kommunikation zwischen Projekten laeuft ueber oeffentliche Floating IPs.
| Projekt | OpenStack-ID | Zweck |
|---|---|---|
| **Porta** | PCP-OUJTOXY | Plattform-Kern (Frontend, Backend, DB) |
| **Service-LLM** | PCP-MPXPVCR | Private LLM (Ollama + Flask, GPU) |
| **Service-Teamsbot** | PCP-KO2UYXT | Teams-Browser-Bot |
## Naming Convention
### Schema
```
{bereich}-{env}-{komponente}
```
- **bereich:** `porta` (Plattform-Kern) oder `service` (eigenstaendiger Service)
- **env:** `main` (Produktion) oder `int` (Integration)
- **komponente:** Forgejo-Repo-Name oder `db`
### Regeln
1. Alles fuer PORTA laeuft im Projekt **Porta** mit:
- `porta-main-<repo|db>` fuer alle Produktions-Komponenten
- `porta-int-<repo|db>` fuer alle Integrations-Komponenten
2. Alle eigenstaendigen Services laufen je als **separates Projekt** mit:
- `service-main-<repo>` fuer Produktion
- `service-int-<repo>` fuer Integration (falls vorhanden)
### Instanzen
#### Projekt: Porta (PCP-OUJTOXY)
| Instanzname | Env | Komponente | Flavor | Intern IP | Floating IP | DNS |
|---|---|---|---|---|---|---|
| `porta-main-ui-nyla` | main | Frontend (React/Vite) | a2-ram4-disk20-perf1 | 10.20.0.92 | 37.156.43.5 | `porta.poweron.swiss` |
| `porta-main-platform-core` | main | Backend (FastAPI) | a2-ram4-disk50-perf1 | 10.20.0.197 | 83.228.234.207 | `api.poweron.swiss` |
| `porta-main-db` | main | PostgreSQL + pgvector | a2-ram4-disk80-perf1 | 10.20.0.21 | 37.156.40.141 | -- |
| `porta-int-ui-nyla` | int | Frontend (React/Vite) | a2-ram4-disk20-perf1 | 10.20.0.182 | 37.156.41.74 | `porta-int.poweron.swiss` |
| `porta-int-platform-core` | int | Backend (FastAPI) | a2-ram4-disk50-perf1 | 10.20.0.74 | 37.156.43.14 | `api-int.poweron.swiss` |
| `porta-int-db` | int | PostgreSQL + pgvector | a2-ram4-disk80-perf1 | 10.20.0.175 | 37.156.42.67 | -- |
Key Pair: `ida-laptop` (alle Instanzen)
#### Projekt: Service-LLM (PCP-MPXPVCR)
| Instanzname | Env | Komponente | Flavor | DNS / IP |
|---|---|---|---|---|
| `service-main-llm-private` | main | Ollama + Flask (Vision-LLM) | GPU L4 (24 GB VRAM), 8 vCPU, 16 GB RAM, 150 GB | `83.228.200.109` |
#### Projekt: Service-Teamsbot (PCP-KO2UYXT)
| Instanzname | Env | Komponente | Flavor | Floating IP | DNS |
|---|---|---|---|---|---|
| `service-main-teams-browser-bot` | main | Docker + Playwright/Chrome | a2-ram4-disk20 | 179.237.73.4 | `teamsbot.poweron.swiss` |
Key Pair: `teamsbot-deploy-key`
## Deployment-Patterns
### Porta (git pull + systemd restart)
Deploy-Workflow: `.forgejo/workflows/deploy.yml` in `plattform-core`
1. Forgejo Actions Runner verbindet per SSH auf die VM
2. `git fetch origin main && git reset --hard origin/main`
3. `pip install -r requirements.txt`
4. `sudo systemctl restart gateway`
### Private LLM (rsync + systemd restart)
Deploy-Workflow: `.github/workflows/deploy.yml` in `service-llm-private`
1. GitHub Actions (noch nicht migriert auf Forgejo) verbindet per SSH
2. `rsync` des Codes nach `/opt/ollama-webapp/app/`
3. `pip install -r requirements.txt`
4. `sudo systemctl restart ollama-webapp`
### Teams-Bot (rsync + docker compose, geplant)
Deploy-Workflow: `.forgejo/workflows/deploy.yml` in `service-teams-browser-bot`
1. Forgejo Actions Runner verbindet per SSH auf die VM
2. `rsync` des Codes nach `/opt/teamsbot/`
3. `docker compose build && docker compose up -d`
4. Health-Check auf Port 4100
## Zugriff
| Ressource | URL / Pfad |
|---|---|
| Infomaniak Cloud Console | `https://www.infomaniak.com/cloud-computing` |
| OpenStack Horizon | `https://api.pub1.infomaniak.cloud/horizon` |
| Forgejo (Git + CI/CD) | `https://git.poweron.swiss` |
| SSH Key (LLM) | `ollama-deploy-key.pem` |
| SSH Key (Teamsbot) | `teamsbot-deploy-key.pem` (geplant) |
Credentials: siehe lokale Datei `local/notes/key.txt` (nicht im Repo).

View file

@ -1,5 +1,5 @@
<!-- status: canonical -->
<!-- lastReviewed: 2026-04-05 -->
<!-- lastReviewed: 2026-05-24 -->
# PowerOn PORTA -- Komponentenübersicht
@ -9,11 +9,11 @@ PowerOn PORTA ist eine Multi-Tenant SaaS-Plattform mit Feature-Store-Modell, AI-
## Komponenten
| Komponente | Repository | Technologie | Beschreibung |
| Komponente | Repository (Forgejo) | Technologie | Beschreibung |
|-----------|-----------|-------------|-------------|
| Frontend Nyla | frontend_nyla | React/TypeScript, Vite | Zentrales UI für alle Features |
| Gateway | gateway | FastAPI, Python, PostgreSQL | Backend REST-API, Services, AI-Core |
| Private LLM | private-llm | Python | Internes LLM für Neutralisierung + sensitive Daten |
| Frontend Nyla | ui-nyla | React/TypeScript, Vite | Zentrales UI für alle Features |
| Platform Core | plattform-core | FastAPI, Python, PostgreSQL | Backend REST-API, Services, AI-Core |
| Private LLM | service-llm-private | Python | Internes LLM für Neutralisierung + sensitive Daten |
| Teams Bot | service-teams-browser-bot | TypeScript/Node.js | Bot für Teams-Meeting-Teilnahme |
| Wiki | wiki | Markdown | Dokumentation (dieses Repo) |
@ -21,10 +21,10 @@ PowerOn PORTA ist eine Multi-Tenant SaaS-Plattform mit Feature-Store-Modell, AI-
| Layer | Technologie | Pfad |
|-------|------------|------|
| Backend (Gateway) | FastAPI (Python), PostgreSQL | `@poweron/gateway` |
| Frontend | React/TypeScript (Vite) | `@poweron/frontend_nyla` |
| AI Core | Multi-Provider (Anthropic, OpenAI, Mistral, Perplexity, Tavily, PrivateLLM) | `@poweron/gateway/modules/aicore` |
| DB-Connector | PostgreSQL mit pgvector (Embeddings) | `@poweron/gateway/modules/connectors/connectorDbPostgre.py` |
| Backend (Platform Core) | FastAPI (Python), PostgreSQL | `plattform-core` |
| Frontend (Nyla) | React/TypeScript (Vite) | `ui-nyla` |
| AI Core | Multi-Provider (Anthropic, OpenAI, Mistral, Perplexity, Tavily, PrivateLLM) | `plattform-core/modules/aicore` |
| DB-Connector | PostgreSQL mit pgvector (Embeddings) | `plattform-core/modules/connectors/connectorDbPostgre.py` |
## Feature-Module

View file

@ -12,6 +12,10 @@ type: `feat` `fix` `refactor` `docs` `test` `chore` `build` · scope: `gateway
Skip: reine Refactors, Formatting, Lint, Dep-Bumps, Test-only, Wiki-Tippfehler.
## 2026-05-24
- 2026-05-24 | docs | infra | **Deployment-Infrastruktur Doku** -- Neue kanonische Seite `b-reference/platform/infrastructure.md`: Infomaniak-Projektstruktur (Porta, LLM, Teamsbot), Naming Convention (`{bereich}-{env}-{komponente}`), VM-Instanzenliste, Deploy-Patterns. TOPICS.md ergaenzt.
## 2026-05-23
- 2026-05-23 | feat | gateway+frontend-nyla | **DB Migration Backup/Restore** — Neuer Tab "Migration" auf der Datenbank-Gesundheit-Seite (SysAdmin). Backup: dynamische DB-Auswahl via Registry, Export als JSON. Restore: JSON-Upload, Validierung, Import mit Modus "Neu" (replace) oder "Zusammenfuehren" (merge). System-Objekte (Root-Mandant, Admin-User, Event-User) werden nie geloescht; ihre IDs werden beim Import automatisch auf die Live-IDs remapped. Neue Dateien: `databaseMigration.py`, 4 API-Endpoints unter `/api/admin/database-health/migration/`, MigrationTab in `AdminDatabaseHealthPage.tsx`.