Self-host ERPNext
ERPNext is a GPL-3.0 open-source ERP from Frappe covering accounting, order management and inventory, manufacturing, asset management and projects, built on the MIT-licensed Frappe Framework. There is no paid edition of the software — Frappe sells managed hosting (Frappe Cloud), not features. HR and payroll live in a separate GPL-3.0 app, Frappe HR. It self-hosts through the official frappe_docker stack: MariaDB, two Redis instances, the web backend, background workers, a scheduler and a websocket service.
Key facts
Pick ERPNext when you want a full ERP on free software: it is GPL-3.0 with no paid edition, and accounting (general ledger, bank reconciliation, budgets), order management and inventory, manufacturing, asset management and projects are all in the free product. HR and payroll are a separate GPL-3.0 app, Frappe HR, split out of ERPNext at version 14. Upstream's production route is the Easy Install script from frappe/bench, which installs Docker and deploys the official frappe_docker stack; frappe_docker's single-server guide recommends 2 vCPU, 4 GB of RAM and 50 GB of SSD, which is where our 4 GB floor sits. If your needs fit Odoo Community's free apps and you want a two-container install, Odoo is the simpler alternative in this catalog.
What you need
- Any VPS with at least 4096 MB of RAM
- A domain you control — most self-hosted setups need HTTPS in front of them
- About the better part of a day
Paid link — we earn a commission if you shop through it.
Install
Run these commands on your server:
# ERPNext — official Easy Install script (frappe/bench), which deploys frappe_docker
wget https://raw.githubusercontent.com/frappe/bench/develop/easy-install.py
python3 easy-install.py deploy --email=you@example.com --sitename=erp.example.com --app=erpnext
# installs Docker, pulls the images and creates the site; the Administrator and MariaDB root passwords are saved to $HOME/frappe-passwords.txtWhat you take on
ERPNext's licence is simple; running it is where the work is, and frappe_docker's own docs spell out the traps: