Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add template for erpnext #3882

Draft
wants to merge 13 commits into
base: main
Choose a base branch
from
4 changes: 4 additions & 0 deletions public/svgs/erpnext.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
241 changes: 241 additions & 0 deletions templates/compose/erpnext.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
# documentation: https://docs.erpnext.com/
# slogan: ERPNext is the world's best free and open source ERP.
# tags: business, apps, CRM, eCommerce, accounting, inventory, point of sale, project management, open-source
# logo: svgs/erpnext.svg
# port: 8080

# Based on https://github.com/frappe/frappe_docker/blob/main/pwd.yml
services:
backend:
image: "${ERPNEXT_IMAGE}:${ERPNEXT_IMAGE_TAG}"
healthcheck:
test: |
curl --fail -H "Host: $$FRAPPE_SITE_NAME_HEADER" http://localhost:8000/api/method/ping | jq '.message == "pong"' | grep true || exit 1
deploy:
restart_policy:
condition: on-failure
environment:
FRAPPE_SITE_NAME_HEADER: my-erpnext
# Coolify does not pick up these interpolation variables from the `image:` key,
# so we need to set them here. They are not used by any command in the container.
ERPNEXT_IMAGE: ${ERPNEXT_IMAGE:-frappe/erpnext}
ERPNEXT_IMAGE_TAG: ${ERPNEXT_IMAGE_TAG:-latest}
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs

configurator:
image: "${ERPNEXT_IMAGE}:${ERPNEXT_IMAGE_TAG}"
deploy:
restart_policy:
condition: none
exclude_from_hc: true
entrypoint:
- bash
- -c
# add redis_socketio for backward compatibility
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

createsite:
image: "${ERPNEXT_IMAGE}:${ERPNEXT_IMAGE_TAG}"
deploy:
restart_policy:
condition: none
exclude_from_hc: true
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
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 "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 --no-mariadb-socket \
--admin-password=$$ADMIN_PASSWORD \
--db-root-password=$$MARIADB_ROOT_PW \
--install-app erpnext \
--set-default \
my-erpnext;
environment:
- ADMIN_PASSWORD=${SERVICE_PASSWORD_CREATESITE}
- MARIADB_ROOT_PW=${SERVICE_PASSWORD_DB}

db:
image: mariadb:10.6
healthcheck:
test: mysqladmin ping -h localhost --password='$$MYSQL_ROOT_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=${SERVICE_PASSWORD_DB}
volumes:
- db-data:/var/lib/mysql

frontend:
image: "${ERPNEXT_IMAGE}:${ERPNEXT_IMAGE_TAG}"
depends_on:
- websocket
deploy:
restart_policy:
condition: on-failure
command:
- nginx-entrypoint.sh
healthcheck:
test: |
curl --fail -H "Host: $$FRAPPE_SITE_NAME_HEADER" http://localhost:8080/api/method/ping | jq '.message == "pong"' | grep true || exit 1
environment:
BACKEND: backend:8000
SOCKETIO: websocket:9000
FRAPPE_SITE_NAME_HEADER: my-erpnext
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
SERVICE_FQDN_FRONTEND_8080:
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs

queue-worker-long:
image: "${ERPNEXT_IMAGE}:${ERPNEXT_IMAGE_TAG}"
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-worker-short:
image: "${ERPNEXT_IMAGE}:${ERPNEXT_IMAGE_TAG}"
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
deploy:
restart_policy:
condition: on-failure
healthcheck:
test: redis-cli ping
interval: 5s
retries: 10
timeout: 2s
volumes:
- redis-queue-data:/data

redis-cache:
image: redis:6.2-alpine
deploy:
restart_policy:
condition: on-failure
healthcheck:
test: redis-cli ping
interval: 5s
retries: 10
timeout: 2s
volumes:
- redis-cache-data:/data

scheduler:
image: "${ERPNEXT_IMAGE}:${ERPNEXT_IMAGE_TAG}"
deploy:
restart_policy:
condition: on-failure
command:
- bench
- schedule
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs

websocket:
image: "${ERPNEXT_IMAGE}:${ERPNEXT_IMAGE_TAG}"
deploy:
restart_policy:
condition: on-failure
command:
- node
- /home/frappe/frappe-bench/apps/frappe/socketio.js
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs

migration:
image: "${ERPNEXT_IMAGE}:${ERPNEXT_IMAGE_TAG}"
deploy:
restart_policy:
condition: none
exclude_from_hc: true
entrypoint: ["bash", "-c"]
command:
- |
bench --site all set-config -p maintenance_mode 1
bench --site all set-config -p pause_scheduler 1
bench --site all migrate
bench --site all set-config -p maintenance_mode 0
bench --site all set-config -p pause_scheduler 0
volumes:
- sites:/home/frappe/frappe-bench/sites

volumes:
db-data:
redis-queue-data:
redis-cache-data:
sites:
logs: