feat: Complete deployment setup for code pushes

- Add pre-flight checks in deploy-update.yml
- Automatically copy docker-compose.yml and nginx config in setup-infrastructure.yml
- Add comprehensive deployment documentation
- Ready for automated code deployments via CI/CD pipeline
This commit is contained in:
2025-10-31 10:31:56 +01:00
parent 6deca7838e
commit de8fed8711
12 changed files with 1472 additions and 54 deletions

View File

@@ -312,7 +312,7 @@ docker exec gitea gitea admin actions generate-runner-token
**Status**: Wartet auf Phase 1-3 **Status**: Wartet auf Phase 1-3
**Tasks**: Secrets via Ansible zu Production deployen **Tasks**: Secrets via Ansible zu Production deployen
### Phase 5: Gitea CI/CD Secrets Configuration - **⏳ WARTET** ### Phase 5: Gitea CI/CD Secrets Configuration - **✅ ERLEDIGT**
**Status**: Wartet auf Phase 1-4 **Status**: Wartet auf Phase 1-4
**Tasks**: Repository Secrets in Gitea konfigurieren **Tasks**: Repository Secrets in Gitea konfigurieren

View File

@@ -1,9 +1,11 @@
# Deployment TODO - Komplette Implementierung # Deployment TODO - Komplette Implementierung
**Status**: 🔄 In Progress **Status**: ✅ ~95% Abgeschlossen - Ready for Testing
**Letzte Aktualisierung**: 2025-10-31 **Letzte Aktualisierung**: 2025-10-31
**Ziel**: Komplettes Deployment-Setup im `deployment/` Ordner **Ziel**: Komplettes Deployment-Setup im `deployment/` Ordner
**🎯 Nächster kritischer Schritt:** Pipeline End-to-End testen!
--- ---
## ✅ Bereits Fertig ## ✅ Bereits Fertig
@@ -105,7 +107,7 @@
### 4. CI/CD Pipeline finalisieren ### 4. CI/CD Pipeline finalisieren
**Status**: ⚠️ Existiert, aber muss konfiguriert und getestet werden **Status**: ✅ Vollständig konfiguriert - Bereit zum Testen
**Was fehlt:** **Was fehlt:**
- [x] **Gitea Repository Secrets konfigurieren:** - [x] **Gitea Repository Secrets konfigurieren:**
@@ -213,27 +215,36 @@ Siehe `deployment/CI_CD_STATUS.md` für komplette Checkliste und Setup-Anleitung
## 🎯 Priorisierte Reihenfolge ## 🎯 Priorisierte Reihenfolge
### Phase 1: Application Stack Deployment (KRITISCH) ### Phase 1: Application Stack Deployment - ABGESCHLOSSEN
1. **Application Stack zu setup-infrastructure.yml hinzufügen** 1. **Application Stack zu setup-infrastructure.yml hinzufügen**
- Task für Application Stack Deployment - Task für Application Stack Deployment
- `.env` Template erstellen - `.env` Template erstellt (`application.env.j2`)
- Database-Migration nach Deployment - Database-Migration nach Deployment
2. **Application .env Konfiguration** 2. **Application .env Konfiguration**
- Template `application.env.j2` erstellen - Template `application.env.j2` erstellt
- Passwörter aus Vault laden - Passwörter aus Vault/PostgreSQL .env laden
- Template in Playbook integrieren - Template in Playbook integriert
### Phase 2: CI/CD Setup ### Phase 2: CI/CD Setup - ABGESCHLOSSEN
3. **Gitea Runner Setup abschließen** 3. **Gitea Runner Setup abschließen**
- Token abrufen und konfigurieren - Token konfiguriert
- Runner starten - Runner läuft und ist registriert
4. **CI/CD Pipeline finalisieren** 4. **CI/CD Pipeline finalisieren**
- Secrets in Gitea konfigurieren - Secrets in Gitea konfiguriert
- Pipeline testen - ⚠️ **Pipeline testen** - NÄCHSTER SCHRITT
### ⚠️ Phase 3: Testing & Finalisierung (NÄCHSTER SCHRITT)
5. **Pipeline End-to-End testen** ⚠️ **KRITISCH**
- Test-Commit pushen oder Workflow manuell triggern
- Alle Jobs verifizieren (Tests, Build, Deploy)
- Deployment auf Production verifizieren
- Health-Check erfolgreich
- Fehler beheben falls notwendig
### Phase 3: Backup & Scripts ### Phase 3: Backup & Scripts
@@ -255,16 +266,16 @@ Siehe `deployment/CI_CD_STATUS.md` für komplette Checkliste und Setup-Anleitung
## 📋 Quick Checklist ## 📋 Quick Checklist
### Application Stack ### Application Stack
- [ ] Application Stack in `setup-infrastructure.yml` hinzufügen - [x] Application Stack in `setup-infrastructure.yml` hinzufügen
- [ ] `.env` Template (`application.env.j2`) erstellen - [x] `.env` Template (`application.env.j2`) erstellen
- [ ] Database-Migration Task hinzufügen - [x] Database-Migration Task hinzufügen
- [ ] Health-Check nach Deployment - [x] Health-Check nach Deployment
### CI/CD ### CI/CD
- [ ] Gitea Runner Token konfigurieren - [x] Gitea Runner Token konfigurieren
- [ ] Runner starten - [x] Runner starten
- [ ] Secrets in Gitea konfigurieren - [x] Secrets in Gitea konfigurieren
- [ ] Pipeline testen - [ ] Pipeline testen ⚠️ **NÄCHSTER SCHRITT**
### Scripts & Backup ### Scripts & Backup
- [ ] Backup-Playbook erstellen - [ ] Backup-Playbook erstellen

View File

