ERPNext
Overview
ERPNext is a leading open-source Enterprise Resource Planning (ERP) suite, built on the Frappe framework. It brings accounting, inventory and stock, sales and purchasing, CRM, manufacturing, projects, HR and payroll together in one self-hosted web application, with 100 percent data ownership.
This SecureAnyCloud image installs ERPNext (Frappe version-15) as a full production deployment. The entire headless install runs at build time, so there is no command-line bootstrap on first use. The image rotates the Administrator password and the Frappe encryption key on the first boot of every VM.
What you get:
- ERPNext on Frappe version-15, served on port 80 by nginx in front of gunicorn web workers
- MariaDB on loopback (Barracuda / utf8mb4 / large packets per Frappe), with its data directory on a dedicated Azure data disk
- Redis for cache, queue and socketio, with supervisor managing the Frappe web, worker, schedule and socketio processes
- A dedicated Azure data disk at
/var/lib/erpnextfor the MariaDB database and the entire Frappe bench - A unique Administrator password and a fresh Frappe encryption key, generated on first boot
nginx.service,supervisor.service,mariadb.serviceandredis-server.serviceas enabled, active systemd units- 24/7 SecureAnyCloud support
Prerequisites
You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.
Standard_B4ms (4 vCPU / 16 GiB RAM) is a good starting size for ERPNext.
Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the ERPNext web interface. For public exposure, front the site with TLS (see Enabling HTTPS).
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for ERPNext by SecureAnyCloud, and select Create.
On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80).
Review the dedicated data disk on the Disks tab, then select Review + create and Create.
Step 2 - Deploy from the Azure CLI
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:erpnext-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name erpnext \
--image sac1647283583153:erpnext-ubuntu-24-04:default:latest \
--size Standard_B4ms \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_ed25519.pub \
--vnet-name <your-vnet> --subnet <your-subnet> \
--public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name erpnext --port 80 --priority 1010Step 3 - Connect to your VM
Connect over SSH as azureuser:
ssh azureuser@<vm-public-ip>Step 4 - Confirm the ERPNext stack is running
On first boot, ERPNext regenerates its Frappe encryption key, sets a unique Administrator password, points the site at this VM's public IP and starts the production stack. Check the four services:
systemctl is-active mariadb redis-server supervisor nginxAll four services report active.
Confirm that the Frappe web tier answers its health endpoint:
curl -s http://127.0.0.1/api/method/pingFrappe returns {"message":"pong"}.
Step 5 - Retrieve the Administrator password
Each VM generates its own Administrator password on first boot and writes it to a root-only credentials file. Read the file with:
sudo cat /root/erpnext-credentials.txtThe file contains the site URL, the Administrator login and the unique password for this VM.
Step 6 - Sign in to ERPNext
Browse to http://<vm-public-ip>/ and sign in as Administrator with the password from Step 5.
Step 7 - Complete the setup wizard
On first sign-in, ERPNext runs a short setup wizard. Choose your language and region, then enter your company name, default currency and fiscal year. ERPNext provisions the chart of accounts and default settings for you.
Step 8 - Explore the workspace desk
After setup, you land on the ERPNext desk, the workspace home. The left rail lists modules for Accounting, Selling, Buying, Stock, CRM, HR and more.
Step 9 - Open a module
Open a module such as Stock or Accounting to reach its list views, reports and shortcuts. From here you can create items, customers, suppliers, invoices and stock entries.
Data on the dedicated data disk
The MariaDB data directory and the entire Frappe bench live on a dedicated Azure data disk mounted at /var/lib/erpnext. The bench includes the sites/ directory, with the site database config, the encryption key and uploaded files. All of your ERP data is therefore on a separate volume that you can snapshot independently. Confirm the mount:
df -h /var/lib/erpnext; ls /var/lib/erpnextEnabling HTTPS
For public exposure, front ERPNext with TLS. Point a DNS A record at the VM's public IP, then issue a certificate with Certbot and the nginx plugin. Run Certbot interactively:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.comCertbot edits the Frappe nginx site in place and sets up automatic renewal. Allow 443/tcp in your NSG.
Maintenance
The OS keeps receiving security updates through unattended-upgrades. Update ERPNext, Frappe and the installed apps with bench as the frappe user: sudo -u frappe -H bash -lc 'cd /var/lib/erpnext/frappe/frappe-bench && bench update'.
Take a snapshot of the data disk before any upgrade. Review the ERPNext release notes before you apply a major version upgrade.
Support
This image is published and supported by SecureAnyCloud. ERPNext and Frappe are trademarks of their respective owners. SecureAnyCloud is not affiliated with or endorsed by the ERPNext or Frappe projects. For assistance, contact SecureAnyCloud support.
Deploy on Azure
Launch ERPNext on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com
Overview
ERPNext is a comprehensive open-source Enterprise Resource Planning suite. It covers accounting, order management, inventory, manufacturing, CRM, projects, HR and payroll, helpdesk and asset management in one integrated web application. ERPNext is built on the Frappe framework, a full-stack, metadata-driven Python and JavaScript platform.
This SecureAnyCloud image delivers ERPNext as a complete production system, so a full ERP is running within minutes of launch.
What you get:
- ERPNext running as a Frappe bench under a dedicated
frappeservice account at/home/frappe/frappe-bench - A production stack wired by
bench setup production: gunicorn web workers and Frappe background workers managed by supervisor, a Node.js socket.io server for realtime desk updates, Redis for caching and the job queue, and a MariaDB database - nginx on port 80 as the single public listener. It serves the built static assets and reverse proxies dynamic and realtime traffic to the loopback services.
- The MariaDB database at
/var/lib/mysql, on a dedicated, independently resizable EBS data volume that survives instance replacement - Systemd management of MariaDB, Redis, supervisor and nginx, which start on boot and restart on failure
- A fresh Administrator password for every instance. ERPNext secures its desk with the built-in Administrator account. On the first boot of every instance, a one-shot service generates a password unique to that instance, applies it to the live site and pins the site address to the instance. Two instances launched from the same Amazon Machine Image never share credentials.
- The password written to
/root/erpnext-aws-credentials.txtwith mode 0600, so that only the root user can read it
Prerequisites
Before you deploy the image, you need:
- An Amazon Web Services account where you can launch EC2 instances
- IAM permissions to launch instances, create security groups, and subscribe to AWS Marketplace products
- An EC2 key pair in the target Region for SSH access to the instance
- A VPC and subnet in the target Region, with a security group allowing inbound port 22 from your management network and port 80 for the ERPNext desk
- The AWS CLI (version 2) installed locally if you plan to deploy from the command line
Launch the instance from AWS Marketplace
Sign in to the AWS Management Console, open the EC2 service and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for ERPNext. Select the SecureAnyCloud listing, choose Select, then choose Continue on the subscription summary.
Pick an instance type of t3.large or larger. ERPNext runs several services (the web workers, background workers, the socket.io server, Redis and MariaDB) and benefits from the extra memory. Choose your EC2 key pair under Key pair (login).
Under Network settings, select your VPC and subnet. Create or select a security group that opens port 22 from your management network and port 80 for the desk. Leave the root volume at the default size or larger.
Select Launch instance. First-boot initialisation takes a short time after the instance state becomes Running and the status checks pass. During this time, the per-instance Administrator password is generated and applied, and the production stack starts.
Launch the instance from the AWS CLI
This command launches an instance from the SecureAnyCloud ERPNext Marketplace AMI into an existing subnet and security group. Replace <ami-id> with the AMI ID shown on the Marketplace listing. Replace <key-name> with your EC2 key pair name and <subnet-id> with your subnet ID. Replace <security-group-id> with a security group that opens ports 22 and 80 as described above.
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type t3.large \
--key-name <key-name> \
--subnet-id <subnet-id> \
--security-group-ids <security-group-id> \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=erpnext}]'When the instance reaches the Running state and its status checks pass, note its public IP address or DNS name. You can find it in the EC2 console or with aws ec2 describe-instances.
Connect to your instance
Connect over SSH using your key pair and the login user for your operating system variant. For Ubuntu 22.04, the SSH login user is ubuntu.
ssh -i <key-name>.pem ubuntu@<public-ip>Retrieve the Administrator password
The ERPNext Administrator password is unique to your instance and was generated on first boot. Read it as root:
sudo cat /root/erpnext-aws-credentials.txtThe file lists the desk URL, the Administrator login (Administrator) and the generated password. Keep this password somewhere safe.
Sign in to the ERPNext desk
nginx serves the desk on port 80, in front of the gunicorn web workers. In a browser, open:
http://<instance-public-ip>/Sign in as Administrator with the password from the credentials file. On first sign-in, ERPNext launches the setup wizard. Choose your language and region, create your company and chart of accounts, and add your first users.
Confirm ERPNext is running
Over SSH, confirm that the database, Redis, the supervisor process group and the nginx proxy are active and that the application answers:
sudo systemctl is-active mariadb redis-server supervisor nginx curl -s -o /dev/null -w 'ping HTTP %{http_code}\n' 'http://127.0.0.1/api/method/ping'All four services report active, and the Frappe API answers 200 on /api/method/ping. To see the individual Frappe processes that supervisor manages, run:
sudo supervisorctl statusThese processes are the gunicorn web workers, the background workers, the realtime socket.io server and the bench Redis instances.
MariaDB, Redis and the application workers all listen on loopback only and are never exposed publicly. Only nginx on port 80 is reachable from outside the instance.
Complete the setup wizard and explore the modules
After the setup wizard, you land on the desk home with the module workspaces. Each workspace lists the masters, transactions and reports for its area:
- Accounting for your chart of accounts, journal entries, sales and purchase invoices and financial reports
- Stock for items, warehouses and stock entries
- Selling and Buying for the order-to-cash and procure-to-pay cycles
- Manufacturing for bills of materials and work orders
- CRM for leads and opportunities
- Projects, HR and Support for the remaining suites
Every record in ERPNext is a Frappe DocType rendered through a consistent list and form interface. Open any list, for example Items or Sales Invoices, to filter, sort, bulk edit and export records. Select + Add to create a new document.
Use the Frappe REST API
Every ERPNext operation is also available programmatically through the Frappe REST API on the same port 80. Authenticate by posting your credentials to /api/method/login, which returns a session cookie. Then call the resource endpoints.
This example logs in and fetches the list of companies. Replace <public-ip> with your instance address and <new-password> with your Administrator password:
curl -s -c /tmp/erpnext-cookies.txt \
--data-urlencode 'usr=Administrator' \
--data-urlencode 'pwd=<new-password>' \
'http://<public-ip>/api/method/login'
curl -s -b /tmp/erpnext-cookies.txt \
'http://<public-ip>/api/resource/Company'For server-to-server integrations, generate an API key and secret for a user under the user's settings in the desk. Send them in an Authorization: token <key>:<secret> header instead of using the cookie flow. Treat API keys like passwords, and scope each integration to the minimum role it needs.
Bench and the site
Manage ERPNext through the Frappe bench command line as the frappe user. The bench lives at /home/frappe/frappe-bench, and the site name is stored in /var/lib/sac/config/sac-erpnext-site. To run a bench command, switch to the bench directory as the frappe user. For example, print the installed app versions:
sudo -u frappe -H bash -lc 'cd /home/frappe/frappe-bench && bench version'Common operations include:
bench --site <site> set-admin-password <new-password>to change the Administrator passwordbench --site <site> backupto take a database and files backupbench --site <site> clear-cacheafter configuration changes
The value to substitute for <site> is the site name in /var/lib/sac/config/sac-erpnext-site.
The data volume
The ERPNext database lives on a dedicated EBS volume mounted at /var/lib/mysql. This keeps the database off the operating system disk and lets you resize or snapshot it independently. Confirm the mount with:
df -h /var/lib/mysqlTo grow the database store, expand the EBS volume in the AWS console. Then grow the filesystem on the instance with sudo resize2fs on the underlying device. Because the database is on its own volume, you can snapshot it for backup, or detach it and reattach it to a replacement instance.
Custom domain and HTTPS
nginx serves the desk over plain HTTP on port 80. For production use, place it behind a custom domain and TLS. First boot pins the site host name to your instance public IP, so the desk is reachable immediately. To use a domain name, set the site host name to your domain as the frappe user. Replace <your-domain> with your domain:
sudo -u frappe -H bash -lc 'cd /home/frappe/frappe-bench && bench --site $(cat /var/lib/sac/config/sac-erpnext-site) set-config host_name "https://<your-domain>"'Point the domain's DNS A record at the instance public IP. To terminate TLS, choose one of two options. Place the instance behind an Application Load Balancer with a managed certificate. Or install Certbot on the instance and configure nginx to listen on 443 with your certificate, proxying to the Frappe upstreams exactly as the bundled site does for port 80.
Restrict the security group so that ports 80 and 443 are reachable only from the networks that need the desk.
Back up and maintain ERPNext
Back up ERPNext by snapshotting the /var/lib/mysql EBS volume, which captures the entire database. Also keep a copy of the site directory under /home/frappe/frappe-bench/sites, which holds the site configuration and the uploaded files.
You can also take a logical backup with the bench backup command. It writes a database dump and a files archive into the site's private/backups directory:
sudo -u frappe -H bash -lc 'cd /home/frappe/frappe-bench && bench --site $(cat /var/lib/sac/config/sac-erpnext-site) backup --with-files'Apply operating system security updates with sudo apt-get update && sudo apt-get upgrade, and reboot when a new kernel is installed. MariaDB, Redis, supervisor and nginx start automatically on boot, and the Administrator password is preserved across reboots.
Take a backup, then upgrade ERPNext and the Frappe framework with the bench update workflow. See the Frappe documentation for the upgrade procedure that matches your version.
Support
This image is published and supported by SecureAnyCloud. Support covers deployment, the setup wizard, company and chart of accounts configuration, custom DocTypes and workflows, the REST API, background jobs, database tuning, custom domains, TLS and scaling. Contact SecureAnyCloud through the support channel listed on the AWS Marketplace listing.
All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.
Deploy on AWS
Launch ERPNext on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com