commit 81a74285deb7999206edb12dad13d815cb4170a4 Author: svhs Date: Wed May 13 14:28:46 2026 +0200 Add docker-compose.yml THIS IS NEW!! :) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5f98790 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,292 @@ +services: + redis-queue: + image: redis + container_name: ERPNext-REDIS-QUEUE + hostname: redis-queue + mem_limit: 256m + mem_reservation: 50m + cpu_shares: 768 + security_opt: + - no-new-privileges:true + read_only: true + healthcheck: + test: ["CMD-SHELL", "redis-cli ping || exit 1"] + volumes: + - /volume1/docker/erpnext_v16_18_1/redis-queue:/data:rw + - /etc/localtime:/etc/localtime:ro + restart: on-failure:5 + + redis-cache: + image: redis + container_name: ERPNext-REDIS-CACHE + hostname: redis-cache + mem_limit: 256m + mem_reservation: 50m + cpu_shares: 768 + security_opt: + - no-new-privileges:true + read_only: true + healthcheck: + test: ["CMD-SHELL", "redis-cli ping || exit 1"] + volumes: + - /volume1/docker/erpnext_v16_18_1/redis-cache:/data:rw + - /etc/localtime:/etc/localtime:ro + restart: on-failure:5 + + redis-socketio: + image: redis + container_name: ERPNext-REDIS-SOCKETIO + hostname: redis-socketio + mem_limit: 256m + mem_reservation: 50m + cpu_shares: 768 + security_opt: + - no-new-privileges:true + read_only: true + healthcheck: + test: ["CMD-SHELL", "redis-cli ping || exit 1"] + volumes: + - /volume1/docker/erpnext_v16_18_1/redis-socketio:/data:rw + - /etc/localtime:/etc/localtime:ro + restart: on-failure:5 + + db: + image: mariadb:10.8-jammy + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + - --skip-character-set-client-handshake + container_name: ERPNext-DB + hostname: erpnext-db + mem_limit: 1g + cpu_shares: 768 + security_opt: + - no-new-privileges:true + healthcheck: + test: ["CMD-SHELL", "mysqladmin ping -u root -prootpass | grep 'mysqld is alive' || exit 1"] + volumes: + - /volume1/docker/erpnext_v16_18_1/db:/var/lib/mysql:rw + - /etc/localtime:/etc/localtime:ro + environment: + MYSQL_ROOT_PASSWORD: rootpass + restart: on-failure:5 + + configurator: + image: frappe/erpnext:latest + entrypoint: + - bash + - -c + command: + - > + ls -1 apps > sites/apps.txt; + bench set-config -g db_host erpnext-db; + bench set-config -gp db_port 3306; + 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-socketio"; + bench set-config -gp socketio_port 9000; + container_name: ERPNext-CONFIGURATOR + hostname: configurator + cpu_shares: 768 + security_opt: + - no-new-privileges:true + volumes: + - /volume1/docker/erpnext_v16_18_1/sites:/home/frappe/frappe-bench/sites:rw + - /volume1/docker/erpnext_v16_18_1/logs:/home/frappe/frappe-bench/logs:rw + - /etc/localtime:/etc/localtime:ro + environment: + DB_HOST: erpnext-db + DB_PORT: 3306 + REDIS_CACHE: redis-cache + REDIS_QUEUE: redis-queue + REDIS_SOCKETIO: redis-socketio + SOCKETIO_PORT: 9000 + restart: "no" + depends_on: + redis-queue: + condition: service_healthy + redis-cache: + condition: service_healthy + redis-socketio: + condition: service_healthy + db: + condition: service_healthy + + backend: + image: frappe/erpnext:latest + container_name: ERPNext-BACKEND + hostname: backend + mem_limit: 1g + cpu_shares: 768 + security_opt: + - no-new-privileges:true + volumes: + - /volume1/docker/erpnext_v16_18_1/sites:/home/frappe/frappe-bench/sites:rw + - /volume1/docker/erpnext_v16_18_1/logs:/home/frappe/frappe-bench/logs:rw + - /etc/localtime:/etc/localtime:ro + restart: on-failure:5 + depends_on: + configurator: + condition: service_completed_successfully + + websocket: + image: frappe/erpnext:latest + command: + - node + - /home/frappe/frappe-bench/apps/frappe/socketio.js + container_name: ERPNext-WEBOSCKET + hostname: websocket + mem_limit: 1g + cpu_shares: 768 + security_opt: + - no-new-privileges:true + volumes: + - /volume1/docker/erpnext_v16_18_1/sites:/home/frappe/frappe-bench/sites:rw + - /volume1/docker/erpnext_v16_18_1/logs:/home/frappe/frappe-bench/logs:rw + - /etc/localtime:/etc/localtime:ro + restart: on-failure:5 + depends_on: + configurator: + condition: service_completed_successfully + + create-site: + image: frappe/erpnext:latest + entrypoint: + - bash + - -c + command: + - > + wait-for-it -t 480 erpnext-db:3306; + wait-for-it -t 480 redis-cache:6379; + wait-for-it -t 480 redis-queue:6379; + wait-for-it -t 480 redis-socketio: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 "could not find sites/common_site_config.json with required keys"; + exit 1 + fi + done; + echo "sites/common_site_config.json found"; + bench new-site Frappe --no-mariadb-socket --mariadb-root-password=rootpass --admin-password=admin --install-app=erpnext --set-default; + container_name: ERPNext-CREATE-SITE + hostname: create-site + security_opt: + - no-new-privileges:true + volumes: + - /volume1/docker/erpnext_v16_18_1/sites:/home/frappe/frappe-bench/sites:rw + - /volume1/docker/erpnext_v16_18_1/logs:/home/frappe/frappe-bench/logs:rw + - /etc/localtime:/etc/localtime:ro + restart: "no" + depends_on: + configurator: + condition: service_completed_successfully + + queue-default: + image: frappe/erpnext:latest + command: bench worker --queue default + container_name: ERPNext-QUEUE-DEFAULT + hostname: queue-default + mem_limit: 1g + cpu_shares: 768 + security_opt: + - no-new-privileges:true + volumes: + - /volume1/docker/erpnext_v16_18_1/sites:/home/frappe/frappe-bench/sites:rw + - /volume1/docker/erpnext_v16_18_1/logs:/home/frappe/frappe-bench/logs:rw + - /etc/localtime:/etc/localtime:ro + restart: on-failure:5 + depends_on: + configurator: + condition: service_completed_successfully + + queue-long: + image: frappe/erpnext:latest + command: bench worker --queue long + container_name: ERPNext-QUEUE-LONG + hostname: queue-long + mem_limit: 1g + cpu_shares: 768 + security_opt: + - no-new-privileges:true + volumes: + - /volume1/docker/erpnext_v16_18_1/sites:/home/frappe/frappe-bench/sites:rw + - /volume1/docker/erpnext_v16_18_1/logs:/home/frappe/frappe-bench/logs:rw + - /etc/localtime:/etc/localtime:ro + restart: on-failure:5 + depends_on: + configurator: + condition: service_completed_successfully + + queue-short: + image: frappe/erpnext:latest + command: bench worker --queue short + container_name: ERPNext-QUEUE-SHORT + hostname: queue-short + mem_limit: 1g + cpu_shares: 768 + security_opt: + - no-new-privileges:true + volumes: + - /volume1/docker/erpnext_v16_18_1/sites:/home/frappe/frappe-bench/sites:rw + - /volume1/docker/erpnext_v16_18_1/logs:/home/frappe/frappe-bench/logs:rw + - /etc/localtime:/etc/localtime:ro + restart: on-failure:5 + depends_on: + configurator: + condition: service_completed_successfully + + scheduler: + image: frappe/erpnext:latest + command: bench schedule + container_name: ERPNext-SCHEDULER + hostname: scheduler + mem_limit: 1g + cpu_shares: 768 + security_opt: + - no-new-privileges:true + volumes: + - /volume1/docker/erpnext_v16_18_1/sites:/home/frappe/frappe-bench/sites:rw + - /volume1/docker/erpnext_v16_18_1/logs:/home/frappe/frappe-bench/logs:rw + - /etc/localtime:/etc/localtime:ro + restart: on-failure:5 + depends_on: + configurator: + condition: service_completed_successfully + + frontend: + image: frappe/erpnext:latest + command: + - nginx-entrypoint.sh + container_name: ERPNext-FRONTEND + hostname: frontend + mem_limit: 1g + cpu_shares: 768 + security_opt: + - no-new-privileges:true + ports: + - 8345:8080 + volumes: + - /volume1/docker/erpnext_v16_18_1/sites:/home/frappe/frappe-bench/sites:rw + - /volume1/docker/erpnext_v16_18_1/logs:/home/frappe/frappe-bench/logs:rw + - /etc/localtime:/etc/localtime:ro + environment: + BACKEND: backend:8000 + FRAPPE_SITE_NAME_HEADER: Frappe + 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_TIMOUT: 120 + CLIENT_MAX_BODY_SIZE: 50m + restart: on-failure:5 + depends_on: + backend: + condition: service_started + websocket: + condition: service_started \ No newline at end of file