@@ -0,0 +1,163 @@
# Deployment Pre-Flight Check
**Bevor du Code pushen kannst, prüfe diese Checkliste!**
---
## ✅ Kritische Prüfungen
### 1. Application Stack muss deployed sein
**Warum kritisch:**
- `deploy-update.yml` erwartet, dass `docker-compose.yml` bereits existiert
- `.env` File muss vorhanden sein für Container-Konfiguration
**Prüfen:**
```bash
ssh deploy@94.16.110.151
# Prüfe docker-compose.yml
test -f ~/deployment/stacks/application/docker-compose.yml && echo "✅ OK" || echo "❌ FEHLT"
# Prüfe .env
test -f ~/deployment/stacks/application/.env && echo "✅ OK" || echo "❌ FEHLT"
# Prüfe Container
cd ~/deployment/stacks/application
docker compose ps
```
**Falls fehlend:**
```bash
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
```
### 2. Docker Registry muss erreichbar sein
**Prüfen:**
```bash
# Vom Production-Server
ssh deploy@94.16.110.151
docker login git.michaelschiemer.de:5000 -u admin -p <password>
# Oder Test-Pull
docker pull git.michaelschiemer.de:5000/framework:latest
```
### 3. Gitea Runner muss laufen
**Prüfen:**
```bash
cd deployment/gitea-runner
docker compose ps
# Sollte zeigen: gitea-runner "Up"
```
**In Gitea UI:**
```
https://git.michaelschiemer.de/admin/actions/runners
```
- Runner sollte als "Idle" oder "Active" angezeigt werden
### 4. Secrets müssen konfiguriert sein
**In Gitea:**
```
https://git.michaelschiemer.de/michael/michaelschiemer/settings/secrets/actions
```
**Prüfen:**
- [ ] `REGISTRY_USER` vorhanden
- [ ] `REGISTRY_PASSWORD` vorhanden
- [ ] `SSH_PRIVATE_KEY` vorhanden
### 5. SSH-Zugriff muss funktionieren
**Prüfen:**
```bash
# Test SSH-Verbindung
ssh -i ~/.ssh/production deploy@94.16.110.151 "echo 'SSH OK'"
```
---
## 🧪 Pre-Deployment Test
### Test 1: Ansible-Verbindung
```bash
cd deployment/ansible
ansible -i inventory/production.yml production -m ping
# Sollte: production | SUCCESS
```
### Test 2: Application Stack Status
```bash
cd deployment/ansible
ansible -i inventory/production.yml production -a "test -f ~/deployment/stacks/application/docker-compose.yml && echo 'OK' || echo 'MISSING'"
# Sollte: "OK"
```
### Test 3: Docker Registry Login (vom Runner aus)
```bash
# Vom Development-Machine (wo Runner läuft)
docker login git.michaelschiemer.de:5000 -u <registry-user> -p <registry-password>
# Sollte: Login Succeeded
```
---
## ⚠️ Häufige Probleme
### Problem: "Application Stack nicht deployed"
**Symptom:**
- `docker-compose.yml not found` Fehler
**Lösung:**
```bash
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
```
### Problem: "Registry Login fehlschlägt"
**Symptom:**
- `unauthorized: authentication required`
**Lösung:**
1. Prüfe Secrets in Gitea
2. Prüfe Registry-Credentials
3. Teste manuell: `docker login git.michaelschiemer.de:5000`
### Problem: "SSH-Verbindung fehlschlägt"
**Symptom:**
- Ansible kann nicht zum Server verbinden
**Lösung:**
1. Prüfe SSH Key: `~/.ssh/production`
2. Prüfe SSH Config
3. Teste manuell: `ssh -i ~/.ssh/production deploy@94.16.110.151`
---
## ✅ Alles OK? Dann los!
```bash
git add .
git commit -m "feat: Add feature"
git push origin main
```
**Pipeline-Status:**
```
https://git.michaelschiemer.de/michael/michaelschiemer/actions
```
---
**Viel Erfolg!** 🚀

View File

@@ -0,0 +1,188 @@
# Deployment Projekt - Zusammenfassung
**Stand:** 2025-10-31
**Status:** ✅ CI/CD Pipeline vollständig konfiguriert und bereit zum Testen
---
## ✅ Was ist fertig?
### Infrastructure (100% abgeschlossen)
-**Traefik** - Reverse Proxy & SSL (Stack 1)
-**PostgreSQL** - Database mit automatischen Backups (Stack 2)
-**Docker Registry** - Private Registry (Stack 3)
-**Gitea** - Git Server mit CI/CD (Stack 4)
-**Monitoring** - Portainer, Grafana, Prometheus (Stack 6)
-**WireGuard VPN** - VPN-Server Setup mit Ansible
### Application Stack (100% abgeschlossen)
-**Application Stack Integration** - In `setup-infrastructure.yml` integriert
-**Environment Template** - `application.env.j2` für automatische Konfiguration
-**Database Migration** - Automatisch nach Deployment
-**Health-Checks** - Integration nach Deployment
-**PostgreSQL Integration** - Verwendet PostgreSQL statt MySQL
### CI/CD Pipeline (100% konfiguriert)
-**Workflows** - Production-Deploy, Secrets-Update, Security-Scan
-**Gitea Runner** - Läuft und ist registriert
-**Secrets** - Alle kritischen Secrets konfiguriert
-**Ansible Integration** - Deployment & Rollback Playbooks
-**Dokumentation** - Umfangreiche Guides vorhanden
### Dokumentation (95% abgeschlossen)
-`CODE_CHANGE_WORKFLOW.md` - Codeänderungen pushen
-`APPLICATION_STACK_DEPLOYMENT.md` - Deployment-Ablauf
-`CI_CD_STATUS.md` - CI/CD Status & Checkliste
-`QUICK_START.md` - Schnellstart-Guide
-`README.md` - Haupt-Dokumentation aktualisiert
- ✅ WireGuard Dokumentation
- ⚠️ `DEPLOYMENT-STATUS.md` - Sollte final aktualisiert werden
---
## ⚠️ Was fehlt noch?
### 1. Pipeline End-to-End testen (KRITISCH)
**Status:** ⚠️ Ausstehend
**Was zu tun:**
- [ ] Test-Commit pushen oder Workflow manuell triggern
- [ ] Alle Jobs verifizieren (Tests, Build, Deploy)
- [ ] Deployment auf Production verifizieren
- [ ] Health-Check erfolgreich
- [ ] Fehler beheben falls notwendig
**Zeit:** ~15-30 Minuten
**Schritte:**
```bash
# Option 1: Test-Commit
echo "# Test" >> README.md
git add README.md
git commit -m "test: CI/CD pipeline test"
git push origin main
# Option 2: Manuell triggern
# → https://git.michaelschiemer.de/michael/michaelschiemer/actions
# → "Production Deployment Pipeline" → "Run workflow"
```
### 2. Backup-Playbook erstellen (Optional)
**Status:** ⚠️ Ausstehend
**Was zu tun:**
- [ ] Backup-Playbook für Application Stack erstellen
- [ ] PostgreSQL Backup-Integration
- [ ] Gitea Data Backup
- [ ] Registry Images Backup
**Dateien:**
- `deployment/ansible/playbooks/backup.yml` ❌ Fehlt
- `deployment/ansible/playbooks/rollback.yml` ✅ Vorhanden
### 3. Finale Dokumentation (Optional)
**Status:** ⚠️ Teilweise
**Was zu tun:**
- [ ] `DEPLOYMENT-STATUS.md` mit finalem Status aktualisieren
- [ ] `SETUP-GUIDE.md` finalisieren (optional)
---
## 📚 Dokumentation Übersicht
### Quick Start
- **`QUICK_START.md`** - Schnellstart-Guide für Deployment
- **`CODE_CHANGE_WORKFLOW.md`** - Wie Codeänderungen gepusht werden
### Detaillierte Guides
- **`APPLICATION_STACK_DEPLOYMENT.md`** - Detaillierter Deployment-Ablauf
- **`CI_CD_STATUS.md`** - CI/CD Pipeline Status & Checkliste
- **`SETUP-GUIDE.md`** - Kompletter Setup-Guide
- **`DEPLOYMENT-TODO.md`** - Aktuelle TODO-Liste
### Stack-Dokumentation
- **`stacks/application/README.md`** - Application Stack Details
- **`ansible/README.md`** - Ansible Playbooks Dokumentation
- **`gitea-runner/README.md`** - Gitea Runner Setup
---
## 🎯 Nächste Schritte (Priorisiert)
### 1. Pipeline testen (KRITISCH - Nächster Schritt)
```bash
# Test-Commit pushen
echo "# Test" >> README.md
git add README.md
git commit -m "test: CI/CD pipeline test"
git push origin main
# Pipeline beobachten
# → https://git.michaelschiemer.de/michael/michaelschiemer/actions
```
**Erfolgskriterien:**
- ✅ Alle Jobs erfolgreich (Tests, Build, Deploy)
- ✅ Deployment auf Production erfolgreich
- ✅ Health-Check erfolgreich
- ✅ Application läuft korrekt
### 2. Backup-Playbook erstellen (Optional)
```bash
cd deployment/ansible/playbooks
# Erstelle backup.yml
```
### 3. Finale Verifikation (Optional)
- Alles nochmal durchgehen
- Dokumentation finalisieren
- Eventuelle Verbesserungen identifizieren
---
## 📊 Projekt-Status
### Completion Rate
- **Infrastructure:** 100% ✅
- **Application Stack:** 100% ✅
- **CI/CD Pipeline:** 100% konfiguriert ✅
- **Dokumentation:** 95% ✅
- **Testing:** 0% ⚠️ (nächster Schritt!)
### Gesamt: ~95% abgeschlossen
**Nächster kritischer Schritt:** Pipeline testen!
---
## 🚀 Ready to Deploy!
**Alles ist bereit für das erste Deployment!**
Die CI/CD Pipeline ist vollständig konfiguriert:
- ✅ Secrets konfiguriert
- ✅ Runner läuft
- ✅ Workflows vorhanden
- ✅ Ansible Playbooks vorhanden
- ✅ Dokumentation vorhanden
**Nächster Schritt:** Einfach einen Test-Commit pushen oder Workflow manuell triggern!
---
**Viel Erfolg beim ersten Deployment!** 🎉

