* docs: reorganize documentation structure into logical categories Restructure documentation into organized directories for better navigation: - getting-started/: Quick start guides for new users - setup/: Setup and configuration guides - production/: Production deployment guides (backup, TLS, multi-tenancy) - operations/: Site operations and management - development/: Development workflow guides - migration/: Migration guides - troubleshooting/: Troubleshooting guides - reference/: Reference documentation (container setup, build configs) Rename files for consistency: - Use kebab-case naming convention throughout - Remove numbered prefixes from container-setup files - Use descriptive names (backup-strategy, tls-ssl-setup, etc.) Update all internal cross-references to reflect new file locations. Update README.md with organized documentation structure. Fix image paths in development.md to use correct relative paths. * docs: add numeric prefixes to directories and files for navigation order Add numeric prefixes (01-08) to documentation directories to indicate reading order and flow for first-time users: - 01-getting-started: Quick start guides - 02-setup: Setup and configuration - 03-production: Production deployment - 04-operations: Site operations - 05-development: Development guides - 06-migration: Migration guides - 07-troubleshooting: Troubleshooting - 08-reference: Reference documentation Add numeric prefixes to files within directories to guide readers through documentation in a logical sequence. Update all cross-references throughout documentation to use new numbered paths. Update README.md to reflect the new structure. * docs: move container-setup to 02-setup and integrate setup-options content Move container-setup directory from 08-reference/ to 02-setup/ to follow PR feedback. The container-setup documentation provides a more linear and coherent flow compared to the previous unstructured setup files. Changes: - Move container-setup/ from docs/08-reference/ to docs/02-setup/ - Integrate content from setup-options.md into structured flow: - Create new 06-setup-examples.md with practical deployment scenarios - Enhance 03-start-setup.md with site creation details from setup-options - Remove redundant 01-setup-options.md (content now integrated) - Rename 02-single-server-example.md to 07-single-server-example.md - Update all cross-references throughout documentation: - Update README.md with new structure under Setup section - Fix links in site-operations.md and migration docs - Add navigation links between container-setup files and examples - Maintain container-setup's linear flow: overview → build → start → env → overrides - Add practical examples document (06-setup-examples.md) that follows the container-setup guide Result: Documentation now follows a clear progression from conceptual overview through practical examples, with all setup information properly organized under 02-setup/. * docs: remove container-setup subfolder and flatten structure Move all files from docs/02-setup/container-setup/ directly into docs/02-setup/ to eliminate unnecessary subfolder. Files are already numbered sequentially, so they work perfectly at the same level. Changes: - Move all files from container-setup/ subfolder to 02-setup/ root - Remove container-setup/ subfolder - Update all cross-references: - Update README.md paths (remove container-setup/ from all links) - Fix references in site-operations.md - Fix references in migration docs - Update internal references in 06-setup-examples.md - Fix relative path references in 01-overview.md, 02-build-setup.md, 03-start-setup.md Result: Cleaner, flatter structure with all numbered setup files at the same level, making navigation more straightforward. * fix: Pre-commit failure is fixed --------- Co-authored-by: adithya <adithya.a@bayesian.in>
5.7 KiB
The purpose of this document is to give you an overview of how the Frappe Docker containers are structured.
🐳 Images
There are four predefined Dockerfiles available in the /images directory.
| Dockerfile | Ingredients | Purpose & Use Case |
|---|---|---|
| bench | Sets up only the Bench CLI. | Used for development or debugging. Provides the command-line tooling but does not include runtime services. |
| custom | Multi-purpose Python backend built from a plain Python image. Includes everything needed to run a Frappe instance via a Compose setup. Installs apps defined in apps.json. |
Suitable for production and testing. Ideal when you need control over dependencies (e.g. trying new Python or Node versions). |
| layered | Final contents are the same as custom, but it is based on prebuilt images from Docker Hub. |
Great for production builds when you’re fine with the dependency versions managed by Frappe. Builds much faster since the base layers are already prepared. |
| production | Similar to custom (built from a Python base image), but installs only Frappe and ERPNext. Not customizable with apps.json. |
Best for quick starts or exploration. For real deployments or CI/CD pipelines, custom or layered are preferred because they offer more flexibility. |
These images include everything needed to run all processes required by the Frappe framework (see Bench Procfile reference).
- The
benchimage only sets up the CLI tool. - The other images (
custom,layered, andproduction) go further — enabling a nearly plug-and-play setup for ERPNext and custom apps.
We use multi-stage builds and Docker Buildx to maximize layer reuse and make our builds more efficient.
🏗️ Compose
Once images are built, containers are orchestrated using a compose file. The main compose.yaml provides core services, networking, and volumes for any Frappe setup.
🛠️ Services
| Service | Role | Purpose |
|---|---|---|
| configurator | Setup | Updates common_site_config.json so Frappe knows how to access db and redis. It is executed on every docker-compose up (and exited immediately). Other services start after this container exits successfully |
| backend | Runtime | Werkzeug server |
| frontend | Proxy | nginx server that serves JS/CSS assets and routes incoming requests |
| websocket | Real-time | Node server that runs Socket.IO |
| queue-_ | Background Jobs | Python servers that run job queues using rq |
| scheduler | Task Automation | Python server that runs tasks on schedule using schedule |
🧩 Overrides
Additional functionality can be added using overrides. These files modify existing services or add new ones without changing the main compose.yaml.
Example: The main compose file has no database service, but compose.mariadb.yaml adds MariaDB. See overrides.md for the complete list of available overrides and how to use them.
Next: Build Setup →
See also: Setup Examples for practical deployment scenarios.