ERPNext is a fully open-source ERP built on the Frappe framework: accounting, inventory, manufacturing, sales and purchasing, CRM, projects, assets, plus HR and payroll via the HRMS app. Unlike open-core alternatives, all ERPNext modules are free. It’s popular with small and medium businesses that want a complete system they can host and customise themselves.
Requirements
- 2 vCPU and 4 GB RAM minimum. 4 vCPU and 8 GB is comfortable for a growing company.
- 40+ GB of SSD storage (database plus attachments).
- Docker and Docker Compose. See install Docker.
- A domain, e.g.
erp.example.com.
ERPNext’s stack: Frappe (Python) app servers, MariaDB, Redis (cache and queue), background workers, a scheduler, a websocket (Socket.IO) service and Nginx.
Install with frappe_docker
The official frappe_docker repository provides Compose files and an easy-install script that sets everything up, including HTTPS via Traefik:
git clone https://github.com/frappe/frappe_docker /opt/frappe_docker
cd /opt/frappe_docker
# review docs/ (single-server setup) for the current recommended method, e.g.:
python3 easy-install.py deploy --project=erp [email protected] --sitename=erp.example.com --app=erpnext
Read the current documentation first. Options and script names change between releases. The manual route uses compose.yaml plus override files (overrides/compose.mariadb.yaml, compose.redis.yaml, compose.https.yaml) and an .env file with ERPNEXT_VERSION, DB_PASSWORD, LETSENCRYPT_EMAIL and SITES.
Create a site (manual Compose route)
After the containers are running:
docker compose exec backend bench new-site erp.example.com \
--mariadb-user-host-login-scope='%' \
--admin-password 'change-me-admin' \
--install-app erpnext
Then open https://erp.example.com, log in as Administrator, and complete the setup wizard: company, chart of accounts, fiscal year, currency.
HTTPS
The frappe_docker HTTPS override uses Traefik with Let’s Encrypt automatically. If you prefer your own Nginx in front, publish the frontend port to 127.0.0.1, and proxy to it with WebSocket support (/socket.io). See Nginx WebSocket proxy and Traefik.
Background jobs and the scheduler
Emails, reports, auto-repeat documents and integrations run through workers and the scheduler. Make sure the queue-short, queue-long and scheduler services are running:
docker compose ps
docker compose exec backend bench --site erp.example.com doctor # scheduler and queue status
docker compose exec backend bench --site erp.example.com enable-scheduler
Configure outgoing email (Settings → Email Account) with a reliable SMTP provider. See transactional email services.
Add apps (HRMS and others)
Additional Frappe apps (HRMS for HR and payroll, Helpdesk, Insights, CRM, LMS) need a custom image containing them, built with the apps.json method from frappe_docker. Then install them on the site:
docker compose exec backend bench --site erp.example.com install-app hrms
Backups
docker compose exec backend bench --site erp.example.com backup --with-files
This creates a database dump plus public and private file archives in sites/erp.example.com/private/backups/. Copy them off-server daily, and test restores (bench --site … restore). ERPNext also supports scheduled backups to S3-compatible storage via settings. See backup strategy.
Updates
Update by setting a new ERPNEXT_VERSION (within the same major version for routine updates), pulling the images, restarting, then migrating:
docker compose pull && docker compose up -d
docker compose exec backend bench --site erp.example.com migrate
Major version upgrades (e.g. v14 → v15) need more care. Read the release notes, back up, and test on a copy first. See updating self-hosted apps.
Security
- A strong Administrator password, and 2FA (System Settings).
- HTTPS only. Keep MariaDB and Redis on internal networks.
- Restrict user roles to what each person needs. See least privilege.
ERPNext vs Odoo
| ERPNext | Odoo Community | |
|---|---|---|
| Licence | Fully open source (GPLv3) | Open core (many apps Enterprise-only) |
| Framework | Frappe (Python + MariaDB) | Odoo (Python + PostgreSQL) |
| Strengths | Complete free modules, strong accounting and manufacturing | Huge app ecosystem, polished UX, website and e-commerce |
See Odoo.
Quick reference
| Task | Command |
|---|---|
| New site | bench new-site SITE --install-app erpnext |
| Health | bench --site SITE doctor |
| Backup | bench --site SITE backup --with-files |
| Migrate after update | bench --site SITE migrate |
| Install app | bench --site SITE install-app NAME |
Related: Invoice Ninja and Docker Compose.