# Ansible-Setup für michaelschiemer.de

Dieses Verzeichnis enthält die Ansible-Konfiguration für das Deployment der Website.

## Verzeichnisstruktur

```
ansible/
├── ansible.cfg         # Ansible-Konfigurationsdatei
├── check_yaml.sh       # Skript zur Überprüfung der YAML-Syntax
├── deploy.sh           # Deployment-Skript
├── docker/             # Docker-Konfigurationsdateien
├── group_vars/         # Variablen für Gruppen
├── inventory/          # Inventar-Dateien
│   ├── hosts.ini       # Hauptinventar
│   ├── development     # Entwicklungsumgebung
│   ├── staging         # Staging-Umgebung
│   └── production      # Produktionsumgebung
├── playbooks/          # Playbooks für verschiedene Aufgaben
├── roles/              # Rollen für verschiedene Komponenten
├── docker-compose.yml  # Standard-Docker-Compose-Datei
├── setup.sh            # Setup-Skript
└── setup.yml           # Basis-Setup-Playbook
```

## Erste Schritte

Bevor Sie die Skripte verwenden können, müssen Sie diese ausführbar machen:

```bash
chmod +x ansible/setup.sh ansible/deploy.sh ansible/check_yaml.sh
```

## YAML-Syntax prüfen

Bevor Sie ein Deployment starten, sollten Sie die YAML-Syntax überprüfen:

```bash
./ansible/check_yaml.sh
```

Dieses Skript findet und korrigiert die häufigsten YAML-Syntaxprobleme.

## Verwendung

### Einfache Verwendung mit dem Setup-Skript

```bash
# Server-Setup durchführen
./ansible/setup.sh setup staging

# Deployment durchführen
./ansible/setup.sh deploy staging
```

### Deployment mit dem einfachen Deploy-Skript

```bash
# Deployment für die Staging-Umgebung
./ansible/deploy.sh staging

# Deployment für die Produktionsumgebung
./ansible/deploy.sh production
```

### Manuelle Verwendung

```bash
# Wechsle ins Ansible-Verzeichnis
cd ansible

# Server-Setup durchführen
ansible-playbook -i inventory/hosts.ini setup.yml --limit staging

# Deployment durchführen
ansible-playbook -i inventory/hosts.ini playbooks/deploy.yml --limit staging
```

### Mit Tags

```bash
# Nur bestimmte Teile ausführen
ansible-playbook -i inventory/hosts.ini playbooks/deploy.yml --limit staging --tags="deploy,check"
```

## Umgebungsvariablen

Die Konfiguration für die verschiedenen Umgebungen wird in den entsprechenden Dateien unter `group_vars/` definiert:

- `all.yml`: Variablen für alle Umgebungen
- `common.yml`: Gemeinsame Variablen
- `staging.yml`: Variablen für die Staging-Umgebung
- `production.yml`: Variablen für die Produktionsumgebung

Folgende Hauptvariablen werden verwendet:

- `deploy_root`: Zielverzeichnis für das Deployment (/var/www/michaelschiemer)
- `app_domain`: Domain für die Anwendung
- `deploy_user`: Benutzer für das Deployment (deploy)

## Fehlerbehandlung

Wenn Sie auf Fehler stoßen, prüfen Sie folgende Punkte:

1. **YAML-Syntax-Fehler**: 
   - Führen Sie `./ansible/check_yaml.sh` aus, um Probleme zu identifizieren
   - Stellen Sie sicher, dass jede YAML-Datei nur ein Dokument enthält (nur ein `---` am Anfang)
   - Achten Sie auf korrekte Einrückung und Leerzeichen

2. **Berechtigungen**:
   - Stellen Sie sicher, dass die Scripts ausführbar sind: `chmod +x ansible/*.sh`
   - Überprüfen Sie, ob der Benutzer die nötigen Berechtigungen auf dem Server hat

3. **Arbeitsverzeichnis**:
   - Führen Sie die Skripte vom Hauptverzeichnis des Projekts aus: `./ansible/deploy.sh`
   - Bei manueller Ausführung: Wechseln Sie ins Ansible-Verzeichnis

4. **SSH-Schlüssel**:
   - Prüfen Sie, ob der SSH-Schlüssel für den Zugriff auf den Server korrekt eingerichtet ist
   - Testen Sie die SSH-Verbindung manuell: `ssh deploy@94.16.110.151`

5. **Abhängigkeiten**:
   - Stellen Sie sicher, dass Ansible installiert ist: `ansible --version`
   - Bei Bedarf: `pip install ansible`

## Troubleshooting häufiger Fehler

### "We were unable to read either as JSON nor YAML"

Dieser Fehler tritt auf, wenn mehrere YAML-Dokumente in einer Datei vorhanden sind. Lösung:

1. Führen Sie `./ansible/check_yaml.sh` aus, um problematische Dateien zu identifizieren
2. Entfernen Sie alle `---` außer dem ersten in jeder Datei
3. Stellen Sie sicher, dass keine leeren Zeilen vor dem ersten `---` stehen

### "No hosts matched"

Dieser Fehler tritt auf, wenn die Host-Gruppe nicht im Inventory gefunden wurde:

1. Überprüfen Sie die Datei `inventory/hosts.ini`
2. Stellen Sie sicher, dass die angegebene Gruppe existiert
3. Überprüfen Sie die `--limit` Option und den Host-Namen

## Weitere Informationen

Diese Konfiguration verwendet Docker und Docker Compose für die Containerisierung der Anwendung. Die Deployment-Strategie basiert auf der Synchronisierung von Dateien vom Entwicklungsrechner zum Zielserver und dem Starten der Container über Docker Compose.
