fix: DockerSecretsResolver - don't normalize absolute paths like /var/www/html/...
Some checks failed
Deploy Application / deploy (push) Has been cancelled

This commit is contained in:
2025-11-24 21:28:25 +01:00
parent 4eb7134853
commit 77abc65cd7
1327 changed files with 91915 additions and 9909 deletions

328
deployment/MIGRATION.md Normal file
View File

@@ -0,0 +1,328 @@
# Migration Guide: Legacy System → Two-Layer Deployment
Diese Anleitung beschreibt die Migration vom alten Deployment-System zum neuen Two-Layer Deployment-System.
## Übersicht
Das neue System trennt klar zwischen:
- **Infrastruktur-Layer**: Traefik, Gitea, PostgreSQL (läuft dauerhaft)
- **Application-Layer**: PHP-App mit Nginx, Redis, Queue Workers (wird häufig deployt)
## Voraussetzungen
- Backup aller Daten (PostgreSQL, Gitea, Volumes)
- SSH-Zugriff auf Production-Server
- Docker und Docker Compose installiert
- Ausreichend Disk-Space für Migration
## Schritt 1: Backup erstellen
### PostgreSQL Backup
```bash
# Auf dem Server
cd ~/deployment/legacy/stacks/postgresql-production
docker compose exec postgres pg_dump -U postgres michaelschiemer_production > /tmp/postgres_backup_$(date +%Y%m%d_%H%M%S).sql
# Staging-Datenbank (falls vorhanden)
docker compose exec postgres pg_dump -U postgres michaelschiemer_staging > /tmp/postgres_staging_backup_$(date +%Y%m%d_%H%M%S).sql
```
### Gitea Backup
```bash
# Gitea-Daten Volume sichern
docker run --rm -v gitea-data:/data -v $(pwd):/backup alpine tar czf /backup/gitea_backup_$(date +%Y%m%d_%H%M%S).tar.gz /data
```
### Application Volumes Backup
```bash
# Production-Code Volume
docker run --rm -v production-code:/data -v $(pwd):/backup alpine tar czf /backup/production_code_backup_$(date +%Y%m%d_%H%M%S).tar.gz /data
# Production-Storage Volume
docker run --rm -v production-storage:/data -v $(pwd):/backup alpine tar czf /backup/production_storage_backup_$(date +%Y%m%d_%H%M%S).tar.gz /data
```
## Schritt 2: Infrastruktur deployen
### 2.1 Verzeichnisstruktur erstellen
```bash
# Auf dem Server
mkdir -p /home/deploy/infrastructure/{traefik,gitea,postgresql}/secrets
```
### 2.2 Secrets erstellen
```bash
# Traefik ACME E-Mail
echo "your-email@example.com" > /home/deploy/infrastructure/traefik/secrets/acme_email.txt
chmod 600 /home/deploy/infrastructure/traefik/secrets/acme_email.txt
# Gitea PostgreSQL Passwort
openssl rand -base64 32 > /home/deploy/infrastructure/gitea/secrets/postgres_password.txt
chmod 600 /home/deploy/infrastructure/gitea/secrets/postgres_password.txt
# Gitea Redis Passwort
openssl rand -base64 32 > /home/deploy/infrastructure/gitea/secrets/redis_password.txt
chmod 600 /home/deploy/infrastructure/gitea/secrets/redis_password.txt
# Application PostgreSQL Passwort (aus altem System übernehmen oder neu generieren)
# Altes Passwort aus Legacy-System extrahieren oder neu generieren:
openssl rand -base64 32 > /home/deploy/infrastructure/postgresql/secrets/postgres_password.txt
chmod 600 /home/deploy/infrastructure/postgresql/secrets/postgres_password.txt
```
### 2.3 Infrastructure Stacks deployen
**Reihenfolge ist wichtig:**
```bash
# 1. Traefik (muss zuerst laufen)
cd /home/deploy/infrastructure/traefik
docker compose up -d
# Warten bis Traefik läuft
sleep 10
docker compose ps
# 2. PostgreSQL (wird von Application benötigt)
cd /home/deploy/infrastructure/postgresql
docker compose up -d
# Warten bis PostgreSQL läuft
sleep 10
docker compose ps
# 3. Gitea (nutzt Traefik für SSL)
cd /home/deploy/infrastructure/gitea
docker compose up -d
# Warten bis Gitea läuft
sleep 10
docker compose ps
```
### 2.4 Verifikation
```bash
# Traefik Dashboard
curl -k https://traefik.michaelschiemer.de
# PostgreSQL erreichbar
docker network inspect app-internal
# Gitea erreichbar
curl -k https://git.michaelschiemer.de
```
## Schritt 3: Daten migrieren
### 3.1 PostgreSQL-Daten migrieren
```bash
# Neue Datenbanken erstellen (falls nicht vorhanden)
docker compose exec -T postgres psql -U postgres << EOF
CREATE DATABASE michaelschiemer;
CREATE DATABASE michaelschiemer_staging;
EOF
# Production-Datenbank wiederherstellen
docker compose exec -T postgres psql -U postgres michaelschiemer < /tmp/postgres_backup_*.sql
# Staging-Datenbank wiederherstellen (falls vorhanden)
docker compose exec -T postgres psql -U postgres michaelschiemer_staging < /tmp/postgres_staging_backup_*.sql
```
### 3.2 Gitea-Daten migrieren
```bash
# Altes Gitea stoppen
cd ~/deployment/legacy/stacks/gitea
docker compose down
# Gitea-Daten Volume kopieren
docker run --rm \
-v gitea-data:/source:ro \
-v gitea-data-new:/dest \
alpine sh -c "cp -a /source/. /dest/"
# Neues Gitea starten (nutzt gitea-data Volume)
cd /home/deploy/infrastructure/gitea
docker compose up -d
```
## Schritt 4: Application deployen
### 4.1 Application-Code auf Server deployen
```bash
# Auf dem Server
mkdir -p /home/deploy/michaelschiemer/current
cd /home/deploy/michaelschiemer/current
# Code klonen (oder von altem System kopieren)
git clone https://git.michaelschiemer.de/michael/michaelschiemer.git .
# Oder: Code von altem System kopieren
# cp -r ~/deployment/legacy/stacks/production/current/* .
```
### 4.2 Secrets konfigurieren
```bash
# Secrets-Verzeichnis erstellen
mkdir -p deployment/secrets/{staging,production}
# Production Secrets (aus altem System übernehmen oder neu generieren)
openssl rand -base64 32 > deployment/secrets/production/db_password.txt
openssl rand -base64 32 > deployment/secrets/production/redis_password.txt
openssl rand -base64 32 > deployment/secrets/production/app_key.txt
chmod 600 deployment/secrets/production/*.txt
# Staging Secrets
openssl rand -base64 32 > deployment/secrets/staging/db_password.txt
openssl rand -base64 32 > deployment/secrets/staging/redis_password.txt
openssl rand -base64 32 > deployment/secrets/staging/app_key.txt
chmod 600 deployment/secrets/staging/*.txt
```
**Wichtig:** Passwörter müssen mit denen in der PostgreSQL-Infrastruktur übereinstimmen!
### 4.3 Application deployen
```bash
# Production deployen
./deployment/scripts/deploy.sh production
# Oder Staging deployen
./deployment/scripts/deploy.sh staging
```
## Schritt 5: Altes System stoppen
**Nur nach erfolgreicher Migration!**
```bash
# Alte Stacks stoppen
cd ~/deployment/legacy/stacks/production
docker compose down
cd ~/deployment/legacy/stacks/staging
docker compose down
# Alte Networks prüfen (können gelöscht werden, wenn nicht mehr benötigt)
docker network ls
```
## Schritt 6: Verifikation
### 6.1 Application erreichbar
```bash
# Production
curl -I https://michaelschiemer.de
# Staging
curl -I https://staging.michaelschiemer.de
```
### 6.2 Database-Verbindung testen
```bash
# Von Application-Container aus
docker compose exec php php console.php db:status
```
### 6.3 Health Checks
```bash
# Application Health Endpoint
curl https://michaelschiemer.de/health
# Container-Status
docker compose ps
```
## Rollback-Plan
Falls Migration fehlschlägt:
1. **Altes System wieder starten:**
```bash
cd ~/deployment/legacy/stacks/production
docker compose up -d
```
2. **Daten aus Backup wiederherstellen:**
```bash
# PostgreSQL
docker compose exec -T postgres psql -U postgres michaelschiemer < /tmp/postgres_backup_*.sql
```
3. **Probleme analysieren:**
- Logs prüfen: `docker compose logs`
- Network-Verbindungen prüfen: `docker network inspect`
- Secrets prüfen
4. **Anpassungen vornehmen und erneut migrieren**
## Checkliste
- [ ] Backup aller Daten erstellt
- [ ] Infrastruktur-Stacks deployt (Traefik, PostgreSQL, Gitea)
- [ ] Networks korrekt konfiguriert
- [ ] Secrets erstellt und konfiguriert
- [ ] PostgreSQL-Daten migriert
- [ ] Gitea-Daten migriert
- [ ] Application deployt
- [ ] Health Checks erfolgreich
- [ ] Application erreichbar
- [ ] Database-Verbindung funktioniert
- [ ] Altes System gestoppt (nach Verifikation)
## Troubleshooting
### Network-Probleme
```bash
# Networks prüfen
docker network ls
docker network inspect traefik-public
docker network inspect app-internal
docker network inspect infrastructure
```
### Secrets-Probleme
```bash
# Secrets-Dateien prüfen
ls -la deployment/secrets/production/
ls -la deployment/infrastructure/*/secrets/
# Berechtigungen prüfen
stat deployment/secrets/production/db_password.txt
```
### Container startet nicht
```bash
# Logs prüfen
docker compose logs -f <service-name>
# Container-Status
docker compose ps
# Network-Verbindungen
docker network inspect <network-name>
```
## Support
Bei Problemen während der Migration:
1. Logs sammeln: `docker compose logs > migration_logs.txt`
2. Container-Status: `docker compose ps > container_status.txt`
3. Network-Status: `docker network ls > network_status.txt`