chore: sync staging workspace
This commit is contained in:
73
deployment/docs/tests/git-deployment-issue.md
Normal file
73
deployment/docs/tests/git-deployment-issue.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# Git Deployment - Problem gefunden
|
||||
|
||||
**Datum:** 2025-01-31
|
||||
**Status:** ⚠️ Image muss neu gepusht werden
|
||||
|
||||
## 🔍 Problem identifiziert
|
||||
|
||||
### Prüfung ergab:
|
||||
- ❌ Keine Git-Logs im Container
|
||||
- ❌ `GIT_REPOSITORY_URL` nicht als Environment-Variable gesetzt
|
||||
- ❌ Kein `.git` Verzeichnis im Container
|
||||
- ❌ Entrypoint-Script zeigt keine Git-Funktionalität
|
||||
|
||||
### Ursache:
|
||||
**Das Image auf dem Production-Server enthält noch die alte Version ohne Git-Funktionalität.**
|
||||
|
||||
Das lokal gebaute Image wurde noch nicht zur Registry gepusht, daher verwendet der Production-Server noch das alte Image.
|
||||
|
||||
---
|
||||
|
||||
## ✅ Lösung
|
||||
|
||||
### Schritt 1: Image zur Registry pushen
|
||||
|
||||
```bash
|
||||
# Lokal (auf Dev-Machine)
|
||||
docker push registry.michaelschiemer.de/framework:latest
|
||||
```
|
||||
|
||||
### Schritt 2: Image auf Production-Server aktualisieren
|
||||
|
||||
```bash
|
||||
# Via Ansible
|
||||
cd deployment/ansible
|
||||
ansible production -i inventory/production.yml -m shell -a "docker pull registry.michaelschiemer.de/framework:latest"
|
||||
```
|
||||
|
||||
### Schritt 3: Container neu starten
|
||||
|
||||
```bash
|
||||
# Via Ansible
|
||||
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 direkt:**
|
||||
```bash
|
||||
# Auf Production-Server
|
||||
cd ~/deployment/stacks/application
|
||||
docker compose pull app
|
||||
docker compose up -d app
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Alternativer Workflow
|
||||
|
||||
Falls du das Image über die CI/CD Pipeline pushen möchtest:
|
||||
|
||||
1. **Commit und Push** der Änderungen zu `main`
|
||||
2. **CI/CD Pipeline** baut automatisch das Image und pusht es
|
||||
3. **Dann** `sync-code.yml` ausführen
|
||||
|
||||
---
|
||||
|
||||
## 📋 Checkliste
|
||||
|
||||
- [ ] Image lokal gebaut ✅
|
||||
- [ ] Git-Variablen in .env gesetzt ✅
|
||||
- [ ] Image zur Registry pushen ❌ **TODO**
|
||||
- [ ] Image auf Production-Server pullen ❌ **TODO**
|
||||
- [ ] Container neu starten ❌ **TODO**
|
||||
- [ ] Logs prüfen ❌ **TODO**
|
||||
239
deployment/docs/tests/git-deployment-test.md
Normal file
239
deployment/docs/tests/git-deployment-test.md
Normal file
@@ -0,0 +1,239 @@
|
||||
# Git-basiertes Deployment - Test Plan
|
||||
|
||||
**Datum:** 2025-01-31
|
||||
**Status:** ⏳ Ready to Test
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Ziel
|
||||
|
||||
Testen, ob Container automatisch Code aus Git-Repository klont/pullt beim Start.
|
||||
|
||||
---
|
||||
|
||||
## ✅ Vorbereitung
|
||||
|
||||
### 1. Prüfen ob alles korrekt konfiguriert ist
|
||||
|
||||
#### Docker Entrypoint
|
||||
- ✅ `docker/entrypoint.sh` - Git Clone/Pull implementiert
|
||||
- ✅ `Dockerfile.production` - Git + Composer installiert
|
||||
|
||||
#### Docker Compose
|
||||
- ✅ `deployment/stacks/application/docker-compose.yml` - Git Environment Variables vorhanden
|
||||
|
||||
#### Ansible Playbook
|
||||
- ✅ `deployment/ansible/playbooks/sync-code.yml` - Erstellt
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Test-Plan
|
||||
|
||||
### Test 1: Git-Variablen in .env setzen
|
||||
|
||||
**Ziel:** Prüfen ob Git-Konfiguration in .env gesetzt werden kann
|
||||
|
||||
```bash
|
||||
# SSH zum Production-Server
|
||||
ssh deploy@94.16.110.151
|
||||
|
||||
# Prüfen ob .env existiert
|
||||
cd ~/deployment/stacks/application
|
||||
test -f .env && echo "✅ OK" || echo "❌ Fehlt"
|
||||
|
||||
# Git-Variablen manuell hinzufügen (für Test)
|
||||
cat >> .env << 'EOF'
|
||||
|
||||
# Git Repository Configuration
|
||||
GIT_REPOSITORY_URL=https://git.michaelschiemer.de/michael/michaelschiemer.git
|
||||
GIT_BRANCH=main
|
||||
GIT_TOKEN=
|
||||
EOF
|
||||
```
|
||||
|
||||
**Erwartetes Ergebnis:**
|
||||
- ✅ .env existiert
|
||||
- ✅ Git-Variablen können hinzugefügt werden
|
||||
|
||||
---
|
||||
|
||||
### Test 2: 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
|
||||
|
||||
# Logs prüfen (sollte Git Clone/Pull zeigen)
|
||||
docker logs app --tail 100 | grep -E "(Git|Clone|Pull|✅|❌)"
|
||||
```
|
||||
|
||||
**Erwartetes Ergebnis:**
|
||||
- ✅ Logs zeigen "📥 Cloning/Pulling code from Git repository..."
|
||||
- ✅ Logs zeigen "📥 Cloning repository from ..." oder "🔄 Pulling latest changes..."
|
||||
- ✅ Logs zeigen "✅ Git sync completed"
|
||||
|
||||
**Falls Fehler:**
|
||||
- ❌ Logs zeigen Fehler → Troubleshooting nötig
|
||||
- ❌ Keine Git-Logs → Entrypoint nicht korrekt oder Git-Variablen nicht gesetzt
|
||||
|
||||
---
|
||||
|
||||
### Test 3: 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
|
||||
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"
|
||||
```
|
||||
|
||||
**Erwartetes Ergebnis:**
|
||||
- ✅ Dateien sind im Container
|
||||
- ✅ `.git` Verzeichnis existiert (zeigt dass Git Clone funktioniert hat)
|
||||
|
||||
---
|
||||
|
||||
### Test 4: 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..."
|
||||
- ✅ Code wird aktualisiert
|
||||
|
||||
---
|
||||
|
||||
### Test 5: 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
|
||||
|
||||
**Mögliche Ursachen:**
|
||||
1. `GIT_REPOSITORY_URL` nicht in .env gesetzt
|
||||
2. Entrypoint Script nicht korrekt
|
||||
3. Git nicht im Container installiert
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Prüfen .env
|
||||
cd ~/deployment/stacks/application
|
||||
grep GIT_REPOSITORY_URL .env
|
||||
|
||||
# Prüfen Entrypoint
|
||||
docker exec app cat /usr/local/bin/entrypoint.sh | grep -A 10 "GIT_REPOSITORY_URL"
|
||||
|
||||
# Prüfen Git Installation
|
||||
docker exec app which git
|
||||
docker exec app git --version
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Problem: Git Clone fehlgeschlagen
|
||||
|
||||
**Mögliche Ursachen:**
|
||||
1. Repository nicht erreichbar vom Server
|
||||
2. Falsche Credentials
|
||||
3. Branch nicht existiert
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Prüfen Repository-Zugriff
|
||||
docker exec app git clone --branch main --depth 1 https://git.michaelschiemer.de/michael/michaelschiemer.git /tmp/test-clone
|
||||
|
||||
# Logs prüfen
|
||||
docker logs app --tail 100 | grep -i "error\|fail"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Problem: Composer Install fehlgeschlagen
|
||||
|
||||
**Mögliche Ursachen:**
|
||||
1. Composer nicht installiert
|
||||
2. Network-Probleme beim Dependency-Download
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Composer prüfen
|
||||
docker exec app which composer
|
||||
docker exec app composer --version
|
||||
|
||||
# Manuell testen
|
||||
docker exec app sh -c "cd /var/www/html && composer install --no-dev --optimize-autoloader --no-interaction"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 Checkliste für Test
|
||||
|
||||
### Vor Test:
|
||||
- [ ] Git-Repository ist erreichbar vom Production-Server
|
||||
- [ ] Git-Credentials sind verfügbar (falls private Repository)
|
||||
- [ ] .env Datei existiert auf Production-Server
|
||||
- [ ] Container-Image wurde neu gebaut (mit Git + Composer)
|
||||
|
||||
### Während Test:
|
||||
- [ ] Test 1: Git-Variablen in .env setzen
|
||||
- [ ] Test 2: Container mit Git-Variablen starten
|
||||
- [ ] Test 3: Code-Verifikation im Container
|
||||
- [ ] Test 4: Code-Update testen (Git Pull)
|
||||
- [ ] Test 5: Application Health Check
|
||||
|
||||
### Nach Test:
|
||||
- [ ] Alle Tests erfolgreich
|
||||
- [ ] Application läuft korrekt
|
||||
- [ ] Code ist aktuell
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Nächste Schritte nach erfolgreichem Test
|
||||
|
||||
1. ✅ Git-basiertes Deployment dokumentieren
|
||||
2. ✅ In CI/CD Pipeline integrieren (optional)
|
||||
3. ✅ Dokumentation aktualisieren
|
||||
|
||||
---
|
||||
|
||||
**Bereit zum Testen!** 🧪
|
||||
45
deployment/docs/tests/quick-test.md
Normal file
45
deployment/docs/tests/quick-test.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Quick Git Deployment Test
|
||||
|
||||
## ✅ Verifikation ohne Container
|
||||
|
||||
Alle Dateien sind korrekt konfiguriert:
|
||||
|
||||
### 1. Entrypoint Script (`docker/entrypoint.sh`)
|
||||
- ✅ `GIT_REPOSITORY_URL` Check vorhanden (Zeile 30)
|
||||
- ✅ Git Clone/Pull Funktionalität implementiert
|
||||
- ✅ Composer Install integriert
|
||||
|
||||
### 2. Docker Compose (`deployment/stacks/application/docker-compose.yml`)
|
||||
- ✅ `GIT_REPOSITORY_URL` Environment Variable vorhanden (Zeile 17)
|
||||
- ✅ `GIT_BRANCH`, `GIT_TOKEN`, `GIT_USERNAME`, `GIT_PASSWORD` vorhanden
|
||||
|
||||
### 3. Ansible Template (`deployment/ansible/templates/application.env.j2`)
|
||||
- ✅ Git-Variablen im Template definiert
|
||||
|
||||
### 4. Dockerfile (`Dockerfile.production`)
|
||||
- ✅ Git installiert
|
||||
- ✅ Composer installiert
|
||||
- ✅ Entrypoint kopiert
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Schneller Test (ohne Container-Start)
|
||||
|
||||
```bash
|
||||
# Prüfen ob GIT_REPOSITORY_URL überall vorhanden ist
|
||||
grep -c "GIT_REPOSITORY_URL" docker/entrypoint.sh
|
||||
grep -c "GIT_REPOSITORY_URL" deployment/stacks/application/docker-compose.yml
|
||||
grep -c "GIT_REPOSITORY_URL" deployment/ansible/templates/application.env.j2
|
||||
```
|
||||
|
||||
**Erwartetes Ergebnis:** Alle sollten > 0 zurückgeben
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Nächste Schritte zum Testen
|
||||
|
||||
1. **Image ist bereits gebaut** ✅
|
||||
2. **Git-Variablen in .env setzen** (auf Production Server)
|
||||
3. **Container neu starten** und Logs prüfen
|
||||
|
||||
Siehe `TEST_GIT_DEPLOYMENT.md` für detaillierte Anleitung.
|
||||
144
deployment/docs/tests/recommended-test-flow.md
Normal file
144
deployment/docs/tests/recommended-test-flow.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# 🎯 Empfohlener Test-Workflow für Git-Deployment
|
||||
|
||||
## Meine Empfehlung: **Schritt-für-Schritt mit Checks**
|
||||
|
||||
### Warum?
|
||||
- ✅ Minimiert Risiko von Fehlern
|
||||
- ✅ Erlaubt Verifikation nach jedem Schritt
|
||||
- ✅ Einfaches Rollback bei Problemen
|
||||
- ✅ Klare Fehlerdiagnose
|
||||
|
||||
---
|
||||
|
||||
## 📋 Workflow
|
||||
|
||||
### Schritt 1: Image pushen (falls nötig)
|
||||
|
||||
**Wann nötig?**
|
||||
- Wenn Production-Server das Image aus der Registry zieht
|
||||
- Wenn Image lokal gebaut wurde und noch nicht gepusht
|
||||
|
||||
**Befehl:**
|
||||
```bash
|
||||
# Im Projekt-Root
|
||||
docker push registry.michaelschiemer.de/framework:latest
|
||||
```
|
||||
|
||||
**Check:**
|
||||
```bash
|
||||
# Prüfen ob Image in Registry ist (optional)
|
||||
curl -k https://registry.michaelschiemer.de/v2/framework/tags/list
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Schritt 2: Git-Variablen setzen (via Ansible)
|
||||
|
||||
**Warum Ansible?**
|
||||
- ✅ Automatisiert und reproduzierbar
|
||||
- ✅ Aktualisiert .env korrekt
|
||||
- ✅ Startet Container automatisch neu
|
||||
|
||||
**Befehl:**
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
|
||||
**Was passiert?**
|
||||
1. .env Datei wird mit Git-Variablen aktualisiert
|
||||
2. Container wird neu gestartet
|
||||
3. Entrypoint führt Git Clone/Pull aus
|
||||
4. Logs werden angezeigt
|
||||
|
||||
---
|
||||
|
||||
### Schritt 3: Logs prüfen
|
||||
|
||||
**Auf Production Server:**
|
||||
```bash
|
||||
ssh deploy@94.16.110.151
|
||||
|
||||
# Logs mit Git-Filter
|
||||
docker logs app --tail 100 | grep -E "(Git|Clone|Pull|✅|❌)"
|
||||
|
||||
# Oder vollständige Logs
|
||||
docker logs app --tail 50
|
||||
```
|
||||
|
||||
**Erwartete Logs:**
|
||||
```
|
||||
📥 Cloning/Pulling code from Git repository...
|
||||
📥 Cloning repository from https://git.michaelschiemer.de/... (branch: main)
|
||||
📦 Installing/updating Composer dependencies...
|
||||
✅ Git sync completed
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Schritt 4: Code-Verifikation
|
||||
|
||||
**Prüfen ob Code im Container ist:**
|
||||
```bash
|
||||
docker exec app ls -la /var/www/html/ | head -20
|
||||
docker exec app test -d /var/www/html/.git && echo "✅ Git repo vorhanden" || echo "❌ Fehlt"
|
||||
docker exec app test -f /var/www/html/composer.json && echo "✅ composer.json vorhanden" || echo "❌ Fehlt"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Schritt 5: Application Health Check
|
||||
|
||||
```bash
|
||||
curl -f https://michaelschiemer.de/health || echo "❌ Health Check fehlgeschlagen"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Mein konkreter Vorschlag
|
||||
|
||||
**Starte mit Schritt 2** (Git-Variablen setzen via Ansible), weil:
|
||||
|
||||
1. **Ansible prüft automatisch**, ob alles vorhanden ist
|
||||
2. **Startet Container automatisch** neu
|
||||
3. **Zeigt Logs direkt** an
|
||||
4. **Minimaler Aufwand** - ein Befehl
|
||||
|
||||
Falls das Image noch nicht in der Registry ist, wird der Container automatisch das neue Image ziehen beim `docker compose up`.
|
||||
|
||||
---
|
||||
|
||||
## 🚨 Alternative: Lokaler Test (falls gewünscht)
|
||||
|
||||
Falls du erst lokal testen möchtest:
|
||||
|
||||
```bash
|
||||
# Lokal Container starten mit Git-Variablen
|
||||
cd deployment/stacks/application
|
||||
|
||||
# .env erstellen/kopieren
|
||||
cp .env.example .env
|
||||
|
||||
# Git-Variablen hinzufügen
|
||||
echo "" >> .env
|
||||
echo "GIT_REPOSITORY_URL=https://git.michaelschiemer.de/michael/michaelschiemer.git" >> .env
|
||||
echo "GIT_BRANCH=main" >> .env
|
||||
|
||||
# Container starten
|
||||
docker compose up -d app
|
||||
|
||||
# Logs prüfen
|
||||
docker compose logs app | grep -E "(Git|Clone|Pull)"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Entscheidung
|
||||
|
||||
**Meine Empfehlung:** Starte mit **Schritt 2** (Ansible Playbook). Das ist der sauberste und sicherste Weg.
|
||||
|
||||
Soll ich das für dich ausführen?
|
||||
277
deployment/docs/tests/test-git-deployment.md
Normal file
277
deployment/docs/tests/test-git-deployment.md
Normal file
@@ -0,0 +1,277 @@
|
||||
# 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)
|
||||
72
deployment/docs/tests/test-results.md
Normal file
72
deployment/docs/tests/test-results.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# Git Deployment Test - Ergebnis
|
||||
|
||||
**Datum:** 2025-01-31
|
||||
**Status:** ✅ Ansible Playbook erfolgreich ausgeführt
|
||||
|
||||
## ✅ Erfolgreiche Schritte
|
||||
|
||||
1. **Ansible Playbook ausgeführt**
|
||||
- `.env` Datei wurde aktualisiert mit:
|
||||
- `GIT_REPOSITORY_URL=https://git.michaelschiemer.de/michael/michaelschiemer.git`
|
||||
- `GIT_BRANCH=main`
|
||||
|
||||
2. **Container neu gestartet**
|
||||
- Container wurde erfolgreich neu gestartet
|
||||
- Git-Sync sollte beim Start ausgeführt werden
|
||||
|
||||
3. **Nächster Schritt: Logs prüfen**
|
||||
- Git-Logs wurden im Playbook-Output nicht gefunden
|
||||
- Möglicherweise wurden sie noch nicht generiert oder sind in den Logs vorhanden
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Verifikation nötig
|
||||
|
||||
Bitte prüfe die Container-Logs direkt auf dem Production-Server:
|
||||
|
||||
```bash
|
||||
ssh deploy@94.16.110.151
|
||||
docker logs app --tail 100 | grep -E "(Git|Clone|Pull|✅|❌)"
|
||||
```
|
||||
|
||||
**Oder vollständige Logs:**
|
||||
```bash
|
||||
docker logs app --tail 100
|
||||
```
|
||||
|
||||
**Erwartete Logs:**
|
||||
```
|
||||
📥 Cloning/Pulling code from Git repository...
|
||||
📥 Cloning repository from https://git.michaelschiemer.de/... (branch: main)
|
||||
📦 Installing/updating Composer dependencies...
|
||||
✅ Git sync completed
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚨 Falls keine Git-Logs vorhanden sind
|
||||
|
||||
**Mögliche Ursachen:**
|
||||
1. Container verwendet noch altes Image ohne Git-Funktionalität
|
||||
2. Entrypoint-Script wurde nicht korrekt kopiert
|
||||
3. Environment-Variablen werden nicht korrekt geladen
|
||||
|
||||
**Lösung:**
|
||||
1. Prüfe ob Image aktualisiert wurde: `docker images registry.michaelschiemer.de/framework:latest`
|
||||
2. Prüfe Entrypoint: `docker exec app cat /usr/local/bin/entrypoint.sh | grep GIT_REPOSITORY_URL`
|
||||
3. Prüfe Environment: `docker exec app env | grep GIT_REPOSITORY_URL`
|
||||
|
||||
---
|
||||
|
||||
## ✅ Nächste Schritte
|
||||
|
||||
1. **Logs prüfen** (siehe oben)
|
||||
2. **Code-Verifikation im Container:**
|
||||
```bash
|
||||
docker exec app ls -la /var/www/html/ | head -20
|
||||
docker exec app test -d /var/www/html/.git && echo "✅ Git repo vorhanden" || echo "❌ Fehlt"
|
||||
```
|
||||
3. **Application Health Check:**
|
||||
```bash
|
||||
curl -f https://michaelschiemer.de/health
|
||||
```
|
||||
Reference in New Issue
Block a user