frappe / frappe/lms

Production deployment path is not reproducible as documented

Open
#2,467 4 comments 1 reaction 0 assignees View on GitHub
bug
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.