Files
frappe_docker/docs/images-and-compose-files.md
2021-12-17 14:10:24 +03:00

3.7 KiB

Images

There's 4 images that you can find in /build directory:

  • bench. It is used for development. Learn more how to start development.
  • nginx. This image contains JS and CSS assets. Container using this image also routes incoming requests using nginx.
  • socketio. Container using this image processes realtime websocket requests using Socket.IO.
  • worker. Multi-purpose Python backend. Runs Werkzeug server with gunicorn, queues (via bench worker), or schedule (via bench schedule).

nginx, socketio and worker images — everything we need to be able to run all processes that Frappe framework requires (take a look at Bench Procfile reference). We follow Docker best practices and split these processes to different containers.

ERPNext images don't have their own Dockerfiles. We use multi-stage builds and Docker Buildx to reuse as much things as possible and make are builds more efficient.

Compose files

After building the images we have to run the containers. The best and simplest way to do this is to use compose files.

We have one main compose file, compose.yaml. Services described, networking, volumes are also handled there.

Services that the file contains:

  • configurator. 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. Werkzeug server.
  • db. MariaDB, can be overwritten with Postgres if you also use overrides/compose.postgres.yaml.
  • redis. Redis server with cache, Socket.IO and queues data.
  • frontend. nginx server that serves JS/CSS assets and routes incoming requests.
  • proxy. Traefik proxy. It is here for complicated setups or HTTPS override (with overrides/compose.https.yaml).
  • websocket. Node server that runs Socket.IO.
  • queue-short, queue-default, queue-long. Python servers that run job queues using rq.
  • scheduler. Python server that runs tasks on schedule using schedule.

Also, we have several overrides.

  • overrides/compose.erpnext.yaml. Replaces all Frappe images with ERPNext ones. ERPNext images are built on top of Frappe ones, so it is safe to replace them.
  • overrides/compose.https.yaml. Automatically sets up Let's Encrypt certificate and redirects all requests to directed to http, to https.
  • overrides/compose.postgres.yaml. Replaces db service's image from MariaDB to Postgres. Note that ERPNext currently doesn't support Postgres.

It is quite simple to run overrides. All we need to do is to specify compose files that should be used by docker-compose. For example, we want ERPNext:

# Point to main compose file (compose.yaml) and add one more.
docker-compose -f compose.yaml -f overrides/compose.erpnext.yaml

That's it! Of course, we also have to setup .env before all of that, but that's not the point.