Resolved multiple critical discovery system issues: ## Discovery System Fixes - Fixed console commands not being discovered on first run - Implemented fallback discovery for empty caches - Added context-aware caching with separate cache keys - Fixed object serialization preventing __PHP_Incomplete_Class ## Cache System Improvements - Smart caching that only caches meaningful results - Separate caches for different execution contexts (console, web, test) - Proper array serialization/deserialization for cache compatibility - Cache hit logging for debugging and monitoring ## Object Serialization Fixes - Fixed DiscoveredAttribute serialization with proper string conversion - Sanitized additional data to prevent object reference issues - Added fallback for corrupted cache entries ## Performance & Reliability - All 69 console commands properly discovered and cached - 534 total discovery items successfully cached and restored - No more __PHP_Incomplete_Class cache corruption - Improved error handling and graceful fallbacks ## Testing & Quality - Fixed code style issues across discovery components - Enhanced logging for better debugging capabilities - Improved cache validation and error recovery Ready for production deployment with stable discovery system. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
251 lines
8.0 KiB
YAML
251 lines
8.0 KiB
YAML
---
|
|
- 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: |
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Webserver ist aktiv</title>
|
|
<style>
|
|
body { font-family: Arial, sans-serif; margin: 40px; line-height: 1.6; }
|
|
h1 { color: #333; }
|
|
.container { max-width: 800px; margin: 0 auto; padding: 20px; border: 1px solid #ddd; border-radius: 5px; }
|
|
.success { color: green; }
|
|
.info { margin-top: 20px; background: #f8f8f8; padding: 10px; border-radius: 5px; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<h1>Webserver ist <span class="success">aktiv</span>!</h1>
|
|
<p>Diese Seite bestätigt, dass der Nginx-Webserver korrekt läuft.</p>
|
|
<div class="info">
|
|
<h3>Server-Informationen:</h3>
|
|
<p>Server: {{ inventory_hostname }}</p>
|
|
<p>IP: {{ ansible_default_ipv4.address }}</p>
|
|
<p>Deployment-Zeit: {{ ansible_date_time.iso8601 }}</p>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
mode: '0644'
|
|
|
|
# 7. Container starten
|
|
- name: Stoppe alle vorhandenen Container
|
|
command: docker-compose down --remove-orphans
|
|
args:
|
|
chdir: "{{ deploy_root }}"
|
|
ignore_errors: yes
|
|
|
|
- name: Starte Docker-Container
|
|
command: docker-compose up -d
|
|
args:
|
|
chdir: "{{ deploy_root }}"
|
|
|
|
# 8. Status und Tests
|
|
- name: Warte kurz bis Docker-Container gestartet sind
|
|
pause:
|
|
seconds: 5
|
|
|
|
- name: Server-IP ermitteln
|
|
shell: hostname -I | awk '{print $1}'
|
|
register: server_ip
|
|
ignore_errors: yes
|
|
|
|
- name: Prüfe Nginx-Container Status
|
|
shell: docker ps | grep nginx || echo "Kein Nginx-Container gefunden"
|
|
register: nginx_status
|
|
ignore_errors: yes
|
|
|
|
- name: Prüfe ob Port 80 offen ist
|
|
shell: ss -tulpn | grep LISTEN | grep ':80' || echo "Kein Prozess an Port 80 gebunden"
|
|
register: port_80_check
|
|
ignore_errors: yes
|
|
|
|
- name: Teste lokalen Zugriff auf Port 80
|
|
shell: curl -s --connect-timeout 5 -I http://localhost:80 || curl -s --connect-timeout 5 -I http://127.0.0.1:80 || echo "Lokale Verbindung fehlgeschlagen"
|
|
register: curl_local_test
|
|
ignore_errors: yes
|
|
|
|
- name: Zeige Anwendungsstatus und Server-Informationen
|
|
debug:
|
|
msg: |
|
|
Anwendungsstatus:
|
|
- Server IP: {{ server_ip.stdout | trim | default('nicht verfügbar') }}
|
|
- Domain: {{ app_domain }}
|
|
|
|
Docker-Container Status:
|
|
{{ nginx_status.stdout | default('Keine Informationen verfügbar') }}
|
|
|
|
Port-Status:
|
|
{{ port_80_check.stdout | default('Keine Port-Informationen verfügbar') }}
|
|
|
|
Lokaler Verbindungstest:
|
|
{{ curl_local_test.stdout | default('Keine Testinformationen verfügbar') }}
|
|
|
|
Docker-Container sollte auf Port 80 verfügbar sein.
|
|
|
|
Lösungsvorschläge bei Verbindungsproblemen:
|
|
- Firewall-Regeln prüfen: sudo ufw status
|
|
- Container-Logs prüfen: docker logs michaelschiemer_nginx
|
|
- Container neu starten: cd {{ deploy_root }} && docker-compose restart nginx
|