--- - name: Vereinfachtes Deployment mit Docker hosts: all become: true gather_facts: true vars: deploy_root: /var/www/michaelschiemer deploy_user: "{{ ansible_user | default('deploy') }}" app_domain: "{{ hostvars[inventory_hostname]['ansible_host'] | default(inventory_hostname) }}" tasks: # 1. Grundlegende Server-Einrichtung - name: Installiere grundlegende Pakete apt: name: [curl, ca-certificates, gnupg, apt-transport-https, software-properties-common, iproute2] state: present update_cache: yes # 2. Docker Installation - name: Docker GPG-Schlüssel hinzufügen apt_key: url: https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg state: present - name: Docker Repository hinzufügen apt_repository: repo: "deb [arch=amd64] https://download.docker.com/linux/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} stable" state: present - name: Docker Engine installieren apt: name: [docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin] state: present update_cache: yes - name: Benutzer zur Docker-Gruppe hinzufügen user: name: "{{ ansible_user }}" groups: docker append: yes - name: Docker-Service aktivieren service: name: docker state: started enabled: yes # 3. Verzeichnisstruktur anlegen - name: Stelle sicher, dass die Verzeichnisse existieren file: path: "{{ deploy_root }}/{{ item }}" state: directory mode: '0755' owner: "{{ deploy_user }}" group: "{{ deploy_user }}" recurse: yes loop: - public - docker/nginx - docker/php - src # 4. Docker-Compose Datei erstellen - name: Erstelle docker-compose.yml copy: dest: "{{ deploy_root }}/docker-compose.yml" content: | version: '3.8' services: php: container_name: michaelschiemer_php image: php:8.4-fpm volumes: - ./src:/var/www/html/src:rw - ./public:/var/www/html/public:rw networks: - backend nginx: container_name: michaelschiemer_nginx image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./public:/var/www/html/public:ro - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - php networks: - frontend - backend networks: frontend: backend: owner: "{{ deploy_user }}" group: "{{ deploy_user }}" mode: '0644' # 5. Nginx Konfiguration erstellen - name: Erstelle Nginx-Konfiguration copy: dest: "{{ deploy_root }}/docker/nginx/nginx.conf" content: | user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; include /etc/nginx/conf.d/*.conf; } mode: '0644' - name: Erstelle Nginx Default-Site-Konfiguration copy: dest: "{{ deploy_root }}/docker/nginx/default.conf" content: | server { listen 80; listen [::]:80; server_name _; root /var/www/html/public; index index.html index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } mode: '0644' # 6. Test HTML-Datei erstellen - name: Erstelle Testseite copy: dest: "{{ deploy_root }}/public/index.html" content: |
Diese Seite bestätigt, dass der Nginx-Webserver korrekt läuft.
Server: {{ inventory_hostname }}
IP: {{ ansible_default_ipv4.address }}
Deployment-Zeit: {{ ansible_date_time.iso8601 }}