View File

@@ -0,0 +1,169 @@
# Deployment Dokumentation - Index
**Stand:** 2025-10-31
**Status:** ✅ Vollständige Dokumentation vorhanden
---
## 🚀 Schnellstart
### Für schnellen Einstieg
1. **[QUICK_START.md](QUICK_START.md)** ⭐
- Schnellstart-Guide
- Pipeline-Status prüfen
- Troubleshooting Quick Reference
2. **[CODE_CHANGE_WORKFLOW.md](CODE_CHANGE_WORKFLOW.md)**
- Wie Codeänderungen gepusht werden
- Automatisches vs. manuelles Deployment
- Branching-Strategien
- Beispiel-Workflows
---
## 📚 Detaillierte Guides
### Deployment-Prozess
3. **[APPLICATION_STACK_DEPLOYMENT.md](APPLICATION_STACK_DEPLOYMENT.md)**
- Detaillierter Deployment-Ablauf Schritt für Schritt
- Was passiert bei jedem Deployment
- Container-Neustart Details
- Rollback-Prozess
- Troubleshooting
### CI/CD Pipeline
4. **[CI_CD_STATUS.md](CI_CD_STATUS.md)**
- Aktueller CI/CD Status
- Secrets-Übersicht
- Runner-Status
- Checkliste für Completion
- Troubleshooting
### Setup & Konfiguration
5. **[SETUP-GUIDE.md](SETUP-GUIDE.md)**
- Kompletter Setup-Guide von Anfang bis Ende
- Infrastructure Deployment
- Gitea Runner Setup
- Secrets Konfiguration
- Schritt-für-Schritt Anleitung
---
## 📊 Status & Übersicht
### Projekt-Status
6. **[DEPLOYMENT_SUMMARY.md](DEPLOYMENT_SUMMARY.md)**
- Was ist fertig?
- Was fehlt noch?
- Completion Rate
- Nächste Schritte
7. **[DEPLOYMENT-TODO.md](DEPLOYMENT_TODO.md)**
- Aktuelle TODO-Liste
- Priorisierte Reihenfolge
- Quick Checklist
8. **[DEPLOYMENT-STATUS.md](DEPLOYMENT-STATUS.md)**
- Detaillierter Status aller Phasen
- Phasen-basierte Übersicht
- Historischer Status
---
## 🔧 Stack-spezifische Dokumentation
### Infrastructure Stacks
- **[stacks/traefik/README.md](stacks/traefik/README.md)** - Reverse Proxy & SSL
- **[stacks/postgresql/README.md](stacks/postgresql/README.md)** - Database mit Backups
- **[stacks/registry/README.md](stacks/registry/README.md)** - Private Docker Registry
- **[stacks/gitea/README.md](stacks/gitea/README.md)** - Git Server & CI/CD
- **[stacks/monitoring/README.md](stacks/monitoring/README.md)** - Monitoring Tools
### Application Stack
- **[stacks/application/README.md](stacks/application/README.md)** - Application Stack Details
- **[ansible/README.md](ansible/README.md)** - Ansible Playbooks Dokumentation
### CI/CD
- **[gitea-runner/README.md](gitea-runner/README.md)** - Gitea Runner Setup
- **[.gitea/workflows/production-deploy.yml](../.gitea/workflows/production-deploy.yml)** - Haupt-Deployment-Pipeline
---
## 🔐 Security & VPN
- **[docs/WIREGUARD-SETUP.md](docs/WIREGUARD-SETUP.md)** - WireGuard VPN Setup
- **[ansible/playbooks/README-WIREGUARD.md](ansible/playbooks/README-WIREGUARD.md)** - WireGuard Ansible Playbooks
---
## 🆘 Troubleshooting
### Workflow-Probleme
- **[WORKFLOW-TROUBLESHOOTING.md](WORKFLOW-TROUBLESHOOTING.md)** - Workflow Troubleshooting
- **[NATIVE-WORKFLOW-README.md](NATIVE-WORKFLOW-README.md)** - Native Workflow ohne GitHub Actions
### Allgemeine Hilfe
- **[QUICK_START.md](QUICK_START.md)** - Troubleshooting Quick Reference
- **[CI_CD_STATUS.md](CI_CD_STATUS.md)** - CI/CD Troubleshooting
- **[APPLICATION_STACK_DEPLOYMENT.md](APPLICATION_STACK_DEPLOYMENT.md)** - Deployment Troubleshooting
---
## 📖 Haupt-Dokumentation
- **[README.md](README.md)** - Haupt-Dokumentation & Übersicht
- **[SETUP-GUIDE.md](SETUP-GUIDE.md)** - Kompletter Setup-Guide
---
## 🎯 Empfohlene Lesereihenfolge
### Für neue Nutzer
1. **[QUICK_START.md](QUICK_START.md)** - Schneller Überblick
2. **[CODE_CHANGE_WORKFLOW.md](CODE_CHANGE_WORKFLOW.md)** - Code deployen lernen
3. **[DEPLOYMENT_SUMMARY.md](DEPLOYMENT_SUMMARY.md)** - Projekt-Status verstehen
### Für Deployment-Verständnis
1. **[APPLICATION_STACK_DEPLOYMENT.md](APPLICATION_STACK_DEPLOYMENT.md)** - Wie Deployment funktioniert
2. **[CI_CD_STATUS.md](CI_CD_STATUS.md)** - CI/CD Pipeline verstehen
3. **[SETUP-GUIDE.md](SETUP-GUIDE.md)** - Komplette Setup-Anleitung
### Für Troubleshooting
1. **[QUICK_START.md](QUICK_START.md)** - Quick Troubleshooting
2. **[WORKFLOW-TROUBLESHOOTING.md](WORKFLOW-TROUBLESHOOTING.md)** - Workflow-Probleme
3. Stack-spezifische READMEs für Details
---
## 📝 Dokumentations-Standards
**Alle Dokumentationsdateien:**
- Verwenden Markdown-Format
- Haben klare Überschriften-Struktur
- Enthalten Code-Beispiele
- Haben Troubleshooting-Abschnitte (wenn relevant)
- Verlinken zu verwandten Dokumenten
**Standards:**
- ✅ Beispiele sind ausführbar
- ✅ Pfade sind absolut oder relativ klar
- ✅ Screenshots/Links sind aktuell
- ✅ Status ist klar markiert (✅/⚠️/❌)
---
**Letzte Aktualisierung:** 2025-10-31
**Status:** ✅ Dokumentation vollständig

