Files
michaelschiemer/deployment/TEST_GIT_DEPLOYMENT.md
Michael Schiemer c087d372c2 Update Docker Registry URLs to HTTPS endpoint (registry.michaelschiemer.de)
- 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
2025-10-31 14:35:39 +01:00

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
  • .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

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

  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:

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