# ๐Ÿš€ Laravel Application - Azure Kubernetes Deployment Diese Anwendung ist bereit fรผr das Deployment auf Azure Kubernetes Service (AKS) mit vollstรคndiger Terraform-Automatisierung. ## ๐Ÿ“ Struktur ``` frontend/ โ”œโ”€โ”€ Dockerfile # Production-ready multi-stage Docker build โ”œโ”€โ”€ docker-compose.yml # Lokale Entwicklung โ”œโ”€โ”€ deploy/ # Docker-spezifische Konfiguration โ”‚ โ”œโ”€โ”€ docker-entrypoint.sh โ”‚ โ”œโ”€โ”€ nginx/ โ”‚ โ””โ”€โ”€ supervisord.conf โ”œโ”€โ”€ terraform/ # Terraform Infrastructure-as-Code โ”‚ โ”œโ”€โ”€ main.tf # Haupt-Konfiguration โ”‚ โ”œโ”€โ”€ variables.tf # Variablen โ”‚ โ”œโ”€โ”€ outputs.tf # Outputs โ”‚ โ”œโ”€โ”€ postgresql.tf # Azure PostgreSQL โ”‚ โ”œโ”€โ”€ kubernetes.tf # K8s Resources โ”‚ โ”œโ”€โ”€ ingress.tf # Nginx Ingress Controller โ”‚ โ”œโ”€โ”€ db-restore.tf # Database Restore Job โ”‚ โ”œโ”€โ”€ terraform.tfvars.example # Beispiel-Konfiguration โ”‚ โ”œโ”€โ”€ README.md # Ausfรผhrliche Dokumentation โ”‚ โ”œโ”€โ”€ QUICKSTART.md # 30-Minuten Schnellstart โ”‚ โ”œโ”€โ”€ GITHUB_ACTIONS_SETUP.md # CI/CD Setup โ”‚ โ””โ”€โ”€ scripts/ โ”‚ โ”œโ”€โ”€ deploy.sh # Automatisches Deployment โ”‚ โ””โ”€โ”€ restore-db.sh # Database Restore โ”œโ”€โ”€ .github/workflows/ โ”‚ โ””โ”€โ”€ deploy-azure.yml # GitHub Actions CI/CD Pipeline โ””โ”€โ”€ backups/ # PostgreSQL Backup-Dateien โ””โ”€โ”€ *.dump ``` ## ๐ŸŽฏ Features ### Infrastruktur - โœ… **Azure PostgreSQL Flexible Server** (16) mit automatischen Backups - โœ… **Azure Kubernetes Service (AKS)** mit Auto-Scaling - โœ… **Nginx Ingress Controller** mit LoadBalancer - โœ… **Let's Encrypt SSL/TLS** (optional) - โœ… **Horizontal Pod Autoscaler** (CPU & Memory basiert) - โœ… **Azure Monitor Integration** mit Log Analytics ### Container - โœ… **Multi-Stage Docker Build** (optimiert fรผr Production) - โœ… **Alpine Linux** (minimales Image) - โœ… **PHP 8.2 + Nginx + Supervisor** - โœ… **PostgreSQL & SQLite Support** - โœ… **Vite Assets** werden beim Build kompiliert ### Deployment - โœ… **Terraform Infrastructure-as-Code** - โœ… **Kubernetes Manifests** als Terraform Resources - โœ… **Automatische DB-Migration** bei Deployment - โœ… **Database Backup Restore** als Kubernetes Job - โœ… **Zero-Downtime Rolling Updates** - โœ… **GitHub Actions CI/CD Pipeline** ## ๐Ÿš€ Schnellstart ### Option 1: Automatisches Deployment (Empfohlen) ```bash # 1. Azure Login az login az account set --subscription "77677a80-2dea-493d-9867-f1c961b80fb3" # 2. Container Registry Setup az acr create --resource-group trusted_ai_demo_rg --name mylaravelregistry --sku Basic az aks update --resource-group trusted_ai_demo_rg --name trai_k8s_cluster --attach-acr mylaravelregistry az acr login --name mylaravelregistry # 3. Docker Image bauen docker build -t mylaravelregistry.azurecr.io/laravel-app:v1.0.0 . docker push mylaravelregistry.azurecr.io/laravel-app:v1.0.0 # 4. Terraform konfigurieren cd terraform cp terraform.tfvars.example terraform.tfvars nano terraform.tfvars # Wichtige Werte anpassen # 5. Deployment ausfรผhren ./scripts/deploy.sh # 6. Datenbank wiederherstellen ./scripts/restore-db.sh ``` **Deployment Zeit**: ~30 Minuten ### Option 2: Manuelle Schritte Siehe [terraform/QUICKSTART.md](terraform/QUICKSTART.md) fรผr detaillierte Anleitung. ## ๐Ÿ“– Dokumentation | Datei | Beschreibung | |-------|--------------| | [terraform/QUICKSTART.md](terraform/QUICKSTART.md) | 30-Minuten Schnellstart-Guide | | [terraform/README.md](terraform/README.md) | Ausfรผhrliche Dokumentation (Troubleshooting, Wartung, etc.) | | [terraform/GITHUB_ACTIONS_SETUP.md](terraform/GITHUB_ACTIONS_SETUP.md) | CI/CD Pipeline Setup | ## ๐Ÿ”ง Wichtige Konfiguration ### Terraform Variables ([terraform/terraform.tfvars](terraform/terraform.tfvars.example)) ```hcl # Docker Image (von ACR) docker_image = "mylaravelregistry.azurecr.io/laravel-app:v1.0.0" # Laravel APP_KEY (generiere mit: php artisan key:generate --show) app_key = "base64:..." # PostgreSQL postgresql_admin_username = "pgadmin" postgresql_admin_password = "YourSecurePassword123!" # Ingress & SSL ingress_enabled = true ssl_enabled = false # Auf true fรผr Production mit Domain # Database Restore db_restore_enabled = true db_backup_file_path = "../backups/backup_backend_20251203_101741.dump" ``` ## ๐Ÿ—๏ธ Architektur ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Azure Cloud (germanywestcentral) โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ AKS Cluster: trai_k8s_cluster โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Laravel App (2-6 Pods, Auto-Scaling) โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Nginx Ingress (LoadBalancer) โ”‚ โ”‚ โ”‚ โ”‚ โ€ข ConfigMaps & Secrets โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ PostgreSQL Flexible Server โ”‚ โ”‚ โ”‚ โ”‚ โ€ข PostgreSQL 16 โ”‚ โ”‚ โ”‚ โ”‚ โ€ข 32 GB Storage โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Auto Backups (7 days) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๐ŸŽฎ Hรคufige Befehle ### Deployment ```bash # Neues Image deployen docker build -t mylaravelregistry.azurecr.io/laravel-app:v1.0.1 . docker push mylaravelregistry.azurecr.io/laravel-app:v1.0.1 kubectl set image deployment/laravel-app laravel-app=mylaravelregistry.azurecr.io/laravel-app:v1.0.1 -n laravel-app # Terraform apply cd terraform && terraform apply # Database Restore cd terraform && ./scripts/restore-db.sh ``` ### Monitoring ```bash # kubectl credentials abrufen az aks get-credentials --resource-group trusted_ai_demo_rg --name trai_k8s_cluster # Pods prรผfen kubectl get pods -n laravel-app # Logs anzeigen kubectl logs -n laravel-app -l app=laravel-app -f # Service Status kubectl get svc -n laravel-app kubectl get ingress -n laravel-app # LoadBalancer IP kubectl get svc ingress-nginx-controller -n ingress-nginx ``` ### Troubleshooting ```bash # Pod Status detailliert kubectl describe pod -n laravel-app # Events prรผfen kubectl get events -n laravel-app --sort-by='.lastTimestamp' # Shell in Pod kubectl exec -it -n laravel-app -- /bin/sh # Port-forward fรผr lokalen Zugriff kubectl port-forward -n laravel-app svc/laravel-app 8080:80 ``` ## ๐Ÿ”„ CI/CD Pipeline ### GitHub Actions Die Pipeline wird automatisch ausgefรผhrt bei: - Push auf `main` Branch (Staging) - Push auf `production` Branch (Production) - Manuell รผber GitHub UI **Setup**: Siehe [terraform/GITHUB_ACTIONS_SETUP.md](terraform/GITHUB_ACTIONS_SETUP.md) ### Workflow Steps 1. **Build & Push** - Docker Image bauen und zu ACR pushen 2. **Terraform Deploy** - Infrastruktur mit Terraform deployen 3. **Smoke Tests** - Basis-Tests nach Deployment 4. **Notifications** - Status-Benachrichtigungen ## ๐Ÿ“Š Kosten-รœbersicht **Staging/Development:** - AKS: ~30-50โ‚ฌ/Monat (2 Nodes, B2s) - PostgreSQL: ~15-20โ‚ฌ/Monat (Basic tier) - Load Balancer: ~5โ‚ฌ/Monat - **Total: ~50-75โ‚ฌ/Monat** **Production:** - AKS: ~100-150โ‚ฌ/Monat (3 Nodes, D2s_v3) - PostgreSQL: ~50-80โ‚ฌ/Monat (General Purpose) - Load Balancer: ~5โ‚ฌ/Monat - **Total: ~155-235โ‚ฌ/Monat** ## ๐Ÿ”’ Sicherheit ### Implementiert - โœ… Secrets Management via Kubernetes Secrets - โœ… PostgreSQL Firewall Rules - โœ… Nginx Rate Limiting - โœ… Resource Limits fรผr Pods - โœ… Rolling Updates (Zero Downtime) ### Empfohlen fรผr Production - [ ] Azure Key Vault Integration - [ ] VNet Integration fรผr PostgreSQL - [ ] Private Endpoints - [ ] Network Policies - [ ] Pod Security Policies - [ ] RBAC fรผr Kubernetes - [ ] Azure AD Integration ## ๐Ÿšฆ Status Checks ### Deployment erfolgreich? ```bash # Pods running? kubectl get pods -n laravel-app # Sollte: 2/2 Running # Service erreichbar? kubectl get svc ingress-nginx-controller -n ingress-nginx # Sollte: EXTERNAL-IP anzeigen # Database connected? kubectl logs -n laravel-app -l app=laravel-app | grep -i "database" # Anwendung im Browser รถffnen terraform output app_url ``` ## ๐Ÿ†˜ Support ### Bei Problemen 1. **Terraform Issues**: Siehe [terraform/README.md#troubleshooting](terraform/README.md#troubleshooting) 2. **Kubernetes Issues**: `kubectl describe pod -n laravel-app` 3. **Database Issues**: Prรผfe Firewall Rules und Secrets 4. **Ingress Issues**: `kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller` ### Nรผtzliche Logs ```bash # Application Logs kubectl logs -n laravel-app -l app=laravel-app -f # Database Restore Logs kubectl logs -n laravel-app -l job-type=database-restore # Ingress Controller Logs kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller -f # All Events kubectl get events -n laravel-app --sort-by='.lastTimestamp' ``` ## ๐Ÿ“š Nรคchste Schritte Nach erfolgreichem Deployment: 1. **Domain konfigurieren** - DNS A-Record auf LoadBalancer IP - SSL aktivieren in terraform.tfvars - `terraform apply` 2. **Monitoring einrichten** - Azure Monitor im Portal prรผfen - Alert Rules konfigurieren - Application Insights (optional) 3. **CI/CD Pipeline** - GitHub Actions Secrets konfigurieren - Branch Protection Rules - Staging โ†’ Production Workflow 4. **Security Hardening** - Azure Key Vault - VNet Integration - Private Endpoints - RBAC 5. **Performance Optimization** - Redis fรผr Cache/Sessions - CDN fรผr Static Assets - Database Query Optimization ## ๐ŸŽ‰ Fertig! Deine Laravel-Anwendung lรคuft jetzt produktionsbereit auf Azure Kubernetes Service! **Deployment Command**: `cd terraform && ./scripts/deploy.sh` --- **Erstellt**: Dezember 2024 **Version**: 1.0.0 **Status**: Production Ready โœ