Files
erp-docker/docker-compose.yml
jerron 9ba3815e54
Lint / lint (push) Canceled after 0s
重生成build文件
2026-09-04 15:20:42 +08:00

139 lines
6.3 KiB
YAML

services:
# ============================================
# ERPNext 主服务(包含所有进程)
# ============================================
erpnext:
image: yierp:v260831
container_name: erpnext-all-in-one
user: root
restart: unless-stopped
networks:
- frappe_network
ports:
- "8080:8000"
environment:
DB_HOST: db
DB_PORT: "3306"
MYSQL_ROOT_PASSWORD: admin
MARIADB_ROOT_PASSWORD: admin
REDIS_CACHE: redis://redis-cache:6379
REDIS_QUEUE: redis://redis-queue:6379
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
depends_on:
db:
condition: service_healthy
redis-cache:
condition: service_started
redis-queue:
condition: service_started
command: >
bash -ec "
NODE24_BIN=$$(dirname $$(ls -1 /home/frappe/.nvm/versions/node/*/bin/node 2>/dev/null | sort | tail -n1 || true)) &&
if [ -n "$$NODE24_BIN" ]; then
ln -sf "$$NODE24_BIN/node" /usr/local/bin/node &&
ln -sf "$$NODE24_BIN/npm" /usr/local/bin/npm &&
[ -x "$$NODE24_BIN/npx" ] && ln -sf "$$NODE24_BIN/npx" /usr/local/bin/npx || true;
[ -x "$$NODE24_BIN/yarn" ] && ln -sf "$$NODE24_BIN/yarn" /usr/local/bin/yarn || true;
fi &&
mkdir -p /home/frappe/frappe-bench/sites /home/frappe/frappe-bench/logs /home/frappe/frappe-bench/config/pids &&
chown -R frappe:frappe /home/frappe/frappe-bench/sites /home/frappe/frappe-bench/logs /home/frappe/frappe-bench/config &&
cd /home/frappe/frappe-bench &&
su -s /bin/bash frappe -c 'sed -i "s#air-datepicker/dist/js/datepicker.min.js#air-datepicker/air-datepicker.js#g" /home/frappe/frappe-bench/apps/frappe/frappe/public/js/controls.bundle.js && sed -i "s#~air-datepicker/dist/css/datepicker.min#air-datepicker/air-datepicker.css#g" /home/frappe/frappe-bench/apps/frappe/frappe/public/scss/common/datepicker.scss && sed -i "s#~air-datepicker/air-datepicker.css#air-datepicker/air-datepicker.css#g" /home/frappe/frappe-bench/apps/frappe/frappe/public/scss/common/datepicker.scss && sed -i "s#air-datepicker/dist/js/i18n/#air-datepicker/locale/#g" /home/frappe/frappe-bench/apps/frappe/frappe/public/js/frappe/form/controls/datepicker_i18n.js && sed -i "s#air-datepicker/locale/datepicker.#air-datepicker/locale/#g" /home/frappe/frappe-bench/apps/frappe/frappe/public/js/frappe/form/controls/datepicker_i18n.js' &&
su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench && find apps -mindepth 1 -maxdepth 1 -type d | while read -r app_dir; do app_name=$$(basename "$$app_dir"); [ -f "$$app_dir/$$app_name/modules.txt" ] && echo "$$app_name"; done | sort > sites/apps.txt' &&
su -s /bin/bash frappe -c 'node -v && yarn -v' &&
echo '=== 配置数据库连接 ===' &&
su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench && bench set-mariadb-host "'"'"'$$DB_HOST'"'"'"' &&
su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench && bench config set-common-config -c db_port "'"'"'$$DB_PORT'"'"'"' &&
su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench && bench set-redis-cache-host "'"'"'$$REDIS_CACHE'"'"'"' &&
su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench && bench set-redis-queue-host "'"'"'$$REDIS_QUEUE'"'"'"' &&
su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench && bench set-redis-socketio-host "'"'"'$$REDIS_QUEUE'"'"'"' &&
echo '=== 检查站点是否存在 ===' &&
if [ ! -d sites/frontend ]; then
echo '=== 创建新站点 frontend ===' &&
su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench && bench new-site --mariadb-user-host-login-scope="%" --admin-password=admin --db-root-username=root --db-root-password=admin --set-default frontend';
else
echo '=== 站点已存在,跳过创建 ===';
fi &&
if ! /usr/local/bin/check-assets.sh full; then
echo '=== 前端资产完整检查失败,开始自动修复 ===' &&
su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench/apps/frappe && unset NODE_ENV npm_config_production && yarn install --check-files' &&
su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench && bench build --force';
else
echo '=== 前端资产完整检查通过,跳过自动修复 ===';
fi &&
/usr/local/bin/check-assets.sh full &&
su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench && bench use frontend' &&
echo '=== 启动 ERPNext 服务 ===' &&
exec su -s /bin/bash frappe -c 'cd /home/frappe/frappe-bench && bench serve --host 0.0.0.0 --port 8000 --noreload'
"
# ============================================
# MariaDB 数据库
# ============================================
db:
image: mariadb:11.8
container_name: erpnext-db
restart: unless-stopped
networks:
- frappe_network
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
start_period: 10s
interval: 10s
timeout: 5s
retries: 5
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --skip-character-set-client-handshake
environment:
MYSQL_ROOT_PASSWORD: admin
MARIADB_ROOT_PASSWORD: admin
volumes:
- db-data:/var/lib/mysql
# ============================================
# Redis 缓存
# ============================================
redis-cache:
image: redis:6.2-alpine
container_name: erpnext-redis-cache
restart: unless-stopped
networks:
- frappe_network
volumes:
- redis-cache-data:/data
# ============================================
# Redis 队列
# ============================================
redis-queue:
image: redis:6.2-alpine
container_name: erpnext-redis-queue
restart: unless-stopped
networks:
- frappe_network
volumes:
- redis-queue-data:/data
# ============================================
# 数据卷定义
# ============================================
volumes:
db-data:
redis-cache-data:
redis-queue-data:
sites:
logs:
# ============================================
# 网络定义
# ============================================
networks:
frappe_network:
driver: bridge