x-depends-on-configurator: &depends_on_configurator depends_on: configurator: condition: service_completed_successfully x-backend-defaults: &backend_defaults <<: *depends_on_configurator image: frappe/frappe-worker:${FRAPPE_VERSION:?No Frappe version set} volumes: - sites:/home/frappe/frappe-bench/sites services: configurator: <<: *backend_defaults command: configure.py environment: DB_HOST: db DB_PORT: 3306 REDIS_CACHE: redis:6379/0 REDIS_QUEUE: redis:6379/1 REDIS_SOCKETIO: redis:6379/2 SOCKETIO_PORT: 9000 depends_on: db: condition: service_healthy backend: <<: *backend_defaults volumes: - sites:/home/frappe/frappe-bench/sites - assets:/home/frappe/frappe-bench/sites/assets db: image: mariadb:10.6 healthcheck: test: mysqladmin ping -h localhost --password=${DB_PASSWORD} interval: 1s retries: 15 command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --skip-character-set-client-handshake - --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6 environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:?No db password set} volumes: - db-data:/var/lib/mysql redis: image: redis:6.2-alpine volumes: - redis-data:/data frontend: image: frappe/frappe-nginx:${FRAPPE_VERSION} environment: BACKEND: backend:8000 SOCKETIO: websocket:9000 FRAPPE_SITE_NAME_HEADER: ${FRAPPE_SITE_NAME_HEADER:-$$host} volumes: - sites:/usr/share/nginx/html/sites - assets:/usr/share/nginx/html/assets depends_on: - backend - websocket labels: - traefik.enable=true - traefik.http.services.frontend.loadbalancer.server.port=80 - traefik.http.routers.frontend-http.entrypoints=web - traefik.http.routers.frontend-http.rule=HostRegexp(`{any:.+}`) proxy: image: traefik:2.5 command: - --providers.docker - --providers.docker.exposedbydefault=false - --entrypoints.web.address=:80 ports: - 80:80 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro userns_mode: host websocket: <<: *depends_on_configurator image: frappe/frappe-socketio:${FRAPPE_VERSION} volumes: - sites:/home/frappe/frappe-bench/sites queue-short: <<: *backend_defaults command: bench worker --queue short queue-default: <<: *backend_defaults command: bench worker --queue default queue-long: <<: *backend_defaults command: bench worker --queue long scheduler: <<: *backend_defaults command: bench schedule # ERPNext requires local assets access (Frappe does not) volumes: sites: assets: db-data: redis-data: