Files
michaelschiemer/deployment/FINAL_DEPLOYMENT_CHECKLIST.md
Michael Schiemer de8fed8711 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
2025-10-31 10:31:56 +01:00

6.0 KiB

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

# 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):

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:

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:

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

# 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:

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


🎉 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! 🚀
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! 🎉