View File

@@ -0,0 +1,246 @@
# Finale Deployment Checklist - Code deployen
**Stand:** 2025-10-31
**Status:** ✅ Bereit für Code-Deployments!
---
## ✅ Was ist bereits fertig?
### Infrastructure (100%)
- ✅ Traefik (Reverse Proxy & SSL)
- ✅ PostgreSQL (Database)
- ✅ Docker Registry (Private Registry)
- ✅ Gitea (Git Server)
- ✅ Monitoring (Portainer, Grafana, Prometheus)
- ✅ WireGuard VPN
### Application Stack (100%)
- ✅ Integration in `setup-infrastructure.yml`
-`.env` Template (`application.env.j2`)
- ✅ Database-Migration nach Deployment
- ✅ Health-Checks nach Deployment
-`docker-compose.yml` wird automatisch kopiert
- ✅ Nginx-Konfiguration wird automatisch kopiert
### CI/CD Pipeline (100%)
- ✅ Workflows vorhanden (production-deploy.yml)
- ✅ Gitea Runner läuft und ist registriert
- ✅ Secrets konfiguriert (REGISTRY_USER, REGISTRY_PASSWORD, SSH_PRIVATE_KEY)
- ✅ Ansible Playbooks vorhanden
- ✅ Deployment-Playbook mit Pre-Flight Checks
### Dokumentation (100%)
- ✅ Umfangreiche Guides vorhanden
- ✅ Quick Start Guide
- ✅ Deployment-Dokumentation
- ✅ Troubleshooting-Guides
---
## 🚀 Code deployen - So geht's!
### Einfachste Methode
```bash
# 1. Code ändern
# ... Dateien bearbeiten ...
# 2. Committen
git add .
git commit -m "feat: Add new feature"
# 3. Pushen → Automatisches Deployment!
git push origin main
```
**Pipeline-Status:** `https://git.michaelschiemer.de/michael/michaelschiemer/actions`
**Zeit:** ~8-15 Minuten
---
## ⚠️ Wichtiger Hinweis: Erstmalige Deployment
**Falls Application Stack noch nicht deployed ist:**
Der `deploy-update.yml` Playbook prüft automatisch, ob `docker-compose.yml` existiert. Falls nicht, gibt es eine klare Fehlermeldung.
**Vor dem ersten Code-Push (falls Stack noch nicht deployed):**
```bash
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
```
Dieses Playbook:
- ✅ Deployed alle Infrastructure Stacks
-**Deployed Application Stack** (inkl. docker-compose.yml, .env, nginx config)
- ✅ Führt Database-Migration aus
- ✅ Prüft Health-Checks
**Nach diesem Setup:** Ab jetzt funktioniert `git push origin main` automatisch!
---
## 📋 Pre-Deployment Check
### Automatische Checks
Das `deploy-update.yml` Playbook prüft automatisch:
- ✅ Docker Service läuft
- ✅ Application Stack Verzeichnis existiert
-`docker-compose.yml` existiert (mit klarer Fehlermeldung falls nicht)
- ✅ Backup-Verzeichnis kann erstellt werden
### Manuelle Checks (Optional)
**Application Stack Status prüfen:**
```bash
ssh deploy@94.16.110.151
# Prüfe docker-compose.yml
test -f ~/deployment/stacks/application/docker-compose.yml && echo "✅ OK" || echo "❌ Fehlt - Führe setup-infrastructure.yml aus"
# Prüfe .env
test -f ~/deployment/stacks/application/.env && echo "✅ OK" || echo "❌ Fehlt - Führe setup-infrastructure.yml aus"
# Prüfe Container
cd ~/deployment/stacks/application
docker compose ps
```
**Gitea Runner Status:**
```bash
cd deployment/gitea-runner
docker compose ps
# Sollte zeigen: gitea-runner "Up"
```
**Secrets prüfen:**
```
https://git.michaelschiemer.de/michael/michaelschiemer/settings/secrets/actions
```
- REGISTRY_USER ✅
- REGISTRY_PASSWORD ✅
- SSH_PRIVATE_KEY ✅
---
## 🔍 Was passiert beim Deployment?
### Automatischer Ablauf
**1. CI/CD Pipeline startet** (bei Push zu `main`)
- Tests (~2-5 Min)
- Build (~3-5 Min)
- Push zur Registry (~1-2 Min)
**2. Ansible Deployment** (~2-4 Min)
- Pre-Flight Checks (Docker läuft, docker-compose.yml existiert)
- Backup erstellen
- Registry Login
- Neues Image pullen
- docker-compose.yml aktualisieren (Image-Tag ersetzen)
- Stack neu starten (`--force-recreate`)
- Health-Checks warten
**3. Health-Check** (~1 Min)
- Application Health-Check
- Bei Fehler: Automatischer Rollback
**Gesamtzeit:** ~8-15 Minuten
---
## ✅ Erfolgreiches Deployment erkennen
### In Gitea Actions
```
https://git.michaelschiemer.de/michael/michaelschiemer/actions
```
**Erfolg:**
- 🟢 Alle Jobs grün
- ✅ "Deploy via Ansible" erfolgreich
- ✅ Health-Check erfolgreich
### Auf Production-Server
```bash
# Container-Status
ssh deploy@94.16.110.151 "cd ~/deployment/stacks/application && docker compose ps"
# Application Health-Check
curl https://michaelschiemer.de/health
```
---
## 🆘 Troubleshooting
### Problem: "docker-compose.yml not found"
**Fehlermeldung:**
```
Application Stack docker-compose.yml not found at /home/deploy/deployment/stacks/application/docker-compose.yml
The Application Stack must be deployed first via:
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
```
**Lösung:**
```bash
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
```
### Problem: "Failed to pull image"
**Lösung:**
1. Prüfe Registry-Credentials in Gitea Secrets
2. Teste manuell: `docker login git.michaelschiemer.de:5000`
3. Prüfe ob Image in Registry vorhanden ist
### Problem: "Health-Check failed"
**Lösung:**
- Automatischer Rollback wird ausgeführt
- Logs prüfen: `docker compose logs app`
- Manueller Rollback: `ansible-playbook -i inventory/production.yml playbooks/rollback.yml`
---
## 📚 Weitere Dokumentation
- **[QUICK_START.md](QUICK_START.md)** - Schnellstart
- **[CODE_CHANGE_WORKFLOW.md](CODE_CHANGE_WORKFLOW.md)** - Codeänderungen pushen
- **[APPLICATION_STACK_DEPLOYMENT.md](APPLICATION_STACK_DEPLOYMENT.md)** - Deployment-Details
- **[DEPLOYMENT_PREFLIGHT_CHECK.md](DEPLOYMENT_PREFLIGHT_CHECK.md)** - Pre-Flight Checks
- **[CI_CD_STATUS.md](CI_CD_STATUS.md)** - CI/CD Status
---
## 🎉 Ready to Deploy!
**Alles ist bereit!**
**Nächster Schritt:**
1. **Prüfe ob Application Stack deployed ist** (siehe Pre-Deployment Check oben)
2. **Falls nicht:** `setup-infrastructure.yml` ausführen
3. **Dann:** Code pushen und Deployment genießen! 🚀
```bash
git add .
git commit -m "feat: Add feature"
git push origin main
```
**Pipeline-Status:**
```
https://git.michaelschiemer.de/michael/michaelschiemer/actions
```
---
**Viel Erfolg beim ersten Deployment!** 🎉

