DevOps-Frust #1249

Programmierer freut sich vor dem Bildschirm mit einer Fehlermeldung "Finally, progress- a different error message"

…oder: Warum bekomme ich eine Nextcloud-Entwicklungsumgebung nicht unter ddev ans Laufen?

IT kann entweder total frustrierend sein oder total befreiend. an manchen Tagen ist man total im Flow und schafft gefühlt unendlich viele Dinge. An anderen Tagen wird nichts fertig.

Nicht-ITler verstehen nie, warum manche Lösungen 1000de Zeilen haben, manche aber nur 1 (und für letzte braucht man gefühlt ewig!)

Wir erhöhen die Komplexität

Viele Probleme sind aber selbst geschaffen. Ich kenne noch die Zeit, in der man Entwicklungsumgebungen direkt auf dem Rechner installiert, samt der kompletten Umgebung, die notwendig ist, um das „Programm“ testweise laufen zu lassen.

Aber seitdem es unterschiedliche Versionen von PHP für unterschiedliche Projekte (oder Projektstänge bzw Branches) aktuell sein können inkl. unterschiedlicher Node- und Node-Packages-Versionen. Diesen Zoo ans Laufen zu bekommen, erweist sich als sehr schwierig, deshalb kann man das ja dockerizen.

Jetzt steht man ja vor dem Problem, dass die richtigen Verzeichnisse „reingemountet“ werden müssen, ggfls. der richtige Container vorliegen muss und dann auch noch die richtigen Systempakete installiert sein müssen.

Dafür gibt es glücklicherweise inzwischen einen total coolen Wrapper: ddev. Ddev übernimmt alles und man kann (ddev-konfiguration im git eingecheckt) das ganze auf einem anderen System sofort mit nur einem Befehl ans Laufen bekommen. Total cool.

Automatische vs manuelle Konfiguration

Dabei sollte man nur aufpassen, welche Konfiguration ddev übernimmt und welche manuell eingestellt werden kann.

In meinem Fall wurden die nginx-Einstellungen immer wieder überschrieben (und ich habe es nicht gesehen). Ich musste lediglich die Zeile

#ddev-generated

aus der nginx-config entfernen und schon bekam ich eine andere Fehlermeldung. Endlich 500er und nicht mehr 404!

Bild KI-generiert mit Mistral

Der Rest war dann einfach. Und wer eine funktionierende .ddev/nginx_full/nginx-site.conf braucht, hier wäre eine-nicht perfekt, aber funktionstüchtig:

# ddev php default (PHP project type) config

# If you want to take over this file and customize it, remove the line above
# and ddev will respect it and won't overwrite the file.
# See https://docs.ddev.com/en/stable/users/extend/customization-extendibility/#custom-nginx-configuration

# Nextcloud-spezifische Nginx-Konfiguration für ddev
server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name nextcloud-development.ddev.site;
    root /var/www/html/nextcloud;
    ssl_certificate /etc/ssl/certs/master.crt;
    ssl_certificate_key /etc/ssl/certs/master.key;
    include /etc/nginx/monitoring.conf;

    # HSTS-Einstellungen (können in ddev ignoriert werden, da selbstsignierte Zertifikate verwendet werden)


    # Pfad zur Nextcloud-Installation
    index index.php index.html /index.php$request_uri;

    # Regel für .well-known (für Let's Encrypt und andere Dienste)
    location = /.well-known/carddav {
        return 301 /remote.php/dav/;
    }
    location = /.well-known/caldav {
        return 301 /remote.php/dav/;
    }

    # Regel für Robots.txt
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Deny Zugriff auf versteckte Dateien
    location ~ /\.(?!well-known) {
        deny all;
        access_log off;
        log_not_found off;
    }

    # Statische Dateien direkt ausliefern
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data) {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    # WICHTIG: Alle Anfragen an index.php weiterleiten
    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }

    # PHP-Verarbeitung
    location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass unix:/run/php-fpm.sock;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
        fastcgi_read_timeout 180;
    }

    # Statische Dateien (CSS, JS, Bilder, etc.)
    location ~ \.(?:css|js|woff2?|svg|gif|map|png|html|ttf|ico|jpg|jpeg|webp)$ {
        try_files $uri /index.php$request_uri;
        access_log off;
        expires 360d;
    }

    # Verhindere Zugriff auf Backup/Config/Source-Dateien
    location ~* (?:\.(?:bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op])|~)$ {
        deny all;
    }

    # ddev-spezifische Includes
    include /etc/nginx/common.d/*.conf;
}

Diese Seite verwendet ausschließlich technisch notwendige Cookies. Mit der weiteren Verwendung stimmst du dem zu.

Datenschutzerklärung