Dolibarr mit Nginx installieren

Dolibarr 24 mit Nginx, PHP-FPM und MariaDB auf Ubuntu oder Debian installieren, mit getesteter Konfiguration. Dazu, was das mitgelieferte Beispiel falsch macht: REST-API mit 404, Uploads ab 1 MB blockiert, Ordner nur unter Apache geschützt.

Soll jemand Ihre Instanz ansehen? Diagnose, Festpreis 90 €.

Betroffene Versionen
Dolibarr 24.0.2 (offizielles Archiv) · Debian 13 und Ubuntu 24.04 LTS · Nginx und PHP-FPM aus den Paketen der Distribution
Was geprüft wurde (Versionen, Tests, gelesener Code)

Neuinstallationen am 02.11.2026 in Docker-Containern: Debian 13 (Nginx 1.26.3, PHP 8.4.27, MariaDB 11.8.6) mit den Befehlen dieser Seite unverändert ausgeführt (sudo beibehalten, service statt systemctl), Assistent bis zur Anmeldeseite durchlaufen, API-Modul aktiviert und mit Schlüssel aufgerufen, Rechnung freigegeben und PDF erzeugt, Upload von 5 MB vor und nach dem Dolibarr-Limit, Nginx-Log nach dem Durchklicken der Masken gelesen; Ubuntu 24.04 (Nginx 1.24.0, PHP 8.3.6, MariaDB 10.11.14) für die Schritte 1 bis 3 und die Prüfungen. Offizielles Beispiel aus dem Archiv 24.0.2 auf Debian 13 getestet.

Dolibarr ist vor allem für Apache dokumentiert. Mit Nginx läuft es genauso gut, wenn man drei Dinge übernimmt, die Apache stillschweigend erledigt hat. Diese Seite installiert Dolibarr 24 mit Nginx, PHP-FPM und MariaDB auf Debian 13 oder Ubuntu 24.04, mit einer getesteten Konfiguration.

Dolibarr liefert eine Beispielkonfiguration für Nginx mit (dev/setup/nginx/dolibarr im Archiv). Wir haben sie auf einer Neuinstallation ausprobiert: Sie hat drei Fehler.

  • Nginx startet nicht. Die Zeile fastcgi_pass endet mit einem Kommentar //, den es in der Nginx-Syntax nicht gibt: nginx -t meldet unexpected "}". Der Socket-Pfad ist außerdem der von PHP 5.
  • Die REST-API antwortet mit 404. Ohne das // liefert /api/index.php/status die Seite „404 Not Found“ von Nginx: Die Anfrage kommt nie bei Dolibarr an.
  • Der Ordner conf ist aus dem Web lesbar. Dolibarr schützt ihn mit einer .htaccess-Datei, die Nginx ignoriert. In unserem Test erschien eine Sicherungskopie conf.php.bak als Klartext im Browser, samt Datenbankpasswort. Auch die PHP-Skripte der Bibliotheken in includes, die Dolibarr nicht direkt aufrufen lässt, werden ausgeführt.

Dazu kommt ein eigenes Limit von Nginx: Uploads über 1 MB werden abgewiesen, bevor PHP oder Dolibarr sie überhaupt sehen. In unserem Test bekam eine 5-MB-Datei „413 Request Entity Too Large“.

Die Konfiguration unten behebt alle vier Punkte.

1. Nginx, PHP-FPM und MariaDB installieren

sudo apt update
sudo apt install -y nginx mariadb-server php-fpm php-mysql php-gd php-curl php-intl php-zip php-xml php-mbstring curl cron

Dieselben Erweiterungen wie bei Apache, mit php-fpm statt des Apache-Moduls.

2. Dolibarr herunterladen und die Datenbank anlegen

Beide Schritte sind dieselben wie bei Apache: Auf Debian und Ubuntu läuft auch PHP-FPM unter dem Benutzer www-data.

cd /tmp
curl -fL -o dolibarr-24.0.2.tgz "https://sourceforge.net/projects/dolibarr/files/Dolibarr%20ERP-CRM/24.0.2/dolibarr-24.0.2.tgz/download"
sudo tar --no-same-owner -xzf /tmp/dolibarr-24.0.2.tgz -C /var/www
sudo mv /var/www/dolibarr-24.0.2 /var/www/dolibarr
sudo mkdir -p /var/lib/dolibarr/documents
sudo touch /var/www/dolibarr/htdocs/conf/conf.php
sudo chown www-data:www-data /var/www/dolibarr/htdocs/conf/conf.php
sudo chown -R www-data:www-data /var/lib/dolibarr/documents /var/www/dolibarr/htdocs/custom
DBPASS=$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 24); echo "Datenbankpasswort: $DBPASS"
sudo mariadb -e "CREATE DATABASE dolibarr CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'dolibarr'@'localhost' IDENTIFIED BY '$DBPASS';
GRANT ALL PRIVILEGES ON dolibarr.* TO 'dolibarr'@'localhost';"

Notieren Sie das angezeigte Passwort: Der Assistent fragt danach.

3. Die Nginx-Konfiguration