103
deployment/NEXT_STEPS.md Normal file
View File

@@ -0,0 +1,103 @@
# Nächste Schritte - Deployment Projekt
**Stand:** 2025-10-31
**Status:** ✅ CI/CD Pipeline vollständig konfiguriert
---
## 🎯 Nächster kritischer Schritt
### Pipeline End-to-End testen
**Warum kritisch:**
- Alles ist konfiguriert, aber noch nicht getestet
- Erster kompletter Durchlauf zeigt eventuelle Probleme
- Bestätigt, dass alles funktioniert
**Option 1: Test-Commit pushen (Empfohlen)**
```bash
# Kleine, ungefährliche Änderung
echo "# Deployment Test $(date)" >> README.md
git add README.md
git commit -m "test: CI/CD pipeline end-to-end test"
git push origin main
# Pipeline beobachten:
# → https://git.michaelschiemer.de/michael/michaelschiemer/actions
```
**Option 2: Workflow manuell triggern**
1. Gehe zu: `https://git.michaelschiemer.de/michael/michaelschiemer/actions`
2. Wähle: "Production Deployment Pipeline"
3. Klicke: "Run workflow"
4. Branch: `main`
5. `skip_tests`: `false` (Tests sollen laufen)
6. Klicke: "Run workflow"
**Was zu prüfen:**
- ✅ Tests erfolgreich
- ✅ Build erfolgreich
- ✅ Deployment erfolgreich
- ✅ Application läuft auf Production
- ✅ Health-Check erfolgreich
**Zeit:** ~8-15 Minuten
---
## 📋 Weitere Schritte (Optional)
### 2. Backup-Playbook erstellen
**Status:** Optional
**Was zu tun:**
```bash
cd deployment/ansible/playbooks
# Erstelle backup.yml
# → Backup Application Stack Volumes
# → Integration PostgreSQL Backup
# → Gitea Data Backup
```
**Priorität:** Niedrig (Rollback funktioniert bereits)
### 3. Dokumentation finalisieren
**Status:** Optional
**Was zu tun:**
- `DEPLOYMENT-STATUS.md` mit finalem Status aktualisieren
- Eventuelle Verbesserungen dokumentieren
**Priorität:** Niedrig (Haupt-Dokumentation ist fertig)
---
## ✅ Was ist bereits fertig?
- ✅ Infrastructure Stacks (100%)
- ✅ Application Stack Integration (100%)
- ✅ CI/CD Pipeline Konfiguration (100%)
- ✅ Dokumentation (95%)
- ✅ Gitea Runner (läuft)
- ✅ Secrets (konfiguriert)
**Gesamt-Completion:** ~95%
---
## 🚀 Ready to Deploy!
**Alles ist bereit für das erste Deployment!**
Die Pipeline ist vollständig konfiguriert:
- ✅ Workflows vorhanden
- ✅ Secrets konfiguriert
- ✅ Runner läuft
- ✅ Ansible Playbooks vorhanden
- ✅ Dokumentation vorhanden
**Nächster Schritt:** Einfach einen Test-Commit pushen! 🎉

192
deployment/QUICK_START.md Normal file
View File

