# Quick Deploy Guide Schnellanleitung für Production Deployments. ## Voraussetzungen - WireGuard VPN aktiv: `sudo wg-quick up wg0-production` - SSH-Zugang konfiguriert - Docker Registry läuft auf Production Server ## Deployment in 5 Schritten ### 1. Image bauen und pushen ```bash # Im Projekt-Root docker build -f Dockerfile.production -t 94.16.110.151:5000/framework:latest . docker push 94.16.110.151:5000/framework:latest ``` **Verify Push**: ```bash curl http://94.16.110.151:5000/v2/framework/tags/list ``` ### 2. Config-Files auf Server kopieren ```bash # Falls docker-compose.prod.yml oder .env geändert wurden scp docker-compose.prod.yml deploy@94.16.110.151:/home/deploy/framework/ scp .env.production deploy@94.16.110.151:/home/deploy/framework/.env ``` ### 3. Auf Server deployen ```bash ssh deploy@94.16.110.151 cd /home/deploy/framework # Pull und Deploy docker-compose -f docker-compose.yml -f docker-compose.prod.yml pull docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d ``` ### 4. Status checken ```bash # Container Status docker-compose -f docker-compose.yml -f docker-compose.prod.yml ps # Logs anschauen docker-compose -f docker-compose.yml -f docker-compose.prod.yml logs -f web php # Supervisor Status (im web container) docker exec web supervisorctl status ``` ### 5. Application testen ```bash # Von lokaler Maschine (via WireGuard) curl -k -I https://94.16.110.151:8443/ # Erwartetes Ergebnis: # HTTP/2 200 # server: nginx ``` ## Rollback Falls Probleme auftreten: ```bash # Auf Server cd /home/deploy/framework # Vorheriges Image ID finden docker images 94.16.110.151:5000/framework # Zu spezifischem Image wechseln docker-compose -f docker-compose.yml -f docker-compose.prod.yml down docker tag 94.16.110.151:5000/framework@sha256: 94.16.110.151:5000/framework:latest docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d ``` ## Monitoring URLs **Zugang nur via WireGuard VPN (10.8.0.1)**: - Prometheus: http://10.8.0.1:9090 - Grafana: http://10.8.0.1:3000 (admin / $GRAFANA_PASSWORD) - Portainer: https://10.8.0.1:9443 ## Watchtower Auto-Updates Watchtower überwacht automatisch und updated Container mit neuem Image (alle 5 Minuten). **Status checken**: ```bash docker logs watchtower ``` **Manuell triggern**: ```bash # Watchtower neu starten (triggert sofortigen Check) docker restart watchtower ``` ## Troubleshooting ### Container nicht healthy ```bash # Logs anschauen docker logs web docker logs php # Im Container debuggen docker exec -it web sh docker exec -it php sh # Supervisor Status docker exec web supervisorctl status # Nginx/PHP-FPM Prozesse docker exec web ps aux | grep -E 'nginx|php-fpm' ``` ### Database Connection Issues ```bash # PostgreSQL Connection testen docker exec php php -r "new PDO('pgsql:host=db;dbname=framework_db', 'framework_user', 'password');" # Database Logs docker logs db # In Database connecten docker exec -it db psql -U framework_user -d framework_db ``` ### Redis Connection Issues ```bash # Redis Connection testen docker exec php php -r "var_dump((new Redis())->connect('redis', 6379));" # Redis Logs docker logs redis # Redis CLI docker exec -it redis redis-cli ``` ## Maintenance Commands ### Database Backup ```bash # Manual Backup docker exec db pg_dump -U framework_user framework_db > backup_$(date +%Y%m%d_%H%M%S).sql ``` ### Logs Cleanup ```bash # Storage Logs leeren (auf Server) docker exec web sh -c 'rm -rf /var/www/html/storage/logs/*.log' # Docker Logs cleanup docker system prune -f docker volume prune -f ``` ### Image Cleanup ```bash # Alte Images entfernen docker image prune -a -f # Nur untagged images docker image prune -f ``` ## Performance Check ```bash # Container Resource Usage docker stats # PHP-FPM Status docker exec web curl http://localhost/php-fpm-status # Nginx Status docker exec web curl http://localhost/nginx-status # Database Connections docker exec db psql -U framework_user -d framework_db -c "SELECT count(*) FROM pg_stat_activity;" ``` ## SSL Certificate Renewal ```bash # Let's Encrypt Renewal (auf Server als root) certbot renew docker exec web nginx -s reload ``` ## Nützliche Aliases Füge zu `~/.bashrc` auf Production Server hinzu: ```bash alias dc='docker-compose -f docker-compose.yml -f docker-compose.prod.yml' alias dcup='dc up -d' alias dcdown='dc down' alias dcps='dc ps' alias dclogs='dc logs -f' alias dcrestart='dc restart' ``` Dann kannst du einfach verwenden: ```bash dcup # Deploy dcps # Status dclogs # Logs anschauen ```