# Git-basiertes Deployment - Test Anleitung **Datum:** 2025-01-31 **Status:** ⏳ Ready to Test --- ## ✅ Vorbereitung abgeschlossen ### Implementiert: - ✅ `docker/entrypoint.sh` - Git Clone/Pull Funktionalität - ✅ `Dockerfile.production` - Git + Composer installiert - ✅ `deployment/stacks/application/docker-compose.yml` - Git Environment Variables - ✅ `deployment/ansible/templates/application.env.j2` - Git Template Variablen - ✅ `deployment/ansible/playbooks/sync-code.yml` - Code-Sync Playbook --- ## 🧪 Test-Schritte ### Schritt 1: Image neu bauen (mit Git-Funktionalität) **Ziel:** Sicherstellen dass Image die Git-Funktionalität enthält ```bash # Im Projekt-Root docker build -f Dockerfile.production \ -t registry.michaelschiemer.de/framework:test-git \ . # Image pushen docker push registry.michaelschiemer.de/framework:test-git ``` **Prüfen:** ```bash # Git installiert? docker run --rm registry.michaelschiemer.de/framework:test-git git --version # Composer installiert? docker run --rm registry.michaelschiemer.de/framework:test-git composer --version # Entrypoint hat Git-Logik? docker run --rm registry.michaelschiemer.de/framework:test-git cat /usr/local/bin/entrypoint.sh | grep -A 5 "GIT_REPOSITORY_URL" ``` --- ### Schritt 2: Git-Variablen in .env setzen (auf Production Server) **Ziel:** Git-Repository-URL in .env konfigurieren ```bash # Option A: Via Ansible Playbook (Empfohlen) cd deployment/ansible ansible-playbook -i inventory/production.yml \ playbooks/sync-code.yml \ -e "git_repo_url=https://git.michaelschiemer.de/michael/michaelschiemer.git" \ -e "git_branch=main" ``` **Oder manuell auf Production-Server:** ```bash # SSH zum Production-Server ssh deploy@94.16.110.151 # .env bearbeiten cd ~/deployment/stacks/application nano .env # Folgende Zeilen hinzufügen: GIT_REPOSITORY_URL=https://git.michaelschiemer.de/michael/michaelschiemer.git GIT_BRANCH=main ``` **Wenn Repository privat ist (Token hinzufügen):** ```bash # Token in .env hinzufügen: GIT_TOKEN=your_git_token_here ``` --- ### Schritt 3: Container mit Git-Variablen starten **Ziel:** Prüfen ob Container Git Clone/Pull beim Start ausführt ```bash # Auf Production-Server cd ~/deployment/stacks/application # Container neu starten docker compose restart app # Oder falls Container noch nicht läuft: docker compose up -d app # Logs prüfen (sollte Git Clone/Pull zeigen) docker logs app --tail 100 | grep -E "(Git|Clone|Pull|✅|❌)" ``` **Erwartete Logs:** ``` 📥 Cloning/Pulling code from Git repository... 📥 Cloning repository from https://git.michaelschiemer.de/michael/michaelschiemer.git (branch: main)... 📦 Installing/updating Composer dependencies... ✅ Git sync completed ``` --- ### Schritt 4: Code-Verifikation im Container **Ziel:** Prüfen ob Code tatsächlich im Container ist ```bash # Auf Production-Server docker exec app ls -la /var/www/html/ | head -20 # Prüfen ob wichtige Dateien vorhanden sind docker exec app test -f /var/www/html/composer.json && echo "✅ composer.json vorhanden" || echo "❌ Fehlt" docker exec app test -d /var/www/html/src && echo "✅ src/ vorhanden" || echo "❌ Fehlt" docker exec app test -d /var/www/html/.git && echo "✅ .git vorhanden" || echo "❌ Fehlt" # Prüfen welcher Commit docker exec app sh -c "cd /var/www/html && git log --oneline -1" ``` **Erwartetes Ergebnis:** - ✅ Dateien sind im Container - ✅ `.git` Verzeichnis existiert (zeigt dass Git Clone funktioniert hat) - ✅ Git Commit zeigt aktuellen Stand --- ### Schritt 5: Code-Update testen (Git Pull) **Ziel:** Prüfen ob `sync-code.yml` Playbook funktioniert ```bash # Lokal (auf Dev-Machine) cd deployment/ansible # Sync-Code Playbook ausführen ansible-playbook -i inventory/production.yml \ playbooks/sync-code.yml \ -e "git_branch=main" # Container-Logs prüfen (auf Production-Server) ssh deploy@94.16.110.151 docker logs app --tail 50 | grep -E "(Git|Pull|✅)" ``` **Erwartetes Ergebnis:** - ✅ Playbook führt erfolgreich aus - ✅ Container wird neu gestartet - ✅ Logs zeigen "🔄 Pulling latest changes from main..." - ✅ Code wird aktualisiert --- ### Schritt 6: Application Health Check **Ziel:** Prüfen ob Application nach Git-Sync noch funktioniert ```bash # Health Check curl -f https://michaelschiemer.de/health || echo "❌ Health Check fehlgeschlagen" # Application Test curl -f https://michaelschiemer.de/ || echo "❌ Application fehlgeschlagen" ``` **Erwartetes Ergebnis:** - ✅ Health Check erfolgreich - ✅ Application läuft --- ## 🔧 Troubleshooting ### Problem: Container zeigt keine Git-Logs **Check 1: Prüfen ob GIT_REPOSITORY_URL gesetzt ist** ```bash docker exec app env | grep GIT_REPOSITORY_URL ``` **Check 2: Prüfen Entrypoint Script** ```bash docker exec app cat /usr/local/bin/entrypoint.sh | grep -A 10 "GIT_REPOSITORY_URL" ``` **Check 3: Prüfen ob Git installiert ist** ```bash docker exec app which git docker exec app git --version ``` **Lösung:** - Falls nicht gesetzt: Git-Variablen in .env hinzufügen (siehe Schritt 2) - Falls Entrypoint fehlt: Image neu bauen (siehe Schritt 1) - Falls Git fehlt: Image neu bauen mit `git` in Dockerfile --- ### Problem: Git Clone fehlgeschlagen **Check 1: Repository-Zugriff testen** ```bash docker exec app git clone --depth 1 https://git.michaelschiemer.de/michael/michaelschiemer.git /tmp/test-clone ``` **Check 2: Logs prüfen** ```bash docker logs app --tail 100 | grep -i "error\|fail" ``` **Mögliche Ursachen:** 1. Repository nicht erreichbar vom Server 2. Falsche Credentials 3. Branch nicht existiert 4. Network-Probleme **Lösung:** - Repository-URL prüfen - Git-Credentials prüfen (Token/Username+Password) - Branch-Name prüfen - Network-Verbindung prüfen --- ### Problem: Composer Install fehlgeschlagen **Check:** ```bash docker exec app which composer docker exec app composer --version docker exec app sh -c "cd /var/www/html && composer install --no-dev --optimize-autoloader --no-interaction" ``` **Lösung:** - Falls Composer fehlt: Image neu bauen - Falls Network-Probleme: Network-Verbindung prüfen --- ## 📋 Test-Checkliste ### Vor Test: - [ ] Image neu gebaut (mit Git-Funktionalität) - [ ] Image gepusht zur Registry - [ ] Git-Repository ist erreichbar vom Production-Server - [ ] Git-Credentials verfügbar (falls private Repository) - [ ] .env Datei existiert auf Production-Server ### Während Test: - [ ] Schritt 1: Image neu bauen ✅ - [ ] Schritt 2: Git-Variablen in .env setzen - [ ] Schritt 3: Container mit Git-Variablen starten - [ ] Schritt 4: Code-Verifikation im Container - [ ] Schritt 5: Code-Update testen (Git Pull) - [ ] Schritt 6: Application Health Check ### Nach Test: - [ ] Alle Tests erfolgreich - [ ] Application läuft korrekt - [ ] Code ist aktuell aus Git - [ ] Logs zeigen Git-Operationen --- ## 🚀 Ready to Test! **Nächster Schritt:** Schritt 1 ausführen (Image neu bauen) **Vollständiger Test-Plan:** Siehe [GIT_DEPLOYMENT_TEST.md](GIT_DEPLOYMENT_TEST.md)