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