version: "3" services: db: image: mariadb:10.6 platform: linux/amd64 command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --skip-character-set-client-handshake - --skip-innodb-read-only-compressed environment: MYSQL_ROOT_PASSWORD: admin MARIADB_ROOT_PASSWORD: admin volumes: - db-data:/var/lib/mysql networks: - frappe_network healthcheck: test: mysqladmin ping -h localhost --password=admin interval: 1s retries: 20 redis-cache: image: redis:6.2-alpine platform: linux/amd64 volumes: - redis-queue-data:/data networks: - frappe_network redis-queue: image: redis:6.2-alpine platform: linux/amd64 volumes: - redis-queue-data:/data networks: - frappe_network backend: image: frappe/erpnext:v15.65.4 platform: linux/amd64 volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs environment: DB_HOST: db DB_PORT: "3306" MYSQL_ROOT_PASSWORD: admin MARIADB_ROOT_PASSWORD: admin networks: - frappe_network deploy: restart_policy: condition: on-failure configurator: image: frappe/erpnext:v15.65.4 platform: linux/amd64 entrypoint: ["bash", "-c"] command: > ls -1 apps > sites/apps.txt && 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 -g redis_socketio 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" volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs networks: - frappe_network deploy: restart_policy: condition: none create-site: image: frappe/erpnext:v15.65.4 platform: linux/amd64 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 "common_site_config.json not ready"; exit 1; fi; done; echo "sites/common_site_config.json found"; bench new-site --mariadb-user-host-login-scope='%' --admin-password=admin --db-root-username=root --db-root-password=admin --install-app erpnext --set-default frontend; volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs networks: - frappe_network deploy: restart_policy: condition: none frontend: image: frappe/erpnext:v15.65.4 platform: linux/amd64 command: ["nginx-entrypoint.sh"] ports: - "8080:8080" environment: BACKEND: backend:8000 FRAPPE_SITE_NAME_HEADER: frontend SOCKETIO: websocket:9000 UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1 UPSTREAM_REAL_IP_HEADER: X-Forwarded-For UPSTREAM_REAL_IP_RECURSIVE: "off" PROXY_READ_TIMEOUT: 120 CLIENT_MAX_BODY_SIZE: 50m volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs networks: - frappe_network depends_on: - websocket deploy: restart_policy: condition: on-failure websocket: image: frappe/erpnext:v15.65.4 platform: linux/amd64 command: ["node", "/home/frappe/frappe-bench/apps/frappe/socketio.js"] volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs networks: - frappe_network deploy: restart_policy: condition: on-failure scheduler: image: frappe/erpnext:v15.65.4 platform: linux/amd64 command: ["bench", "schedule"] volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs networks: - frappe_network deploy: restart_policy: condition: on-failure queue-short: image: frappe/erpnext:v15.65.4 platform: linux/amd64 command: ["bench", "worker", "--queue", "short,default"] volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs networks: - frappe_network deploy: restart_policy: condition: on-failure queue-long: image: frappe/erpnext:v15.65.4 platform: linux/amd64 command: ["bench", "worker", "--queue", "long,default,short"] volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs networks: - frappe_network deploy: restart_policy: condition: on-failure volumes: db-data: redis-queue-data: sites: logs: networks: frappe_network: driver: bridge