Installer Dolibarr avec Nginx

Installer Dolibarr 24 avec Nginx, PHP-FPM et MariaDB sur Ubuntu ou Debian, configuration testée. Et ce que l'exemple fourni avec Dolibarr ne fait pas : API REST en 404, envois bloqués à 1 Mo, dossiers protégés seulement sous Apache.

Besoin qu’on regarde votre instance ? Diagnostic, prix fixe 90 €.

Versions concernées
Dolibarr 24.0.2 (archive officielle) · Debian 13 et Ubuntu 24.04 LTS · Nginx et PHP-FPM des paquets de la distribution
Ce qui a été vérifié (versions, tests, code lu)

Installations neuves le 02/11/2026 dans des conteneurs Docker : Debian 13 (Nginx 1.26.3, PHP 8.4.27, MariaDB 11.8.6) avec les commandes de cette page exécutées telles quelles (sudo conservé, service au lieu de systemctl), assistant suivi jusqu'à la connexion, module API activé et appelé avec une clé, facture validée et PDF généré, envoi de 5 Mo avant et après la limite de Dolibarr, journal Nginx relu après la visite des écrans ; Ubuntu 24.04 (Nginx 1.24.0, PHP 8.3.6, MariaDB 10.11.14) pour les étapes 1 à 3 et les contrôles. Exemple officiel de l'archive 24.0.2 testé sur Debian 13.

Dolibarr est documenté surtout pour Apache. Avec Nginx, il fonctionne tout aussi bien, à condition de reprendre trois choses qu’Apache faisait sans qu’on le voie. Cette page installe Dolibarr 24 avec Nginx, PHP-FPM et MariaDB sur Debian 13 ou Ubuntu 24.04, avec une configuration que nous avons testée.

Dolibarr fournit un exemple de configuration Nginx (dev/setup/nginx/dolibarr dans l’archive). Nous l’avons essayé sur une installation neuve : il pose trois problèmes.

  • Nginx refuse de démarrer. La ligne fastcgi_pass se termine par un commentaire //, qui n’existe pas dans la syntaxe de Nginx : nginx -t répond unexpected "}". Le chemin indiqué est aussi celui de PHP 5.
  • L’API REST répond 404. Une fois le // retiré, /api/index.php/status renvoie la page « 404 Not Found » de Nginx : la requête n’arrive jamais à Dolibarr.
  • Le dossier conf est lisible depuis le web. Dolibarr le protège par un fichier .htaccess, que Nginx ignore. Dans notre test, une copie de sauvegarde conf.php.bak s’affiche en clair dans le navigateur, mot de passe de la base compris. Les scripts PHP des bibliothèques du dossier includes, que Dolibarr interdit d’appeler directement, s’exécutent aussi.

S’y ajoute une limite propre à Nginx : il refuse les envois de plus de 1 Mo, avant même que PHP ou Dolibarr ne les voient. Dans notre test, un fichier de 5 Mo reçoit « 413 Request Entity Too Large ».

La configuration ci-dessous corrige ces quatre points.

1. Installer Nginx, PHP-FPM et MariaDB

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

C’est la même liste d’extensions que pour Apache, avec php-fpm à la place du module d’Apache.

2. Télécharger Dolibarr et créer la base

Ces deux étapes sont identiques à l’installation avec Apache : sur Debian et Ubuntu, PHP-FPM tourne lui aussi sous l’utilisateur 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 "Mot de passe de la base : $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';"

Notez le mot de passe affiché : l’assistant vous le demandera.

3. La configuration Nginx

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 refuse par défaut tout envoi de plus de 1 Mo
    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;
    }

    # Ce que les .htaccess de Dolibarr font sous Apache
    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/Paris
INI
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl restart php$PHPV-fpm

Remplacez dolibarr.example.com par le nom de votre serveur.

Ce qui change par rapport à l’exemple officiel :

  • snippets/fastcgi-php.conf, fourni par le paquet Nginx de Debian et d’Ubuntu, sépare le nom du script de la suite de l’adresse et la transmet à PHP (PATH_INFO). C’est ce dont l’API REST a besoin. L’exemple officiel vérifie que l’adresse complète est un fichier (try_files $uri =404), ce qui renvoie 404 pour /api/index.php/thirdparties.
  • client_max_body_size 20M aligne Nginx sur les 20 Mo acceptés par PHP.
  • Les trois blocs deny remplacent les .htaccess : le dossier conf n’est plus du tout accessible depuis le web, les scripts PHP des bibliothèques de includes ne peuvent plus être appelés directement, et les fichiers cachés (.git, .htaccess…) ne sont pas servis.
  • $PHPV choisit le bon socket : PHP 8.4 sur Debian 13, PHP 8.3 sur Ubuntu 24.04.

sudo nginx -t doit répondre « syntax is ok » et « test is successful » avant le rechargement.

4. L’assistant, install.lock et la limite de 2 Mo

La suite est la même qu’avec Apache, détaillée dans Installer Dolibarr sur Ubuntu ou Debian :

  1. ouvrez http://votre-serveur/install/, et sur la page de configuration remplacez le dossier des documents par /var/lib/dolibarr/documents ;
  2. fermez l’installation :
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. relevez la limite propre à Dolibarr (2 048 Ko) dans Accueil › Configuration › Sécurité › Fichiers, à 20480.

Les trois limites doivent aller ensemble : Nginx (client_max_body_size), PHP (upload_max_filesize) et Dolibarr. Si l’une reste plus basse, c’est elle qui refuse le fichier.

5. Vérifier que tout est en place

Sur le serveur :

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

Les deux premières lignes doivent répondre 403 : le dossier conf et les scripts de includes sont fermés.

La troisième montre que l’API arrive bien jusqu’à Dolibarr. Le module API est désactivé après l’installation : la réponse est alors « Le module Api doit être activé pour utiliser cette fonction ». Une fois le module activé (Accueil › Configuration › Modules / Applications), la même adresse répond 401 sans clé, et donne la version de Dolibarr avec une clé. Si vous obtenez la page « 404 Not Found » de Nginx, la suite de l’adresse (PATH_INFO) n’arrive pas à PHP : vérifiez la ligne include snippets/fastcgi-php.conf.

Les blocs deny ne gênent pas l’interface : aucun écran de Dolibarr n’appelle un script PHP de includes (nous l’avons vérifié dans le code de la 24.0.2), et la visite des écrans tiers, produits, factures, agenda, TakePOS et configuration n’a produit aucune erreur 403 dans le journal de Nginx.

Avant d’ouvrir l’accès depuis Internet

Cette configuration répond en HTTP. Avant de l’ouvrir sur Internet, ajoutez un certificat (Certbot sait modifier une configuration Nginx), puis mettez l’adresse en https:// dans la ligne $dolibarr_main_url_root de conf.php. Cette étape demande un vrai nom de domaine : nous ne l’avons pas testée ici.

Ensuite

Si vous préférez qu’on s’en occupe, le forfait Installation et paramétrage part de cette configuration.

DolibarrNginxPHP-FPMinstallationUbuntuDebianAPI REST

Ce guide vous a aidé ?

Une question sur ce guide, ou une étape qui ne se passe pas comme prévu chez vous ? Écrivez à support@dolix.fr.