@@ -0,0 +1,192 @@
# Quick Start Guide - Deployment & CI/CD
## 🚀 Schnellstart: Code deployen
### Einfachste Methode
```bash
# 1. Code ändern
# ... Dateien bearbeiten ...
# 2. Committen
git add .
git commit -m "feat: Add new feature"
# 3. Pushen → Automatisches Deployment!
git push origin main
```
**Das war's!** Die Pipeline läuft automatisch (~8-15 Minuten).
---
## 📋 Status-Übersicht
### ✅ Vollständig konfiguriert
-**CI/CD Pipeline** - Automatisches Deployment bei Push zu `main`
-**Gitea Runner** - Läuft und ist registriert
-**Secrets** - Alle kritischen Secrets konfiguriert
-**Application Stack** - Integration in `setup-infrastructure.yml`
-**Ansible Playbooks** - Deployment & Rollback vorhanden
### ⚠️ Ausstehend
- [ ] **Pipeline testen** - End-to-End Test durchführen
- [ ] **Backup-Scripts** - Backup-Playbook erstellen
- [ ] **Dokumentation vervollständigen** - Finale Updates
---
## 🔍 Pipeline-Status prüfen
### Nach einem Push
**Gitea Actions UI:**
```
https://git.michaelschiemer.de/michael/michaelschiemer/actions
```
**Status-Anzeigen:**
- 🟢 Grüner Haken = Erfolgreich
- 🔴 Roter Haken = Fehlgeschlagen
- 🟡 Gelber Kreis = Läuft gerade
**Logs ansehen:**
1. Klicke auf den Workflow-Run
2. Klicke auf Job (z.B. "Deploy to Production Server")
3. Klicke auf Step (z.B. "Deploy via Ansible")
4. Logs ansehen
### Application-Status prüfen
```bash
# SSH zum Production-Server
ssh deploy@94.16.110.151
# Container-Status
cd ~/deployment/stacks/application
docker compose ps
# Logs ansehen
docker compose logs app
# Health-Check
curl https://michaelschiemer.de/health
```
---
## 📚 Vollständige Dokumentation
### Deployment-Dokumentation
- **`CODE_CHANGE_WORKFLOW.md`** - Wie Codeänderungen gepusht werden
- **`APPLICATION_STACK_DEPLOYMENT.md`** - Detaillierter Deployment-Ablauf
- **`CI_CD_STATUS.md`** - CI/CD Pipeline Status & Checkliste
- **`DEPLOYMENT-TODO.md`** - Aktuelle TODO-Liste
### Setup-Dokumentation
- **`SETUP-GUIDE.md`** - Kompletter Setup-Guide
- **`ansible/README.md`** - Ansible Playbooks Dokumentation
- **`stacks/application/README.md`** - Application Stack Details
### Workflow-Dokumentation
- **`.gitea/workflows/production-deploy.yml`** - Haupt-Deployment-Pipeline
- **`.gitea/workflows/TEST_WORKFLOW.md`** - Workflow-Test-Anleitung
---
## 🎯 Nächste Schritte
### 1. Pipeline testen (Empfohlen)
**Option A: Test-Commit pushen**
```bash
# Kleine Änderung
echo "# Test" >> README.md
git add README.md
git commit -m "test: CI/CD pipeline test"
git push origin main
```
**Option B: Workflow manuell triggern**
```
https://git.michaelschiemer.de/michael/michaelschiemer/actions
→ "Production Deployment Pipeline"
→ "Run workflow"
```
### 2. Backup-Scripts erstellen
```bash
# Backup-Playbook erstellen
cd deployment/ansible/playbooks
# → Erstelle backup.yml
```
### 3. Dokumentation finalisieren
- Finale Updates in `DEPLOYMENT-STATUS.md`
- README aktualisieren
---
## 🆘 Troubleshooting
### Pipeline schlägt fehl
**Tests fehlgeschlagen:**
```bash
# Tests lokal ausführen
./vendor/bin/pest
composer cs
make phpstan
```
**Build fehlgeschlagen:**
```bash
# Docker Build lokal testen
docker build -f Dockerfile.production -t test .
```
**Deployment fehlgeschlagen:**
```bash
# Logs prüfen
ssh deploy@94.16.110.151 "cd ~/deployment/stacks/application && docker compose logs"
# Manueller Rollback
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/rollback.yml
```
### Runner-Probleme
```bash
# Runner-Status prüfen
cd deployment/gitea-runner
docker compose ps
docker compose logs gitea-runner
# Runner neu starten
docker compose restart gitea-runner
```
---
## 📞 Support
**Dokumentation:**
- `deployment/README.md` - Haupt-Dokumentation
- `deployment/CI_CD_STATUS.md` - CI/CD Details
- `deployment/CODE_CHANGE_WORKFLOW.md` - Workflow-Guide
**Gitea:**
- Actions: `https://git.michaelschiemer.de/michael/michaelschiemer/actions`
- Runners: `https://git.michaelschiemer.de/admin/actions/runners`
---
**Ready to deploy!** 🚀

View File

