- 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
278 lines
6.9 KiB
Markdown
278 lines
6.9 KiB
Markdown
# 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)
|