- Replace git.michaelschiemer.de:5000 (HTTP) with registry.michaelschiemer.de (HTTPS) - Update all Ansible playbooks and configuration files - Update CI/CD workflows to use HTTPS registry endpoint - Update Docker Compose files with new registry URL - Update documentation and scripts Benefits: - Secure HTTPS connection (no insecure registry config needed) - Consistent use of HTTPS endpoint via Traefik - Better security practices for production deployment
6.9 KiB
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
# 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:
# 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
# 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:
# 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):
# 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
# 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
# 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
- ✅
.gitVerzeichnis 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
# 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
# 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
docker exec app env | grep GIT_REPOSITORY_URL
Check 2: Prüfen Entrypoint Script
docker exec app cat /usr/local/bin/entrypoint.sh | grep -A 10 "GIT_REPOSITORY_URL"
Check 3: Prüfen ob Git installiert ist
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
gitin Dockerfile
Problem: Git Clone fehlgeschlagen
Check 1: Repository-Zugriff testen
docker exec app git clone --depth 1 https://git.michaelschiemer.de/michael/michaelschiemer.git /tmp/test-clone
Check 2: Logs prüfen
docker logs app --tail 100 | grep -i "error\|fail"
Mögliche Ursachen:
- Repository nicht erreichbar vom Server
- Falsche Credentials
- Branch nicht existiert
- 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:
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