@@ -61,7 +61,24 @@ deployment/
## Getting Started ## Getting Started
### Prerequisites ### 🚀 Quick Start: Code deployen
**Einfachste Methode:**
```bash
git add .
git commit -m "feat: Add new feature"
git push origin main # → Automatisches Deployment!
```
**Pipeline-Status:** `https://git.michaelschiemer.de/michael/michaelschiemer/actions`
**📖 Vollständige Anleitung:** Siehe [QUICK_START.md](QUICK_START.md) oder [CODE_CHANGE_WORKFLOW.md](CODE_CHANGE_WORKFLOW.md)
---
### Initial Setup (nur bei erstem Setup)
**Prerequisites:**
**Production Server:** **Production Server:**
- Docker & Docker Compose installed - Docker & Docker Compose installed
@@ -74,29 +91,22 @@ deployment/
- Ansible installed - Ansible installed
- SSH key configured for production server - SSH key configured for production server
### Initial Setup **Deployment via Ansible:**
1. **Deploy Infrastructure Stacks (Production)**
```bash
cd deployment/stacks/traefik && docker compose up -d
cd ../postgres && docker compose up -d
cd ../registry && docker compose up -d
cd ../gitea && docker compose up -d
cd ../monitoring && docker compose up -d
```
2. **Setup Gitea Runner (Development)**
```bash
cd deployment/runner
docker compose up -d
```
3. **Deploy Application**
```bash ```bash
cd deployment/ansible cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/deploy-application.yml ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
``` ```
Dieses Playbook deployed alle Stacks:
- Traefik (Reverse Proxy & SSL)
- PostgreSQL (Database)
- Docker Registry (Private Registry)
- Gitea (Git Server)
- Monitoring (Portainer, Grafana, Prometheus)
- **Application Stack** (PHP Application + Nginx + Redis + Queue Workers)
**📖 Vollständige Setup-Anleitung:** Siehe [SETUP-GUIDE.md](SETUP-GUIDE.md)
## Stack Documentation ## Stack Documentation
Each stack has its own README with detailed configuration: Each stack has its own README with detailed configuration:
@@ -158,10 +168,13 @@ git push origin main
- Pipeline status: `https://git.michaelschiemer.de/michael/michaelschiemer/actions` - Pipeline status: `https://git.michaelschiemer.de/michael/michaelschiemer/actions`
- Application status: `ssh deploy@94.16.110.151 "cd ~/deployment/stacks/application && docker compose ps"` - Application status: `ssh deploy@94.16.110.151 "cd ~/deployment/stacks/application && docker compose ps"`
**📖 Detailed Documentation:** **📖 Vollständige Dokumentation:**
- **[Code Change Workflow](CODE_CHANGE_WORKFLOW.md)** - Complete guide for pushing code changes
- **[Application Stack Deployment](APPLICATION_STACK_DEPLOYMENT.md)** - How deployment works in detail - **[QUICK_START.md](QUICK_START.md)** - Schnellstart-Guide für Deployment
- **[CI/CD Status](CI_CD_STATUS.md)** - Current CI/CD pipeline status - **[CODE_CHANGE_WORKFLOW.md](CODE_CHANGE_WORKFLOW.md)** - Kompletter Guide für Codeänderungen
- **[APPLICATION_STACK_DEPLOYMENT.md](APPLICATION_STACK_DEPLOYMENT.md)** - Detaillierter Deployment-Ablauf
- **[CI_CD_STATUS.md](CI_CD_STATUS.md)** - CI/CD Pipeline Status & Checkliste
- **[DEPLOYMENT_SUMMARY.md](DEPLOYMENT_SUMMARY.md)** - Projekt-Status Übersicht
### Pipeline Details ### Pipeline Details
@@ -228,12 +241,23 @@ docker compose -f stacks/application/docker-compose.yml logs -f app-php
docker compose -f stacks/traefik/docker-compose.yml logs -f docker compose -f stacks/traefik/docker-compose.yml logs -f
``` ```
## 📚 Dokumentation Index
**Vollständige Dokumentations-Übersicht:** Siehe [DOCUMENTATION_INDEX.md](DOCUMENTATION_INDEX.md)
**Wichtigste Dokumente:**
- **[QUICK_START.md](QUICK_START.md)** ⭐ - Schnellstart
- **[CODE_CHANGE_WORKFLOW.md](CODE_CHANGE_WORKFLOW.md)** - Code deployen
- **[APPLICATION_STACK_DEPLOYMENT.md](APPLICATION_STACK_DEPLOYMENT.md)** - Deployment-Details
- **[CI_CD_STATUS.md](CI_CD_STATUS.md)** - CI/CD Status
- **[DEPLOYMENT_SUMMARY.md](DEPLOYMENT_SUMMARY.md)** - Projekt-Übersicht
## Support ## Support
For issues and questions, see: For issues and questions, see:
- [Troubleshooting Guide](docs/troubleshooting.md) - [Troubleshooting Guide](docs/troubleshooting.md)
- [FAQ](docs/faq.md) - [Workflow Troubleshooting](WORKFLOW-TROUBLESHOOTING.md)
- [Migration Guide](docs/migration.md) - [CI/CD Status](CI_CD_STATUS.md) - Mit Troubleshooting-Section
## Migration from Docker Swarm ## Migration from Docker Swarm

View File

@@ -0,0 +1,257 @@
# ✅ Ready to Deploy - Checklist
**Stand:** 2025-10-31
**Status:** ✅ Bereit für Code-Deployments!
---
## ✅ Vollständig konfiguriert
### Infrastructure
- ✅ Traefik (Reverse Proxy & SSL)
- ✅ PostgreSQL (Database)
- ✅ Docker Registry (Private Registry)
- ✅ Gitea (Git Server)
- ✅ Monitoring (Portainer, Grafana, Prometheus)
- ✅ WireGuard VPN
### Application Stack
- ✅ Integration in `setup-infrastructure.yml`
-`.env` Template (`application.env.j2`)
- ✅ Database-Migration nach Deployment
- ✅ Health-Checks nach Deployment
### CI/CD Pipeline
- ✅ Workflows vorhanden (production-deploy.yml)
- ✅ Gitea Runner läuft und ist registriert
- ✅ Secrets konfiguriert (REGISTRY_USER, REGISTRY_PASSWORD, SSH_PRIVATE_KEY)
- ✅ Ansible Playbooks vorhanden
### Dokumentation
- ✅ Umfangreiche Guides vorhanden
- ✅ Quick Start Guide
- ✅ Deployment-Dokumentation
---
## 🚀 Code deployen - So geht's
### Einfachste Methode
```bash
# 1. Code ändern
# ... Dateien bearbeiten ...
# 2. Committen
git add .
git commit -m "feat: Add new feature"
# 3. Pushen → Automatisches Deployment!
git push origin main
```
**Pipeline-Status:** `https://git.michaelschiemer.de/michael/michaelschiemer/actions`
---
## ⚠️ Wichtiger Hinweis: Erstmalige Deployment
**Wenn Application Stack noch nicht deployed ist:**
Der `deploy-update.yml` Playbook erwartet, dass der Application Stack bereits existiert.
**Vor dem ersten Code-Push:**
```bash
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
```
Dieses Playbook deployed:
- Alle Infrastructure Stacks (Traefik, PostgreSQL, Registry, Gitea, Monitoring)
- **Application Stack** (mit docker-compose.yml und .env)
**Nach diesem Setup:** Ab jetzt funktioniert `git push origin main` automatisch!
---
## 📋 Pre-Deployment Checklist
### ✅ Alles sollte bereits erledigt sein, aber hier zur Sicherheit:
- [x] Infrastructure Stacks deployed ✅
- [ ] **Application Stack deployed** ⚠️ Prüfen!
- [x] Gitea Runner läuft ✅
- [x] Secrets konfiguriert ✅
- [x] Workflows vorhanden ✅
### Application Stack Deployment prüfen
```bash
# SSH zum Production-Server
ssh deploy@94.16.110.151
# Prüfe ob Application Stack existiert
test -f ~/deployment/stacks/application/docker-compose.yml && echo "✅ Vorhanden" || echo "❌ Fehlt"
# Prüfe ob .env existiert
test -f ~/deployment/stacks/application/.env && echo "✅ Vorhanden" || echo "❌ Fehlt"
# Prüfe Container-Status
cd ~/deployment/stacks/application
docker compose ps
```
**Falls fehlend:** Siehe "Wichtiger Hinweis: Erstmalige Deployment" oben.
---
## 🎯 Erster Code-Push
### Option 1: Direkt pushen (wenn Stack bereits deployed)
```bash
# Test-Commit
echo "# Deployment Test $(date)" >> README.md
git add README.md
git commit -m "test: First deployment via CI/CD pipeline"
git push origin main
# Pipeline beobachten:
# → https://git.michaelschiemer.de/michael/michaelschiemer/actions
```
### Option 2: Application Stack zuerst deployen
```bash
# Application Stack deployen (inkl. alle Infrastructure Stacks)
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
# Danach: Ersten Code-Push
git add .
git commit -m "feat: Initial application deployment"
git push origin main
```
---
## 🔍 Was passiert beim Deployment
### Pipeline-Ablauf (automatisch):
1. **Tests** (~2-5 Min)
- PHP Pest Tests
- PHPStan Code Quality
- Code Style Check
2. **Build** (~3-5 Min)
- Docker Image Build
- Image wird getaggt: `<short-sha>-<timestamp>`
- Image wird zur Registry gepusht
3. **Deploy** (~2-4 Min)
- SSH zum Production-Server
- Ansible Playbook wird ausgeführt:
- Backup erstellen
- Registry Login
- Neues Image pullen
- docker-compose.yml aktualisieren
- Stack neu starten
- Health-Checks warten
4. **Health-Check** (~1 Min)
- Application Health-Check
- Bei Fehler: Automatischer Rollback
**Gesamtzeit:** ~8-15 Minuten
---
## ✅ Erfolgreiches Deployment erkennen
### In Gitea Actions
```
https://git.michaelschiemer.de/michael/michaelschiemer/actions
```
**Erfolg:**
- 🟢 Alle Jobs grün
- ✅ "Deploy via Ansible" erfolgreich
- ✅ Health-Check erfolgreich
### Auf Production-Server
```bash
# SSH zum Server
ssh deploy@94.16.110.151
# Container-Status prüfen
cd ~/deployment/stacks/application
docker compose ps
# Alle Container sollten "healthy" sein
# Application prüfen
curl https://michaelschiemer.de/health
# Sollte "healthy" zurückgeben
```
---
## 🆘 Troubleshooting
### Problem: "docker-compose.yml not found"
**Lösung:**
```bash
# Application Stack zuerst deployen
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
```
### Problem: Pipeline schlägt fehl
**Tests fehlgeschlagen:**
- Tests lokal ausführen und Fehler beheben
- `./vendor/bin/pest`
- `composer cs`
**Build fehlgeschlagen:**
- Docker Build lokal testen
- `docker build -f Dockerfile.production -t test .`
**Deployment fehlgeschlagen:**
- Logs prüfen: Workflow-Logs in Gitea Actions
- Server-Logs prüfen: `ssh deploy@94.16.110.151 "cd ~/deployment/stacks/application && docker compose logs"`
### Problem: Health-Check fehlgeschlagen
**Automatischer Rollback:**
- Pipeline führt automatisch Rollback durch
- Alte Version wird wiederhergestellt
**Manueller Rollback:**
```bash
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/rollback.yml
```
---
## 📚 Weitere Dokumentation
- **[QUICK_START.md](QUICK_START.md)** - Schnellstart-Guide
- **[CODE_CHANGE_WORKFLOW.md](CODE_CHANGE_WORKFLOW.md)** - Codeänderungen pushen
- **[APPLICATION_STACK_DEPLOYMENT.md](APPLICATION_STACK_DEPLOYMENT.md)** - Deployment-Details
- **[CI_CD_STATUS.md](CI_CD_STATUS.md)** - CI/CD Status
---
## 🎉 Ready!
**Alles ist bereit für Code-Deployments!**
**Nächster Schritt:**
1. Prüfe ob Application Stack deployed ist (siehe oben)
2. Falls nicht: `setup-infrastructure.yml` ausführen
3. Dann: Code pushen und Deployment genießen! 🚀

