diff --git a/docker-compose.yml b/docker-compose.yml index 6b04d61..223cd3c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,86 +1,167 @@ -# based on compose.yaml -# --------------modified start ------------------------------------- -# backend: add envs, add container_name -# frontend: add ports -# --------------modified end------------------------------------- -x-depends-on-configurator: &depends_on_configurator - depends_on: - configurator: - condition: service_completed_successfully +# image: https://registry.hub.docker.com/r/frappe/erpnext-worker +# docs: https://github.com/frappe/frappe_docker/blob/main/pwd.yml -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 +version: "3.8" services: - configurator: - <<: *backend_defaults - command: configure.py - environment: - DB_HOST: ${DB_HOST} - DB_PORT: ${DB_PORT} - REDIS_CACHE: ${REDIS_CACHE} - REDIS_QUEUE: ${REDIS_QUEUE} - REDIS_SOCKETIO: ${REDIS_SOCKETIO} - SOCKETIO_PORT: 9000 - depends_on: {} - backend: - <<: *backend_defaults - container_name: $APP_NAME-backend - environment: - - APP_URL - - APP_PASSWORD - - DB_PASSWORD + image: frappe/erpnext-worker:v13.32.0 + deploy: + restart_policy: + condition: on-failure volumes: - sites:/home/frappe/frappe-bench/sites - - assets:/home/frappe/frappe-bench/sites/assets:ro + - assets:/home/frappe/frappe-bench/sites/assets + + configurator: + image: frappe/erpnext-worker:v13.32.0 + 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" + volumes: + - sites:/home/frappe/frappe-bench/sites + + create-site: + image: frappe/erpnext-worker:v13.32.0 + deploy: + restart_policy: + condition: on-failure + volumes: + - sites:/home/frappe/frappe-bench/sites + - assets:/home/frappe/frappe-bench/sites/assets + entrypoint: + - bash + - -c + command: + - > + wait-for-it -t 120 db:3306; + wait-for-it -t 120 redis:6379; + export start=`date +%s`; + until [[ -n `grep -hs ^ common_site_config.json | jq -r ".db_host // empty"` ]] && \ + [[ -n `grep -hs ^ common_site_config.json | jq -r ".redis_cache // empty"` ]] && \ + [[ -n `grep -hs ^ common_site_config.json | jq -r ".redis_queue // empty"` ]]; + do + echo "Waiting for common_site_config.json to be created"; + sleep 5; + if (( `date +%s`-start > 120 )); then + echo "could not find common_site_config.json with required keys"; + exit 1 + fi + done; + echo "common_site_config.json found"; + bench new-site frontend --admin-password=admin --db-root-password=admin --install-app erpnext --set-default; + db: + image: mariadb:10.6 + healthcheck: + test: mysqladmin ping -h localhost --password=admin + interval: 1s + retries: 15 + 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 + volumes: + - db-data:/var/lib/mysql frontend: - image: frappe/frappe-nginx:${FRAPPE_VERSION} - container_name: $APP_NAME - ports: - - $APP_PORT:8080 + image: frappe/erpnext-nginx:v13.32.0 + deploy: + restart_policy: + condition: on-failure environment: BACKEND: backend:8000 + FRAPPE_SITE_NAME_HEADER: frontend SOCKETIO: websocket:9000 - FRAPPE_SITE_NAME_HEADER: ${FRAPPE_SITE_NAME_HEADER:-$$host} - UPSTREAM_REAL_IP_ADDRESS: ${UPSTREAM_REAL_IP_ADDRESS:-127.0.0.1} - UPSTREAM_REAL_IP_HEADER: ${UPSTREAM_REAL_IP_HEADER:-X-Forwarded-For} - UPSTREAM_REAL_IP_RECURSIVE: ${UPSTREAM_REAL_IP_RECURSIVE:-off} + UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1 + UPSTREAM_REAL_IP_HEADER: X-Forwarded-For + UPSTREAM_REAL_IP_RECURSIVE: "off" volumes: - sites:/usr/share/nginx/html/sites - assets:/usr/share/nginx/html/assets - depends_on: - - backend - - websocket + ports: + - "8080:8080" - websocket: - <<: *depends_on_configurator - image: frappe/frappe-socketio:${FRAPPE_VERSION} + queue-default: + image: frappe/erpnext-worker:v13.32.0 + deploy: + restart_policy: + condition: on-failure + command: + - bench + - worker + - --queue + - default + volumes: + - sites:/home/frappe/frappe-bench/sites + + queue-long: + image: frappe/erpnext-worker:v13.32.0 + deploy: + restart_policy: + condition: on-failure + command: + - bench + - worker + - --queue + - long volumes: - sites:/home/frappe/frappe-bench/sites queue-short: - <<: *backend_defaults - command: bench worker --queue short + image: frappe/erpnext-worker:v13.32.0 + deploy: + restart_policy: + condition: on-failure + command: + - bench + - worker + - --queue + - short + volumes: + - sites:/home/frappe/frappe-bench/sites - queue-default: - <<: *backend_defaults - command: bench worker --queue default - - queue-long: - <<: *backend_defaults - command: bench worker --queue long + redis: + image: redis:6.2-alpine + deploy: + restart_policy: + condition: on-failure + volumes: + - redis-data:/data scheduler: - <<: *backend_defaults - command: bench schedule + image: frappe/erpnext-worker:v13.32.0 + deploy: + restart_policy: + condition: on-failure + command: + - bench + - schedule + volumes: + - sites:/home/frappe/frappe-bench/sites + + websocket: + image: frappe/frappe-socketio:v13.31.0 + deploy: + restart_policy: + condition: on-failure + volumes: + - sites:/home/frappe/frappe-bench/sites -# ERPNext requires local assets access (Frappe does not) volumes: - sites: assets: + db-data: + redis-data: + sites: