version: "3" services: backend: image: frappe/erpnext:v15.75.0 networks: - frappe_network depends_on: - init deploy: restart_policy: condition: on-failure volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs environment: DB_HOST: db DB_PORT: "3306" MYSQL_ROOT_PASSWORD: ${ADMIN_PASSWORD} MARIADB_ROOT_PASSWORD: ${ADMIN_PASSWORD} db: image: mariadb:10.6 networks: - frappe_network healthcheck: test: mysqladmin ping -h localhost --password=${ADMIN_PASSWORD} interval: 1s retries: 20 deploy: restart_policy: condition: on-failure 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: ${ADMIN_PASSWORD} MARIADB_ROOT_PASSWORD: ${ADMIN_PASSWORD} volumes: - db-data:/var/lib/mysql frontend: image: frappe/erpnext:v15.75.0 networks: - frappe_network depends_on: - init deploy: restart_policy: condition: on-failure entrypoint: - bash - -c command: - > while [ ! -f /home/frappe/frappe-bench/sites/init_done ]; do sleep 1; done && echo "Init done"; exec nginx-entrypoint.sh; 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 ports: - "8080:8080" queue-long: image: frappe/erpnext:v15.75.0 networks: - frappe_network depends_on: - redis-cache - redis-queue deploy: restart_policy: condition: on-failure command: - bench - worker - --queue - long,default,short volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs queue-short: image: frappe/erpnext:v15.75.0 networks: - frappe_network depends_on: - redis-cache - redis-queue deploy: restart_policy: condition: on-failure command: - bench - worker - --queue - short,default volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs redis-queue: image: redis:6.2-alpine networks: - frappe_network deploy: restart_policy: condition: on-failure volumes: - redis-queue-data:/data redis-cache: image: redis:6.2-alpine networks: - frappe_network deploy: restart_policy: condition: on-failure scheduler: image: frappe/erpnext:v15.75.0 networks: - frappe_network depends_on: - redis-cache - redis-queue deploy: restart_policy: condition: on-failure command: - bench - schedule volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs websocket: image: frappe/erpnext:v15.75.0 networks: - frappe_network deploy: restart_policy: condition: on-failure entrypoint: - bash - -c command: - > while [ ! -f /home/frappe/frappe-bench/sites/init_done ]; do sleep 1; done && echo "Init done"; node /home/frappe/frappe-bench/apps/frappe/socketio.js; volumes: - sites:/home/frappe/frappe-bench/sites - logs:/home/frappe/frappe-bench/logs init: image: frappe/erpnext:v15.75.0 networks: - frappe_network depends_on: - db - redis-cache - redis-queue 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; bench new-site --db-host=db --mariadb-user-host-login-scope='%' --admin-password=${ADMIN_PASSWORD} --db-root-username=root --db-root-password=${ADMIN_PASSWORD} --install-app erpnext --set-default frontend; touch /home/frappe/frappe-bench/sites/init_done; 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 volumes: db-data: redis-queue-data: sites: logs: networks: frappe_network: driver: bridge