Use this guide for a new ERPNext 16 deployment. Keep Frappe, ERPNext and custom apps on compatible releases. An existing business database requires a migration and restore procedure; never run a fresh-site installer over it.
1. Prepare a production deployment
- Choose a domain, point it to your server and confirm HTTPS can be issued. Keep database and Redis ports private.
- Install Docker Engine and the Compose plugin using Docker's official instructions for your operating system. Confirm docker version and docker compose version work.
- Use the official frappe/frappe_docker production documentation and its single-server example. Select ERPNext 16-compatible images and dependencies, unique secrets and persistent volumes.
- Configure the database, Redis, backend, frontend, WebSocket service, queue workers and scheduler described by that deployment. A web container by itself is not a complete ERPNext installation.
The repository's pwd.yml is a disposable demonstration. Do not use its example passwords or demonstration setup for public production.
2. Start the prepared stack and create a site
After generating and reviewing compose.custom.yaml according to the official setup guide, run these from that deployment directory. Replace erp.example.com with your real site name; it is only a placeholder.
Run each command separately:
docker compose -p frappe -f compose.custom.yaml up -d
docker compose -p frappe -f compose.custom.yaml ps
docker compose -p frappe -f compose.custom.yaml exec backend bench new-site erp.example.com
docker compose -p frappe -f compose.custom.yaml exec backend bench --site erp.example.com install-app erpnext
Enter database and Administrator passwords at the prompts. Follow the official site's database-user host-scope guidance for your private container network. Do not create a public database account to work around a connection error. Do not repeat new-site when the site already exists.
3. Verify the whole application
- Open the HTTPS domain and sign in as Administrator. Complete the company, country and accounting setup using your own business information.
- Run bench --site erp.example.com list-apps inside the backend container and confirm ERPNext is installed.
- Check worker and scheduler containers, recent errors and pending background jobs. An accessible login page does not prove queues work.
- Save a non-sensitive test record and attachment. Verify them after a new login.
4. Back up before upgrades
Use the site's backup command with files and store a protected off-server copy. Preserve site configuration and encryption keys. Restore into a separate environment with matching app versions before changing production. Major-version upgrades and custom-app migrations need a tested migration path.
If the frontend shows a gateway error, check backend readiness, the configured site name and proxy routing before restarting anything. If jobs remain queued, inspect workers and Redis rather than reinstalling the site.
Next: Backups and restore checks.
Official references
- Frappe Docker repository and production documentation
- Production single-server example
- Start containers and create a site
- Site operations
- Docker installation on Ubuntu
Technical guidance reviewed: 28 October 2026. Match instructions to your actual service and application version.










