frappe_docker/docs/06-migration/01-migrate-from-multi-image-setup.md
Ali Al Saif 09934d576c
docs: reorganize documentation structure with numbered navigation (#1729)
* 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>
2025-12-06 10:07:36 +05:30

3.9 KiB

Migrate from multi-image setup

All the containers now use same image. Use frappe/erpnext instead of frappe/frappe-worker, frappe/frappe-nginx , frappe/frappe-socketio , frappe/erpnext-worker and frappe/erpnext-nginx.

Now you need to specify command and environment variables for following containers:

Frontend

For frontend service to act as static assets frontend and reverse proxy, you need to pass nginx-entrypoint.sh as container command and BACKEND and SOCKETIO environment variables pointing {host}:{port} for gunicorn and websocket services. Check environment variables

Now you only need to mount the sites volume at location /home/frappe/frappe-bench/sites. No need for assets volume and asset population script or steps.

Example change:

# ... removed for brevity
frontend:
  image: frappe/erpnext:${ERPNEXT_VERSION:?ERPNext version not set}
  command:
    - nginx-entrypoint.sh
  environment:
    BACKEND: backend:8000
    SOCKETIO: websocket:9000
  volumes:
    - sites:/home/frappe/frappe-bench/sites
# ... removed for brevity

Websocket

For websocket service to act as socketio backend, you need to pass ["node", "/home/frappe/frappe-bench/apps/frappe/socketio.js"] as container command

Example change:

# ... removed for brevity
websocket:
  image: frappe/erpnext:${ERPNEXT_VERSION:?ERPNext version not set}
  command:
    - node
    - /home/frappe/frappe-bench/apps/frappe/socketio.js
# ... removed for brevity

Configurator

For configurator service to act as run once configuration job, you need to pass ["bash", "-c"] as container entrypoint and bash script inline to yaml. There is no configure.py in the container now.

Example change:

# ... removed for brevity
configurator:
  image: frappe/erpnext:${ERPNEXT_VERSION:?ERPNext version not set}
  restart: "no"
  entrypoint:
    - bash
    - -c
  command:
    - >
      bench set-config -g db_host $$DB_HOST;
      bench set-config -gp db_port $$DB_PORT;
      bench set-config -g redis_cache "redis://$$REDIS_CACHE";
      bench set-config -g redis_queue "redis://$$REDIS_QUEUE";
      bench set-config -gp socketio_port $$SOCKETIO_PORT;      
  environment:
    DB_HOST: db
    DB_PORT: "3306"
    REDIS_CACHE: redis-cache:6379
    REDIS_QUEUE: redis-queue:6379
    SOCKETIO_PORT: "9000"
# ... removed for brevity

Site Creation

For create-site service to act as run once site creation job, you need to pass ["bash", "-c"] as container entrypoint and bash script inline to yaml. Make sure to use --mariadb-user-host-login-scope=% as upstream bench is installed in container.

The WORKDIR has changed to /home/frappe/frappe-bench like bench setup we are used to. So the path to find common_site_config.json has changed to sites/common_site_config.json.

Example change:

# ... removed for brevity
create-site:
  image: frappe/erpnext:${ERPNEXT_VERSION:?ERPNext version not set}
  restart: "no"
  entrypoint:
    - bash
    - -c
  command:
    - >
      wait-for-it -t 120 db:3306;
      wait-for-it -t 120 redis-cache:6379;
      wait-for-it -t 120 redis-queue:6379;
      export start=`date +%s`;
      until [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty"` ]] && \
        [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_cache // empty"` ]] && \
        [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_queue // empty"` ]];
      do
        echo "Waiting for sites/common_site_config.json to be created";
        sleep 5;
        if (( `date +%s`-start > 120 )); then
          echo "could not find sites/common_site_config.json with required keys";
          exit 1
        fi
      done;
      echo "sites/common_site_config.json found";
      bench new-site --mariadb-user-host-login-scope=% --admin-password=admin --db-root-password=admin --install-app erpnext --set-default frontend;      

# ... removed for brevity