- name: Deployment für PRODUCTION hosts: production become: true gather_facts: false vars: docker_compose_project_path: "/var/www/www.michaelschiemer.de/" env_file_path: "/var/www/www.michaelschiemer.de/.env" deploy_root: /var/www/www.michaelschiemer.de deploy_public: "{{ deploy_root }}/public" deploy_user: deploy app_domain: "michaelschiemer.de" project_root: "{{ playbook_dir }}/../.." roles: - app - nginx - php - redis --- # Produktions-Deployment # Dieses Playbook steuert das Deployment in die Produktionsumgebung - name: Deployment für PRODUKTIONS-Umgebung hosts: production become: true gather_facts: true # Vorbereitung des Deployments pre_tasks: - name: Prüfe Verbindung zum Produktionsserver ping: register: ping_result tags: [always, check] - name: Zeige Serverinformationen debug: msg: "Verbunden mit {{ inventory_hostname }} ({{ ansible_host }})" tags: [always, check] - name: Sicherung der aktuellen Anwendung erstellen shell: | timestamp=$(date +%Y%m%d_%H%M%S) mkdir -p {{ deploy_root }}_backups tar -czf {{ deploy_root }}_backups/backup_$timestamp.tar.gz -C {{ deploy_root }} . || true tags: [backup] # Rollen für die Basiseinrichtung des Servers roles: - docker - app - nginx - php - redis # Haupttasks für das Deployment tasks: - name: Synchronisiere Anwendungsdateien synchronize: src: "{{ project_source }}/" dest: "{{ deploy_root }}/" delete: yes rsync_opts: - "--exclude=.git/" - "--exclude=node_modules/" - "--exclude=vendor/" - "--exclude=.env.local" tags: [sync, files] - name: Wende modulare Deployment-Tasks an import_tasks: ../deploy/includes/deploy_common.yml tags: [deploy] # Nachbereitung nach dem Deployment post_tasks: - name: Prüfe Anwendungsstatus uri: url: "https://{{ app_domain }}/" return_content: no status_code: 200, 301, 302, 403 validate_certs: yes register: app_status ignore_errors: yes delegate_to: localhost tags: [check] - name: Zeige Anwendungsstatus debug: msg: "Anwendung ist {% if app_status.status == 200 %}verfügbar{% else %}nicht verfügbar (Status: {{ app_status.status | default('unbekannt') }}){% endif %}" tags: [check] - name: Benachrichtigung über abgeschlossenes Deployment debug: msg: "Deployment in Produktionsumgebung abgeschlossen" tags: [always, notify] tasks: - name: Common Deployment Tasks import_tasks: ../deploy/includes/deploy_common.yml