Files
michaelschiemer/x_ansible/README.md

147 lines
4.7 KiB
Markdown

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