"How do I install ERPNext?" is one of the most searched ERPNext questions, and it has a confusing answer because there are four different routes: Frappe Cloud, the Docker easy-install script, a manual bench installation on Ubuntu, and a development setup on your laptop. They are not equal. The right one depends on whether you want a throwaway test, a developer machine, or the system your company will run payroll and GST on.
This guide follows the official Frappe installation documentation and bench README, checked against the current pages. It shows the prerequisites for v15 and v16, the exact bench commands to create a bench and a site, how the Docker route works, and what must be true before you call a server "production". Where a detail depends on your exact setup, we say so rather than guess.
If you are still deciding whether to host it yourself at all, read our comparison of ERPNext hosting cost: Frappe Cloud, self-hosted and partner-managed first. If you want to try ERPNext without installing anything, see our guide to the ERPNext demo and free trial.
Key takeaways
- Match the stack to the version: v15 runs on Python 3.10 or newer, Node 18 or newer and MariaDB 10.6.6 or newer. v16 needs Python 3.14, Node 24 and MariaDB 11.8, and Frappe recommends Ubuntu 24.04 or newer.
- The core commands are short:
bench init,bench new-site,bench get-app erpnextandbench --site <site> install-app erpnext. - For production, Frappe recommends Docker over bare-metal installs. If you still use bench on a server,
sudo bench setup productionautomates the Supervisor and nginx configuration. - A running site is not a production site. You also need HTTPS, scheduled backups tested by restoring, a firewall, monitoring and an upgrade plan.
Rather not spend a weekend on server setup?
Tell us your server, user count and country. We will confirm the right version and hosting route in a free 30-minute call.
Plan my installation → WhatsApp us: +91 8089051848
Or email info@nexeves.com
Choose your installation route first
| Route | Best for | Effort | Watch out for |
|---|---|---|---|
| Frappe Cloud | A business that wants ERPNext running without managing servers | Lowest | Monthly hosting fee, less control over the server |
| Docker easy-install script | A small team that wants a self-hosted production system on one server | Low to medium | You still own backups, updates and security |
| Manual bench on Ubuntu | Developers, custom apps, learning how Frappe works | Medium to high | More moving parts: MariaDB, Redis, Node, Python, Supervisor, nginx |
| Local development bench | Building and testing custom apps on your laptop | Medium | Not for live company data |
Frappe states in its own production guide that it does not recommend installing on bare-metal servers and recommends Docker images for production sites. We follow that advice for most clients who self-host. The manual route below is still the right way to learn the system and to build a development or staging environment.
Step 1: Prepare the Ubuntu server
These are the prerequisites listed in the Frappe installation documentation.
| Dependency | Frappe v14 / v15 | Frappe v16 |
|---|---|---|
| MariaDB | 10.6.6 or newer | 11.8 |
| Python | 3.10 or newer | 3.14 |
| Node.js | 18 or newer | 24 |
| Redis or Valkey | 6 | 6 or newer |
| Yarn | 1.12 or newer | 1.22 or newer |
| pip | 20 or newer | 25.3 or newer |
Frappe supports macOS and Debian or Ubuntu officially. For v16 it recommends Debian 13 or newer, or Ubuntu 24.04 or newer, because older releases may have problems with some packages. On Windows, use Ubuntu inside WSL for a development bench. Bench also downloads Chromium on its own for PDF generation, and needs cron for scheduled jobs such as backups and certificate renewal.
Start with a clean, updated server and a non-root user with sudo rights, then install the base packages:
sudo apt update
sudo apt install git redis-server libmariadb-dev mariadb-server mariadb-client pkg-config
During the MariaDB installation you may be asked to set the root password. If you are not prompted, run sudo mariadb-secure-installation. Write the password down, because bench asks for it when it creates your site.
Next install Node, Yarn and Python. Frappe recommends nvm for Node and uv for Python:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# open a new terminal, then:
nvm install 24 # use 18 or newer for v15
npm install -g yarn
curl -LsSf https://astral.sh/uv/install.sh | sh
# open a new terminal, then:
uv python install 3.14 --default # v15 can use 3.10 to 3.13
The exact installer version numbers change over time, so copy the current lines from the official installation page rather than from any blog, including this one.
Step 2: Install bench and create a bench folder
uv tool install frappe-bench
bench --version
mkdir ~/frappe && cd ~/frappe
bench init my-bench
A "bench" is a folder that holds the Frappe framework, your apps, your sites and the process configuration. Choose the Frappe branch deliberately. If you want v15, pass it explicitly, for example bench init --frappe-branch version-15 my-bench, so you do not end up on a different major version than your apps expect.
Step 3: Create a site and install ERPNext
cd my-bench
bench new-site erp.example.com
bench get-app erpnext --branch version-15 # or version-16, matching your Frappe branch
bench --site erp.example.com install-app erpnext
bench start # development only
bench new-site asks for the MariaDB root password and an Administrator password. bench get-app downloads the app into the bench, and install-app installs it on the site. Open the site in your browser and the setup wizard asks for your company name, country, currency and fiscal year. Choose the country correctly, because it sets the chart of accounts and tax templates.
Always keep the frappe and erpnext branches on the same major version. Mixing them is the most common reason a fresh install fails with import or migration errors.
Want a production-ready server, not just a working demo?
We install ERPNext with backups, HTTPS, monitoring and the India or GCC localisation your accounts team needs.
Get a production setup quote → WhatsApp us: +91 8089051848
Or email info@nexeves.com
Step 4: Add India or GCC localisation
ERPNext itself does not ship every local compliance feature. For India, GST, e-invoicing and e-way bills come from the India Compliance app, which you install with the same get-app and install-app pattern, on a branch that matches your ERPNext version. Our guide to ERPNext GST setup with India Compliance covers the configuration after installation.
For the GCC, UAE VAT and corporate tax are handled through your chart of accounts and tax templates, and e-invoicing needs a separate readiness plan. Start with our posts on UAE VAT and corporate tax in ERPNext and ZATCA Phase 2 for Saudi businesses.
The Docker route: easy-install script
The bench README describes an "Easy Install" script that uses the official frappe_docker repository and sets up a production-style ERPNext with minimal manual work. The documented usage is:
wget https://raw.githubusercontent.com/frappe/bench/develop/easy-install.py
python3 easy-install.py deploy --email=you@yourdomain.com --sitename=erp.yourdomain.com --app=erpnext
According to the README, the script installs Docker, pulls the containers, sets up bench and a default ERPNext site, generates the database and Administrator passwords and saves them in a passwords.txt file in the home directory of the user who ran it. It uses the email address for a Let's Encrypt certificate, so the site name must be a real domain that already points at your server. There is a --no-ssl option for tests. Read the current README before you run it, since its options evolve, and copy the passwords file to a safe place immediately.
Going to production with bench
If you do use bench on a server, Frappe's guide says that sudo bench setup production automates the two programs a live site needs: Supervisor, which keeps the web, worker and scheduler processes running and restarts them if they crash, and nginx, which serves static files and proxies requests to Frappe. The same guide describes how to generate the configuration manually with bench setup supervisor and bench setup nginx and link the files into the system folders.
Production checklist before real data goes in:
- HTTPS. Use the Let's Encrypt guide in the bench documentation, and confirm automatic renewal works.
- Backups that you have restored once. Schedule database and file backups, copy them off the server, and rehearse a restore using our ERPNext backup and restore guide.
- Security basics. Firewall allowing only SSH, HTTP and HTTPS, SSH keys instead of passwords, MariaDB and Redis not exposed to the internet, and the settings in our post on ERPNext security settings every company should configure.
- Scheduler and email. Confirm the scheduler is enabled and outgoing email works, because notifications, auto-repeat and many integrations depend on them.
- Monitoring and disk space. Backups and logs fill disks silently. Alert on disk, memory and failed background jobs.
- An upgrade plan. Decide who upgrades, when, and on which staging copy. See how to upgrade Frappe and ERPNext safely and our v16 upgrade guide.
Also read common ERPNext server issues and how to prevent them for the problems we see after installation, such as full disks, stopped workers and slow queries.
Common installation errors and what they usually mean
| Symptom | Usual cause | What to check |
|---|---|---|
bench init fails while building assets |
Node or Yarn version does not match the Frappe version | Run node -v and compare with the prerequisites table |
Database error during new-site |
Wrong MariaDB root password, or MariaDB not running or too old | Confirm you can log in to MariaDB as root and check its version |
| App install fails with import errors | Frappe and ERPNext on different major versions | Check the branch of each app in the bench |
| Site opens but scheduled jobs and emails do nothing | Scheduler disabled or workers not running | Check Supervisor status and the site scheduler setting |
| PDF printing fails | Chromium download blocked or incomplete | Run bench setup-chrome and check outbound access |
| Cannot reach the site from outside | Firewall, nginx config or DNS | Test locally on the server first, then DNS, then firewall |
When we recommend not self-installing
If nobody in your company will own the server, a self-installed ERPNext becomes a risk, not a saving. A missed backup, an unpatched server or a failed upgrade lands on the finance team. In that case use Frappe Cloud or a partner-managed server with a support agreement, and spend your effort on process design instead. Our support and AMC plans guide explains what ongoing support should cover.
How Nexeves helps
We install ERPNext for businesses in India and the GCC on their own servers, on managed hosting or on Frappe Cloud, then configure the accounts, GST or VAT, users and backups as part of an ERPNext implementation. If you only need the technical setup done properly, tell us on the contact page.
Frequently asked questions
Which Ubuntu version should I use for ERPNext?
For v16, Frappe recommends Ubuntu 24.04 or newer (or Debian 13 or newer). Frappe v15 has lower minimum versions, but a new server should still start on a current long-term support release so that you are not forced to rebuild it soon.
What are the requirements for ERPNext v15 and v16?
v15 needs Python 3.10 or newer, Node 18 or newer, MariaDB 10.6.6 or newer and Redis 6. v16 needs Python 3.14, Node 24, MariaDB 11.8 and Redis or Valkey 6 or newer, according to the Frappe installation documentation.
How do I install ERPNext with Docker?
Frappe provides a frappe_docker repository and an easy-install script in the bench README that deploys ERPNext with Docker, using a domain name and an email address for HTTPS. Read the current README before running it.
Can I run ERPNext on Windows?
Frappe officially supports macOS and Debian or Ubuntu. On Windows you can use Ubuntu inside WSL for a development bench. Do not use that setup for live company data.
Is a bench installation ready for production after install-app?
No. You still need HTTPS, Supervisor and nginx (for example through bench setup production), tested backups, a firewall, monitoring and an upgrade process. Frappe itself recommends Docker for production.
Should I self-host ERPNext or use Frappe Cloud?
Self-host when you have someone who will own backups, security and upgrades. Otherwise a managed option is usually cheaper once you count the cost of an outage or lost data. Compare the options in our hosting cost guide.
Get ERPNext running safely on your own server
Nexeves installs, hardens and supports ERPNext for businesses in India and the GCC, on your server, our managed hosting or Frappe Cloud.
Book my free setup call → WhatsApp us: +91 8089051848
Or email info@nexeves.com
Nexeves serves India & the GCC: UAE (Dubai, Abu Dhabi), Saudi Arabia (Riyadh, Jeddah), Qatar (Doha), Kuwait, Bahrain and Oman (Muscat).
No comments yet. Login to start a new discussion Start a new discussion