Production deployment path is not reproducible as documented
- Dominant language
- TypeScript
- Stars
- 3.2k
- Forks
- 1.5k
- Avg merge
- 1d 23h
- Merged PRs (30d)
- 48
Description
Production deployment is not reproducible as documented (LMS Docker + easy-install mismatch)
Summary
The current official production deployment flow for frappe/lms is not reproducible as documented.
Following the official instructions results in multiple critical failures:
* LMS app is missing in official image
* payments dependency is not included in documented flow
* easy-install / Traefik configuration is missing required environment variables
* production setup requires undocumented custom image build steps
As a result, a fresh deployment cannot complete successfully using only the official README / easy-install flow.
⸻
Environment
* Ubuntu 24.04
* Docker 29.x
* Docker Compose v2+
* Deployment method: frappe easy-install.py + Docker Compose
* Domain behind Cloudflare (optional but not root cause)
⸻
Steps to reproduce (official documented flow)
wget https://frappe.io/easy-install.py
python3 ./easy-install.py deploy \
--email \
--image ghcr.io/frappe/lms \
--version stable \
--app lms \
--sitename
Then proceed with default generated docker-compose setup.
⸻
Expected behavior
A successful deployment should:
* Start all services (db, redis, backend, frontend, scheduler, etc.)
* Allow bench new-site
* Successfully install LMS app
* Provide working login UI at site domain
⸻
Actual behavior
1. LMS app missing in official image
During site creation:
ModuleNotFoundError: No module named 'lms'
Inspection shows:
* /home/frappe/frappe-bench/apps only contains frappe
* lms app is not present
⸻
2. payments dependency missing
When manually fixing LMS app, next failure occurs:
ModuleNotFoundError: No module named 'payments'
Could not find app "payments"
However LMS requires:
required_apps = ["frappe/payments"]
But payments is not included in documented install flow.
⸻
3. easy-install / Traefik configuration missing required variable
Generated .env is missing:
SITES_RULE=Host(`example.com`)
Without this, Traefik routing fails or requires manual patching.
⸻
4. Official image assumption is incorrect
ghcr.io/frappe/lms:stable does not include LMS app source code.
This makes the documented command misleading.
⸻
5. Required workaround (not documented)
A working deployment requires:
* Custom Docker image build including:
* frappe/lms
* frappe/payments
* BuildKit secret apps_json
* Manual override of easy-install generated config
Example apps.json:
[
{
"url": "https://github.com/frappe/payments.git",
"branch": "develop"
},
{
"url": "https://github.com/frappe/lms.git",
"branch": "develop"
}
]
⸻
Suggested fix
Option A (recommended): Fix official image
Ensure ghcr.io/frappe/lms:stable includes:
* frappe
* lms
* payments
or explicitly document dependencies.
⸻
Option B: Fix documentation
Update README / easy-install docs to include:
* Required apps:
* lms
* payments
* Custom image build step using BuildKit secret apps_json
* Required .env variable:
SITES_RULE=Host(`your-domain`)
⸻
Impact
* Fresh production deployments fail out-of-the-box
* Requires reverse engineering of docker build process
* Inconsistent with “easy-install” branding
* High friction for first-time production users
⸻
Environment notes (optional but relevant)
* Deployment behind Cloudflare may cause /login 403 due to WAF challenge (not core issue)
* Docker builds are resource intensive (memory + disk pressure), but not root cause
⸻
Additional context
This issue was encountered during a full production deployment attempt and required:
* custom image rebuild
* manual dependency inclusion
* patching generated environment variables
* bypassing undocumented build system behavior
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.