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.

  • Self-Hosting
  • Business
  • Docker