--- title: Choosing a Method --- # Choosing a Deployment or Development Method This repository (`frappe_docker`) supports **multiple ways to run Frappe using Docker**. Each method is designed for a **specific purpose**, and they are **not interchangeable**. This document explains: - All supported ways to use this repository - Which method to choose depending on your goal - Common misconceptions, especially around persistence and app installation Reading this document **before following any setup guide** is strongly recommended. ## Overview | Goal | Recommended Method | Production Ready | | ---------------------------- | ------------------------- | ---------------- | | Quick exploration | `pwd.yml` | ❌ | | Local development | VS Code Devcontainers | ❌ | | Automated production install | Easy Install Script | ✅ | | Manual production deployment | `compose.yml` + overrides | ✅ | ## 1. `pwd.yml` – Quick Test / Exploration Setup The `pwd.yml` file is a **single, self-contained Docker Compose file** intended for: - Trying out Frappe and ERPNext - Demos and short-lived test environments - Learning the basics without setup overhead ### Characteristics - One Compose file - Minimal configuration - Fast startup - Disposable by design ### Limitations - ❌ **Not intended for production** - ❌ **Not intended for development** - ❌ **Not suitable as a migration starting point** If you start with `pwd.yml`, you should expect to **throw the environment away**. ## 2. VS Code Devcontainers – Local Development Setup The development setup described in [`/docs/05-development/development.md`](../05-development/01-development.md) uses **VS Code Devcontainers** to provide a **local Frappe development environment**. ### Intended Use - Developing Frappe or custom apps - Working with source code - Debugging and testing changes locally ### Key Differences from Other Setups - Optimized for **interactive development** - Code is editable live - Containers are tailored for developer workflows - Not designed to represent a production environment ### Important Notes - ❌ **Not a deployment method** - ❌ **Not intended for production** - ✔ The **correct way** to do local development with this repository Using production-oriented setups (`pwd.yml` or `compose.yml`) for development is strongly discouraged. ## 3. Easy Install Script (from `frappe/bench`) The Easy Install script provided in the [`frappe/bench`](https://github.com/frappe/bench) repository uses `frappe_docker` internally and automates a full deployment process. It is comparable to what a **deployment pipeline** would perform. ### What It Does - Installs Docker and prerequisites - Pulls and configures `frappe_docker` - Uses production-grade images and services - Reduces manual configuration ### Intended Use - Production environments - Users who want a guided, automated installation - Server deployments with minimal manual steps ### Production Readiness ✔ **Yes** — suitable for real production systems ✔ Uses the same components as the manual production setup ## 4. `compose.yml` + Overrides – Intended Production Setup This is the **canonical production deployment method** for `frappe_docker`. It uses: - The main `compose.yml` - Override files from the `overrides/` directory Detailed instructions are available in [`/docs/02-setup`](../02-setup/01-overview.md) ### Characteristics - Explicit service definitions - Flexible and configurable - Designed for long-running production environments - Suitable for advanced and customized deployments **This is the preferred approach for teams managing their own infrastructure.** ## Summary - Each setup serves a **distinct purpose** - Development, testing, and production are **separate workflows** - Do not expect to evolve a disposable setup into production - Apps must be included **at build time**, not installed later ([Docker immutability](02-docker-immutability.md))