View File

@@ -45,6 +45,22 @@
group: "{{ ansible_user }}" group: "{{ ansible_user }}"
mode: '0755' mode: '0755'
- name: Check if docker-compose.yml exists in application stack
stat:
path: "{{ app_stack_path }}/docker-compose.yml"
register: compose_file_exists
- name: Fail if docker-compose.yml doesn't exist
fail:
msg: |
Application Stack docker-compose.yml not found at {{ app_stack_path }}/docker-compose.yml
The Application Stack must be deployed first via:
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
This will create the application stack with docker-compose.yml and .env file.
when: not compose_file_exists.stat.exists
- name: Create backup directory - name: Create backup directory
file: file:
path: "{{ backups_path }}/{{ deployment_timestamp | regex_replace(':', '-') }}" path: "{{ backups_path }}/{{ deployment_timestamp | regex_replace(':', '-') }}"
@@ -54,6 +70,22 @@
mode: '0755' mode: '0755'
tasks: tasks:
- name: Verify docker-compose.yml exists
stat:
path: "{{ app_stack_path }}/docker-compose.yml"
register: compose_file_check
- name: Fail if docker-compose.yml doesn't exist
fail:
msg: |
Application Stack docker-compose.yml not found at {{ app_stack_path }}/docker-compose.yml
The Application Stack must be deployed first via:
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
This will create the application stack with docker-compose.yml and .env file.
when: not compose_file_check.stat.exists
- name: Backup current deployment metadata - name: Backup current deployment metadata
shell: | shell: |
docker compose -f {{ app_stack_path }}/docker-compose.yml ps --format json 2>/dev/null > {{ backups_path }}/{{ deployment_timestamp | regex_replace(':', '-') }}/current_containers.json || true docker compose -f {{ app_stack_path }}/docker-compose.yml ps --format json 2>/dev/null > {{ backups_path }}/{{ deployment_timestamp | regex_replace(':', '-') }}/current_containers.json || true
@@ -62,6 +94,7 @@
executable: /bin/bash executable: /bin/bash
changed_when: false changed_when: false
ignore_errors: yes ignore_errors: yes
when: compose_file_check.stat.exists
- name: Login to Docker registry (if credentials provided) - name: Login to Docker registry (if credentials provided)
community.docker.docker_login: community.docker.docker_login:

View File

@@ -279,6 +279,38 @@
state: directory state: directory
mode: '0755' mode: '0755'
- name: Check if application stack docker-compose.yml exists locally
stat:
path: "{{ playbook_dir }}/../../stacks/application/docker-compose.yml"
register: app_compose_local
delegate_to: localhost
become: no
- name: Copy application stack docker-compose.yml to server
copy:
src: "{{ playbook_dir }}/../../stacks/application/docker-compose.yml"
dest: "{{ stacks_base_path }}/application/docker-compose.yml"
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
mode: '0644'
when: app_compose_local.stat.exists
- name: Check if application stack nginx directory exists locally
stat:
path: "{{ playbook_dir }}/../../stacks/application/nginx/"
register: app_nginx_local
delegate_to: localhost
become: no
- name: Copy application stack nginx configuration to server
copy:
src: "{{ playbook_dir }}/../../stacks/application/nginx/"
dest: "{{ stacks_base_path }}/application/nginx/"
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
mode: '0644'
when: app_nginx_local.stat.exists
- name: Create application stack .env file - name: Create application stack .env file
template: template:
src: "{{ playbook_dir }}/../templates/application.env.j2" src: "{{ playbook_dir }}/../templates/application.env.j2"