# Production ERPNext on Coolify Custom Docker image and Compose stack for [ERPNext](https://erpnext.com) plus **HRMS**, **Lending**, and **LMS (Learning)** on [Coolify](https://coolify.io). Derived from [frappe/frappe_docker](https://github.com/frappe/frappe_docker). **Repository:** https://git.aexoradao.com/epistemophiliac/erpnext ## Apps baked into the image | App | Source | Branch | |-----|--------|--------| | ERPNext | frappe/erpnext | version-16 | | Payments | frappe/payments | version-16 (required by LMS) | | HRMS | frappe/hrms | version-16 | | Lending | frappe/lending | version-16 | | LMS (Learning) | frappe/lms | v2.55.0 | Defined in [`apps.json`](apps.json). Edit that file and push to change apps; Jenkins rebuilds the image. ## Pipeline (Jenkins) 1. Validate compose + readiness 2. **Build** custom image (`images/layered/Containerfile`) 3. **Push** to Forgejo registry: `git.aexoradao.com/epistemophiliac/erpnext:main-` and `:main` 4. Archive `dist/coolify-image.env` with `CUSTOM_IMAGE` / `CUSTOM_TAG` for Coolify See [docs/JENKINS.md](docs/JENKINS.md). ## Coolify deploy (you configure) 1. Docker Compose from this git repo, file `docker-compose.yml` 2. Env vars from [`example.env`](example.env) — use `CUSTOM_TAG` from latest green Jenkins build 3. Domain on service **`frontend`**, port **`8080`** See [docs/COOLIFY_DEPLOY.md](docs/COOLIFY_DEPLOY.md). ## Local checks ```bash make ci # validate only BUILD_IMAGE=1 bash scripts/ci/jenkins-run.sh # build image locally (slow) ``` ## Stack services MariaDB, Redis, configurator, create-site, migrator, backend, frontend (8080), websocket, workers. ## License Compose and docs: MIT. Frappe/ERPNext apps: see upstream licenses.