Why self-host ERPNext on a VPS
An ERP centralises the company's most sensitive data: accounting entries, margins, customer and supplier records, payroll. SaaS offers often bill per user per month, which becomes costly as teams grow. On a dedicated VPS, you pay for the server once, you add as many users as needed, and the database stays under your control, backed up according to your own rules.
The concrete benefits of a self-hosted ERPNext
- No per-user cost: add your teams without increasing the bill.
- Sovereignty over accounting and HR data, which stays on your server.
- All modules available (accounting, inventory, CRM, manufacturing, payroll) with no paid tier.
- Free customisation through the Frappe framework and complementary apps.
- Controlled backups and retention, tailored to your legal obligations.
- Scalability: increase RAM/vCPU as the transaction volume grows.
Hardware and software requirements
ERPNext is more demanding than average. Plan for at least 2 vCPU and 4 GB of RAM for test use, and 4 vCPU / 8 GB of RAM for production with several concurrent users. Allow 20 GB of disk for the MariaDB database, Redis and files. On the software side: Docker and Docker Compose, a domain name (e.g. erp.your-domain.com) pointing to the VPS IP, and port 443 open.
Deploy ERPNext with Frappe Docker and HTTPS
Prepare the VPS and Docker
Over SSH, update the system and install Docker via curl -fsSL https://get.docker.com | sh. Check docker compose version.
Get frappe_docker
Clone the official repository: git clone https://github.com/frappe/frappe_docker && cd frappe_docker. It provides the reference compose files for a complete stack (backend, MariaDB, Redis, workers).
Configure the environment
Copy example.env to .env, set the site name, the administrator password and the database parameters. Adjust the exposed internal port to place it behind your proxy.
Launch the stack
Start with docker compose up -d, then create the site with the documented bench new-site command. Follow the logs to confirm that all services (db, redis, workers, scheduler) are healthy.
Configure the reverse proxy
Place Caddy or Nginx in front of ERPNext: erp.your-domain.com { reverse_proxy localhost:8080 }. Caddy handles the Let's Encrypt certificate automatically.
Secure and back up
Restrict the internal ports to loopback, enable regular database backups (bench backup) and store them off the VPS for disaster recovery.
ERPNext evolves through major versions with schema migrations: before each update, make a full bench backup and test the version upgrade on a copy before applying it in production.
The official documentation
For advanced configuration and tool-specific options, refer to the official ERPNext documentation. This guide covers going live on a VPS; the vendor documentation remains the reference for fine-tuning, major updates and specific use cases.