PHPV=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')
sudo tee /etc/nginx/sites-available/dolibarr > /dev/null <<CONF
server {
    listen 80;
    listen [::]:80;
    server_name dolibarr.example.com;

    root /var/www/dolibarr/htdocs;
    index index.php;

    # Nginx weist standardmäßig jeden Upload über 1 MB ab
    client_max_body_size 20M;

    access_log /var/log/nginx/dolibarr_access.log;
    error_log /var/log/nginx/dolibarr_error.log;

    location / {
        try_files \$uri \$uri/ =404;
    }

    # Was die .htaccess-Dateien von Dolibarr unter Apache erledigen
    location ^~ /conf/ {
        deny all;
    }
    location ~ ^/includes/.+\.php$ {
        deny all;
    }
    location ~ /\.(?!well-known) {
        deny all;
    }

    location ~ [^/]\.php(/|$) {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php$PHPV-fpm.sock;
        fastcgi_read_timeout 600;
    }
}
CONF
sudo ln -s /etc/nginx/sites-available/dolibarr /etc/nginx/sites-enabled/dolibarr
sudo rm /etc/nginx/sites-enabled/default
sudo tee /etc/php/$PHPV/fpm/conf.d/99-dolibarr.ini /etc/php/$PHPV/cli/conf.d/99-dolibarr.ini > /dev/null <<'INI'
upload_max_filesize = 20M
post_max_size = 22M
date.timezone = Europe/Berlin
INI
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl restart php$PHPV-fpm

Ersetzen Sie dolibarr.example.com durch den Namen Ihres Servers und Europe/Berlin bei Bedarf durch Ihre Zeitzone.

Was sich gegenüber dem offiziellen Beispiel ändert:

  • snippets/fastcgi-php.conf, das mit dem Nginx-Paket von Debian und Ubuntu kommt, trennt den Skriptnamen vom Rest der Adresse und gibt den Rest an PHP weiter (PATH_INFO). Genau das braucht die REST-API. Das offizielle Beispiel prüft, ob die gesamte Adresse eine Datei ist (try_files $uri =404), und liefert deshalb 404 für /api/index.php/thirdparties.
  • client_max_body_size 20M gleicht Nginx an die 20 MB an, die PHP annimmt.
  • Die drei deny-Blöcke ersetzen die .htaccess-Dateien: Der Ordner conf ist aus dem Web nicht mehr erreichbar, die PHP-Skripte der Bibliotheken in includes lassen sich nicht mehr direkt aufrufen, und versteckte Dateien (.git, .htaccess…) werden nicht ausgeliefert.
  • $PHPV wählt den richtigen Socket: PHP 8.4 auf Debian 13, PHP 8.3 auf Ubuntu 24.04.

sudo nginx -t muss vor dem Neuladen „syntax is ok“ und „test is successful“ melden.

4. Assistent, install.lock und das 2-MB-Limit

Der Rest ist derselbe wie bei Apache, ausführlich in Dolibarr auf Ubuntu oder Debian installieren:

  1. öffnen Sie http://ihr-server/install/ und ersetzen Sie auf der Konfigurationsseite den Dokumentenordner durch /var/lib/dolibarr/documents;
  2. schließen Sie die Installation ab:
sudo touch /var/lib/dolibarr/documents/install.lock
sudo chmod 400 /var/www/dolibarr/htdocs/conf/conf.php
sudo find /var/www/dolibarr/htdocs -path /var/www/dolibarr/htdocs/custom -prune -o -exec chmod a-w {} +
  1. heben Sie das eigene Limit von Dolibarr (2.048 KB) unter Start › Einstellungen › Sicherheit › Dateien auf 20480 an.

Die drei Limits gehören zusammen: Nginx (client_max_body_size), PHP (upload_max_filesize) und Dolibarr. Das niedrigste weist die Datei ab.

5. Prüfen, ob alles stimmt

Auf dem Server:

curl -s -o /dev/null -w "%{http_code}\n" http://localhost/conf/conf.php
curl -s -o /dev/null -w "%{http_code}\n" http://localhost/includes/sabre/autoload.php
curl -s http://localhost/api/index.php/status

Die ersten beiden Zeilen müssen 403 liefern: Der Ordner conf und die Skripte in includes sind gesperrt.

Die dritte zeigt, dass die API bei Dolibarr ankommt. Nach der Installation ist das API-Modul deaktiviert: Die Antwort meldet dann, dass das Modul Api aktiviert sein muss. Sobald das Modul aktiviert ist (Start › Einstellungen › Module/Anwendungen), antwortet dieselbe Adresse ohne Schlüssel mit 401 und mit Schlüssel mit der Dolibarr-Version. Erscheint die Seite „404 Not Found“ von Nginx, kommt der Rest der Adresse (PATH_INFO) nicht bei PHP an: Prüfen Sie die Zeile include snippets/fastcgi-php.conf.

Die deny-Blöcke stören die Oberfläche nicht: Keine Maske von Dolibarr ruft ein PHP-Skript aus includes auf (im Code der 24.0.2 geprüft), und das Durchklicken von Partnern, Produkten, Rechnungen, Terminen, TakePOS und Einstellungen hinterließ keinen 403-Fehler im Nginx-Log.

Bevor Sie den Server ins Internet stellen

Diese Konfiguration antwortet über HTTP. Bevor Sie sie ins Internet stellen, richten Sie ein Zertifikat ein (Certbot kann eine Nginx-Konfiguration anpassen) und stellen die Adresse in der Zeile $dolibarr_main_url_root von conf.php auf https:// um. Dieser Schritt braucht einen echten Domainnamen: Wir haben ihn hier nicht getestet.

Danach

Wenn Sie das lieber abgeben möchten: Das Paket Installation und Einrichtung geht von dieser Konfiguration aus.

DolibarrNginxPHP-FPMInstallationUbuntuDebianREST-API

Hat Ihnen diese Anleitung geholfen?

Eine Frage zu dieser Anleitung, oder ein Schritt, der bei Ihnen nicht wie beschrieben klappt? Schreiben Sie an support@dolix.fr.