Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
Self-host Dolibarr
updated Oct 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Oct 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
A modular PHP ERP and CRM for small and medium businesses: contacts, quotes, orders and invoices, stock, projects, HR and expense reports, accounting and manufacturing, each switched on as a module so you run only what you need. It is GPL-3.0-or-later and stores its data in MariaDB, MySQL or PostgreSQL; the official container installs itself on first boot from environment variables.
Runs on a VPS from $6/mo (Kamatera 2GB, 2 GB RAM) · prices checked Sep 2026
Our recommendation
Pick Dolibarr when a small business needs invoicing, quotes, stock, projects and basic accounting in one place without the weight of a full ERP: everything is a module you switch on, so a two-person shop can run just contacts and invoices while a workshop adds manufacturing and HR later. It is GPL-3.0-or-later PHP on Apache with MariaDB, MySQL or PostgreSQL behind it; our snippet is the compose file from the official image's README with pinned images and generated passwords, and the container installs itself and creates the admin user on first boot from environment variables. Upstream's prerequisites give no server RAM figure, only a PHP memory limit and the remark that it runs on low-specification hardware, so our 1 GB floor is an estimate. The catalog's other ERPs are heavier: ERPNext runs the multi-service Frappe stack and Odoo splits its apps between an open core and a paid edition. Dolibarr is one PHP application, fully open, and the easiest of the three to keep running.
What you need
Any VPS with at least 1024 MB of RAM
A domain you control — most self-hosted setups need HTTPS in front of them
The dolibarr-docker README is explicit about first boot, upgrades and what survives a container swap:
non-negotiableThe README's compose defaults are admin/admin for the first user and dolidbpass for the database; our snippet generates all three passwords into .env. Installation runs on first boot because DOLI_INSTALL_AUTO defaults to 1, then writes install.lock into /var/www/documents so the installer cannot be re-run from the web.
non-negotiableOnly what is in the mounted volumes survives recreating the containers: the database directory, /var/www/documents (uploaded files, generated PDFs and the lock) and /var/www/html/custom (external modules). Back up all three. Upgrading is remove install.lock, pull the new image, docker compose up -d, and let DOLI_INSTALL_AUTO=1 migrate the schema, or run the /install page by hand.
non-negotiableUpstream's example uses mariadb:latest and dolibarr/dolibarr:latest; we pin both so a routine pull cannot jump a database major or a Dolibarr major without you. The scheduler is off by default (DOLI_CRON=0), so scheduled jobs such as recurring invoices need the README's with-cron example before they run.
non-negotiableThe container serves plain HTTP on port 80, mapped to 8083 here. Put a TLS reverse proxy in front and set DOLI_URL_ROOT to the public URL users will type, since Dolibarr builds links and PDF references from it; our snippet uses a http://SERVER_IP:8083 placeholder you must replace. DOLI_INSTANCE_UNIQUE_ID is generated randomly when the container is created and is a key for some encryption, so set it explicitly if you may ever recreate the container.