Migrate all repos into monorepo context folders

Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
      Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
      Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)

Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
This commit is contained in:
2026-06-30 20:39:52 +02:00
parent 2f2b295531
commit a5f8fb49ab
1717 changed files with 447332 additions and 0 deletions
@@ -0,0 +1,130 @@
---
name: "db-openshift-deploy"
displayName: "DB OpenShift Deploy"
description: "Manuelles Deployment im DB-Konzern: Docker-Image bauen, ins Artifactory (jFrog/bahnhub) pushen und auf einem OpenShift-Cluster (DBCS) per oc deployen. Inklusive Secrets, Image-Pull-Secret und Troubleshooting."
keywords: ["openshift", "oc cli", "dbcs", "artifactory", "bahnhub", "docker image", "kubernetes deployment", "image pull secret", "imagepullbackoff"]
author: "einfachbahn-lab"
---
# DB OpenShift Deploy
## Overview
Diese Power bündelt das Wissen, um eine containerisierte Anwendung im DB-Konzern
**manuell** auf einem OpenShift-Cluster (DB Container Services, DBCS) zu betreiben:
Image mit Docker bauen, ins **Artifactory** (`bahnhub.tech.rz.db.de`) pushen und mit
`oc apply` deployen. Ideal für Prototypen, Labs und kleine Services. Für den
standardisierten, compliance-konformen Weg siehe die Power **DB pipeship Onboarding**.
## Onboarding
### Voraussetzungen
- **DeBi-Account** (SSO für Git, Artifactory, OpenShift). Für GitLab ist zusätzlich eine Bestellung im Digitalshop nötig.
- **Docker Desktop** (Image-Build)
- **`oc` CLI** (OpenShift-Client; aus der Console: `?`*Command Line Tools*)
- Ein **Docker-Repo im Artifactory** (einmalig über Self-Service https://bass.tech.db.de/welcome beantragen)
- **Artifactory-API-Key**: https://bahnhub.tech.rz.db.de → Profil → *Edit Profile* → API Key
### Wichtige Links
- Artifactory Self-Service: https://bass.tech.db.de/welcome
- jFrog Artifactory: https://bahnhub.tech.rz.db.de/ui/packages
- GitLab: https://git.tech.rz.db.de/
- OpenShift Console (Beispiel): https://console-openshift-console.apps.dbcs-riga.comp.db.de/
## Key Concepts
| Begriff | Bedeutung |
|---------|-----------|
| Image | Unveränderliches Paket aus App + Abhängigkeiten + Laufzeit |
| Registry | Image-Speicher — hier Artifactory `bahnhub.tech.rz.db.de` |
| OpenShift | Enterprise-Kubernetes von Red Hat (= k8s + Console, `oc`, `Route`, strenge SCC) |
| Deployment | Beschreibt den Pod (Image, Env, Ressourcen, Health-Checks) |
| Service | Cluster-interne stabile Adresse |
| Route | OpenShift-Objekt: HTTPS-Zugang von außen (TLS-Termination) |
| PVC | Persistenter Speicher, überlebt Pod-Neustarts |
## Common Workflows
### 1. Image bauen + pushen
**Immer `--platform linux/amd64`** (auch auf Apple Silicon), Base-Images aus dem
Artifactory-Mirror (kein Docker-Hub-Direktzugriff im Cluster).
```bash
docker login einfachbahnlab-docker-stage-local.bahnhub.tech.rz.db.de # User=DeBi, Pass=API-Key
docker build --platform linux/amd64 \
-t einfachbahnlab-docker-stage-local.bahnhub.tech.rz.db.de/api-viewer:0.8.0 .
docker push einfachbahnlab-docker-stage-local.bahnhub.tech.rz.db.de/api-viewer:0.8.0
```
### 2. Erst-Setup im Namespace
```bash
# Am Cluster anmelden (öffnet SSO im Browser)
oc login https://api.dbcs-riga.comp.db.de:6443
# Image-Pull-Secret (sonst ImagePullBackOff)
oc create secret docker-registry artifactory-pull -n einfachbahn-dev \
--docker-server=einfachbahnlab-docker-stage-local.bahnhub.tech.rz.db.de \
--docker-username=DEIN_USER --docker-password=DEIN_API_KEY
# App-Secret (vertrauliche Werte)
oc create secret generic babedas-api-viewer -n einfachbahn-dev \
--from-literal=AUTH_USER=... --from-literal=AUTH_PASS=...
```
### 3. Deployen
Manifeste mit Platzhaltern `<NAMESPACE>`, `<REGISTRY>`, `<TAG>` ersetzen und anwenden
(Reihenfolge: pvc → deployment → service → route):
```bash
for m in k8s/pvc.yaml k8s/deployment.yaml k8s/service.yaml k8s/route.yaml; do
sed -e "s|<NAMESPACE>|einfachbahn-dev|g" \
-e "s|<REGISTRY>|einfachbahnlab-docker-stage-local.bahnhub.tech.rz.db.de|g" \
-e "s|<TAG>|0.8.0|g" "$m" | oc apply -f -
done
oc rollout status deployment/api-viewer -n einfachbahn-dev
```
### 4. Betrieb / Diagnose
```bash
oc get pods -n einfachbahn-dev -l app=api-viewer
oc logs -f deployment/api-viewer -n einfachbahn-dev | grep -v "GET /"
oc exec -it deployment/api-viewer -n einfachbahn-dev -- sh
oc set env deployment/api-viewer -n einfachbahn-dev FETCH_ON_START=true
oc delete pod -l app=api-viewer -n einfachbahn-dev # Neustart nach Secret-Änderung
```
## OpenShift-Besonderheiten (wichtig)
- **Non-root**: Container laufen mit zufälliger UID. Schreib-Verzeichnisse weltbeschreibbar machen (`chmod 777 /app/data`), unter `/app` statt `/`.
- **`restricted` SCC**: `privileged: false`, `runAsNonRoot: true`. Kein Docker-in-Docker.
- **Kein Internet**: Images nur aus Artifactory-Mirror (`docker-hub-remote.bahnhub.tech.rz.db.de`).
- **`Route` statt `Ingress`** für externen HTTPS-Zugang.
## Troubleshooting
### Pod: `ImagePullBackOff`
Image-Pull-Secret `artifactory-pull` fehlt/falsch, oder Image-Tag existiert nicht. Secret neu anlegen, Tag prüfen.
### Pod: `CreateContainerConfigError`
App-Secret fehlt oder ein referenzierter Key existiert nicht.
### `exec format error` / sofortiger Crash
Falsche Architektur — mit `--platform linux/amd64` neu bauen.
### `docker push` → `unauthorized` / `denied`
Nicht eingeloggt (`docker login`) oder kein Push-Recht/Repo fehlt (Self-Service prüfen).
### 502 Bad Gateway
Pod noch nicht `ready` — Logs prüfen, warten.
### Daten weg nach Redeploy
PVC prüfen: `oc get pvc -n einfachbahn-dev` (sollte erhalten bleiben).
## Best Practices
- Feste, semantische Tags (`0.8.0`), kein `latest` für Deployments → nachvollziehbare Rollbacks.
- Health-Checks (`livenessProbe`/`readinessProbe` auf `/health`) im Deployment.
- Keine Secrets im Image oder Git — immer als OpenShift-Secret.
- PVC niemals beim Aufräumen mitlöschen, wenn Daten erhalten bleiben sollen.
## Weiterführend
Vollständige Doku, Scripts (`build-and-push.sh`, `deploy.sh`, `create-secret.sh`) und
k8s-Manifest-Templates im Repo `einfachbahn-lab/doku/deployment-doku` (`docs/01``docs/07`,
`scripts/`, `k8s/`).