# PHP Projekt Setup für Netcup ## Projektstruktur Das Deployment erwartet diese Struktur in deinem Hauptprojekt: ``` dein-projekt/ # Hauptordner ├── ansible/ # Hier sind wir jetzt │ └── netcup-simple-deploy/ ├── docker/ # Docker-Konfiguration │ ├── Dockerfile # (optional, wird sonst automatisch erstellt) │ └── docker-compose.yml # (optional) ├── src/ # PHP Framework/Library Dateien │ ├── classes/ │ ├── includes/ │ └── ... ├── public/ # Web-Root (öffentlich zugänglich) │ ├── index.php # Haupteinstiegspunkt │ ├── css/ │ ├── js/ │ ├── images/ │ └── ... ├── storage/ # (optional) Logs, Cache, etc. ├── cache/ # (optional) Cache-Dateien ├── logs/ # (optional) Log-Dateien └── .env # (optional) Umgebungsvariablen ``` ## Quick Setup ### 1. Konfiguration ```bash cd ansible/netcup-simple-deploy vim inventory/hosts.yml ``` **Ändere diese Werte:** ```yaml ansible_host: DEINE-NETCUP-IP domain: "deine-domain.com" ssl_email: "deine@email.com" local_app_path: "../.." # Zeigt auf dein Hauptprojekt php_version: "8.2" # PHP Version ``` ### 2. Deployment ```bash make deploy ``` Das war's! Deine PHP-App läuft unter `https://deine-domain.com` ## Was passiert beim Deployment? 1. **Dateien übertragen:** `public/`, `src/`, `docker/` → Server 2. **Dockerfile erstellen:** Falls keins in `docker/` vorhanden 3. **Docker Container bauen:** PHP + Apache + deine App 4. **Nginx Proxy:** SSL-Termination und Weiterleitung 5. **SSL-Zertifikat:** Automatisch mit Let's Encrypt ## Für verschiedene PHP-Setups ### Eigenes Dockerfile verwenden Lege dein Dockerfile in `docker/Dockerfile`: ```dockerfile FROM php:8.2-apache # Deine spezifischen PHP Extensions RUN docker-php-ext-install pdo pdo_mysql # Custom Apache Config COPY docker/apache.conf /etc/apache2/sites-available/000-default.conf # App Dateien COPY public/ /var/www/html/ COPY src/ /var/www/src/ EXPOSE 80 ``` ### Mit Composer Dependencies ```dockerfile FROM php:8.2-apache # Composer installieren COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Dependencies installieren COPY composer.json composer.lock /var/www/ WORKDIR /var/www RUN composer install --no-dev --optimize-autoloader # App kopieren COPY public/ /var/www/html/ COPY src/ /var/www/src/ ``` ### Mit Database Erweitere `inventory/hosts.yml`: ```yaml app_env: APP_ENV: "production" DATABASE_HOST: "your-db-host" DATABASE_NAME: "your-db-name" DATABASE_USER: "your-db-user" DATABASE_PASS: "your-db-password" ``` ## Nützliche Befehle ```bash # Logs anschauen make logs make error-logs # Cache löschen make clear-cache # Permissions reparieren make fix-permissions # Composer auf Server ausführen make composer-install # Live logs verfolgen make tail-logs # SSH auf Server make ssh ``` ## Troubleshooting ### App lädt nicht? ```bash # Apache Fehler-Logs prüfen make error-logs # Allgemeine Logs make logs # Container Status make status ``` ### Permissions-Probleme? ```bash # Permissions reparieren make fix-permissions ``` ### Nach Code-Änderungen? ```bash # Einfach neu deployen make deploy ``` ### Database-Verbindung? ```bash # Umgebungsvariablen prüfen ansible all -m shell -a "docker exec \$(docker ps -q | head -1) env | grep DATABASE" ``` Das Setup ist optimiert für deine bestehende Projektstruktur - keine Änderungen an deinem Code nötig! 🎉