
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本Docker镜像专为东非及非洲国家设计,集成了针对这些地区的特定模块,最初开发用于NethServer 8(NS8)的ERPNext模块(https://github.com/geniusdynamics/ns8-erp-next%EF%BC%89%E3%80%82%E8%AF%A5%E9%95%9C%E5%83%8F%E6%8F%90%E4%BE%9B%E5%8F%AF%E5%AE%9A%E5%88%B6%E7%9A%84ERPNext%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%EF%BC%8C%E4%BC%98%E5%8C%96%E4%BA%86NS8%E6%A8%A1%E5%9D%97%E7%8E%AF%E5%A2%83%EF%BC%8C%E5%90%8C%E6%97%B6%E4%B9%9F%E9%80%82%E7%94%A8%E4%BA%8E%E9%80%9A%E7%94%A8Docker%E5%9C%BA%E6%99%AF%E3%80%82
apps.json配置文件自动安装自定义Frappe应用ENABLE_AUTO_SITE(布尔值):设为true时,容器启动或执行create-site命令时自动创建站点并安装应用,默认falseSITES(字符串):逗号分隔的站点名称列表(如site1.localhost,site2.example.com),仅在ENABLE_AUTO_SITE=true时生效ADMIN_PASS(字符串):新创建Frappe站点的管理员密码,默认admincommon_site_config.json)以下变量通常由NS8或配置脚本用于填充sites/common_site_config.json,入口点脚本依赖此文件完成站点创建和服务启动:
DB_HOST:MariaDB/PostgreSQL服务器的主机名或IP地址DB_PORT:数据库服务器端口(如MariaDB默认3306)DB_USER:Frappe数据库用户(通常由bench创建)DB_PASSWORD:Frappe数据库用户密码common_site_config.json)REDIS_CACHE:缓存用Redis连接字符串(如redis://redis-cache:6379)REDIS_QUEUE:后台任务队列用Redis连接字符串(如redis://redis-queue:6379)REDIS_SOCKETIO:Socket.IO用Redis连接字符串(通常与REDIS_QUEUE相同)FRAPPE_SITE_NAME_HEADER(字符串):Nginx/代理用于确定请求站点名称的HTTP头(如$host、X-Frappe-Site-Name),多站点设置必备SOCKETIO_PORT(整数):Frappe Socket.IO服务监听端口(如9000)DEBUG_ENTRYPOINT(布尔值):设为true时,入口点脚本(entrypoint.sh)将启用set -x以输出详细调试日志镜像支持在构建时安装自定义Frappe应用,可通过仓库根目录的apps.json文件或指定URL实现。
apps.json在仓库根目录创建apps.json文件,构建过程会自动读取。示例:
json[ { "url": "https://github.com/frappe/erpnext", "branch": "version-15" }, { "url": "https://github.com/genforge/navari_csf_ke", "branch": "develop" }, { "url": "https://github.com/genforge/frappe-mpsa-payments", "branch": "develop" } ]
注:若省略
name字段,将从URL自动提取。确保构建时URL可访问。
APPS_JSON_URL构建参数构建时指定外部apps.json文件URL:
shelldocker build --build-arg APPS_JSON_URL="https://example.com/path/to/apps.json" -t geniusdynamics/erpnext:latest .
APPS_JSON_BASE64构建参数(传统方式)将apps.json内容编码为base64字符串传递:
shellexport APPS_JSON_BASE64=$(base64 -w 0 my_apps.json) docker build --build-arg APPS_JSON_BASE64=$APPS_JSON_BASE64 -t geniusdynamics/erpnext:latest .
应用安装由scripts/install_apps.sh脚本处理,通过bench get-app命令获取并安装应用。若apps.json格式错误,构建将失败。
scripts/entrypoint.sh)镜像使用scripts/entrypoint.sh作为主入口点,行为如下:
sites/common_site_config.json是否包含必要的数据库和Redis信息)ENABLE_AUTO_SITE=true且SITES已定义,通过scripts/create_site.sh创建站点并安装应用bench start,包含Gunicorn Web服务器和后台工作进程)通过docker exec触发站点创建/应用安装:
shelldocker exec <容器名称或ID> create-site
将使用SITES和ADMIN_PASS环境变量。
bench命令执行任意bench命令:
shelldocker exec <容器名称或ID> bench version docker exec <容器名称或ID> bench backup --with-files docker exec <容器名称或ID> bench migrate
配置完成后手动启动服务:
shelldocker exec <容器名称或ID> start # 或直接启动Gunicorn docker exec <容器名称或ID> gunicorn
仓库配置了GitHub Actions工作流(.github/workflows/autobuild.yml),触发条件:
main分支推送(针对Dockerfile、脚本、apps.json等相关文件)工作流会:
linux/amd64、linux/arm64)15.1.0、v15)并推送到Docker Hub(geniusdynamics/erpnext)和/或GitHub Container Registry(ghcr.io/geniusdynamics/erpnext)手动构建命令:
shelldocker build -t geniusdynamics/erpnext:custom .
可通过构建参数自定义:
FRAPPE_BRANCH:指定初始化bench的Frappe分支(如version-15),默认version-15ERPNEXT_VERSION:信息性参数,通常设为目标ERPNext标签,供GitHub Actions使用APPS_JSON_URL:外部apps.json文件URLAPPS_JSON_BASE64:base64编码的apps.json内容示例:
shelldocker build \ --build-arg FRAPPE_BRANCH="version-15" \ --build-arg ERPNEXT_VERSION="v15.10.0" \ --build-arg APPS_JSON_URL="https://example.com/apps.json" \ -t geniusdynamics/erpnext:latest .
docker run示例需提前准备运行中的MariaDB和Redis:
shelldocker run -d \ --name my-erpnext-app \ -p 8000:8000 \ -e ENABLE_AUTO_SITE=true \ -e SITES="myerp.localhost" \ -e ADMIN_PASS="securepassword" \ -e DB_HOST="your_db_host" \ -e DB_PORT="3306" \ -e REDIS_CACHE="redis://your_redis_cache_host:6379" \ -e REDIS_QUEUE="redis://your_redis_queue_host:6379" \ -e SOCKETIO_PORT="9000" \ -e FRAPPE_SITE_NAME_HEADER="myerp.localhost" \ -v erpnext_sites:/home/frappe/frappe-bench/sites \ -v erpnext_logs:/home/frappe/frappe-bench/logs \ geniusdynamics/erpnext:latest
注:完整部署需数据库(MariaDB/PostgreSQL)和Redis实例,仓库中的
docker-compose.yml提供完整示例。
仓库包含docker-compose.yml,用于多容器部署(适用于开发和测试),协调ERPNext应用容器与MariaDB、Redis服务。
使用步骤:
example.env创建.env文件并自定义变量(如SITES、ADMIN_PASS、MYSQL_ROOT_PASSWORD):
shellcp example.env .env # 编辑.env配置
shelldocker-compose up -d
common_site_config.json)入口点需要sites/common_site_config.json包含数据库和Redis信息才能创建站点或启动服务。若文件缺失或信息不全,需通过bench set-config设置:
shell# 等待容器启动后执行 docker-compose exec erpnext bench set-config -g db_host db docker-compose exec erpnext bench set-config -gp db_port 3306 # 确保为整数 docker-compose exec erpnext bench set-config -g redis_cache redis://redis-cache:6379 docker-compose exec erpnext bench set-config -g redis_queue redis://redis-queue:6379 docker-compose exec erpnext bench set-config -g redis_socketio redis://redis-queue:6379 docker-compose exec erpnext bench set-config -gp socketio_port 9000 # 确保为整数
之后触发站点创建:
shelldocker-compose exec erpnext create-site
或重启服务:
shelldocker-compose restart erpnext
CI工作流推送的镜像标签格式:
geniusdynamics/erpnext:<version>(如geniusdynamics/erpnext:15.1.0)geniusdynamics/erpnext:<major_version>(如geniusdynamics/erpnext:v15)GitHub Container Registry地址:ghcr.io/geniusdynamics/erpnext
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务