JWT_SECRET(≥32 位随机串),以及首登后立刻修改 admin 默认密码。不设 JWT_SECRET 时容器会自动生成临时密钥,重启后旧 token 全部失效。
| 方式 | 依赖 | 适用 |
|---|---|---|
| Docker 部署 | Docker 20+ / Compose v2 | 生产与试跑,一条命令起全栈 |
| 手动部署 | Python 3.10+ · Node.js 18+ · MySQL 5.7+/8.x · Redis(可选) | 要接自研环境或改代码调试 |
| start.sh | 同上,本地已有 Node 与 Python | 本地开发、演示给客户看 |
拉起后端 + MySQL 8 + Redis + 管理后台 + 员工 H5。前端内置 nginx 自动把 /api 反代到后端,不需要另配。
git clone https://github.com/likele001/ cenkor_mes.git cd cenkor_mes docker compose up -d --build
首启自动建表并创建默认管理员。端口可在仓库根 .env 里用 APP_PORT / WEB_ADMIN_PORT / WEB_H5_PORT 覆盖。
| 服务 | 默认地址 |
|---|---|
| 后端 API(含 /docs) | http://localhost:8000 |
| 管理后台 | http://localhost:8080 |
| 员工 H5 | http://localhost:8081 |
幂等脚本,可重复执行。想先看效果再录真实数据的话用它最快。
bash docker/scripts/init-demo.sh
默认管理员 admin / admin123;演示数据账号 123456。两个都要改。
cd backend python -m venv venv && source venv/bin/activate pip install -r requirements.txt cp env.example .env # 编辑 DB_URL 与 JWT_SECRET uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
cd frontend-admin-pro npm install npm run dev -- --port 5174 # http://localhost:5174
cd frontend-h5 npm install npm run dev -- --port 5173 # http://localhost:5173
vite 开发代理默认把 /api 转发到 127.0.0.1:8000;端口被占用时可用 VITE_API_PROXY 指定其它后端地址。
./start.sh # dev:后端 :8000 + 后台 :5174 + H5 :5173 ./start.sh --prod # prod:后端无热重载,前端 build 后 preview 托管 BACKEND_PORT=8500 ./start.sh # 后端端口被占用时,前端自动跟随
容器内 nginx 已内置「静态托管 + /api 反代」,默认走 IP:端口。要对外用域名 + HTTPS,在宿主机加一层入口代理转发即可。
DNS 把两个子域名 A 记录指向服务器 IP → 加两个站点绑定域名 → 各自「反向代理」填 http://127.0.0.1:8080(后台)与 http://127.0.0.1:8081(H5)→ 站点 SSL 申请 Let's Encrypt 并强制 HTTPS。
反代到 127.0.0.1:8080 / 8081,用 certbot --nginx 自动签发证书。需要后端识别 HTTPS 时追加 proxy_set_header X-Forwarded-Proto https;,并把 PUBLIC_BASE_URL 指向 HTTPS 地址。
| 配置项 | 说明 |
|---|---|
JWT_SECRET | JWT 密钥。生产建议 ≥32 位随机串;缺失时容器入口自动生成临时密钥 |
DB_URL | MySQL 连接串 |
APP_PORT / WEB_ADMIN_PORT / WEB_H5_PORT | Docker 部署的对外端口 |
STORAGE_DRIVER | 本地磁盘 / 阿里云 OSS / 腾讯云 COS / 七牛 |
REDIS_URL / CELERY_* | 缓存与异步任务 |
TRUSTED_HOSTS | Host 白名单。配了就必须把域名加进去,否则访问被 403 拦 |
PUBLIC_BASE_URL / H5_PUBLIC_BASE_URL | 对外地址,影响生成链接的协议与域名 |
TRUSTED_HOSTS 细节见仓库 docs/DEPLOYMENT.md 第 4 节。扩展的安装、升级与卸载在管理后台「扩展管理」里操作,扩展包放在 mes-extensions/ 目录。
首启自动建表并创建 admin / admin123。可以直接登录看功能,但生产环境必须立刻改密码 —— 这个默认口令在文档里是公开的。
容器入口会自动生成一个临时随机密钥,保证一键能起。但容器重启后密钥变化,已签发的 token 全部失效,所有人都要重新登录。正式部署请在仓库根 .env 配固定的 32 位以上随机串。
在仓库根 .env 覆盖 APP_PORT、WEB_ADMIN_PORT、WEB_H5_PORT 后重启。开发模式下用 BACKEND_PORT=8500 ./start.sh,前端会自动跟随后端端口。
多半是配了 TRUSTED_HOSTS 但没把新域名加进去。这个变量是 Host 白名单,一旦设置就只放行名单内的 Host,把域名补进去再重启服务即可。
不能。独立版是单租户设计,一个实例服务一个法人主体,数据完全隔离在自己的库里。要多个主体就起多个实例 —— 这也是它简单、可控、好备份的原因。
手动部署时 Redis 可选,缓存与队列相关能力会降级;Docker Compose 已内置 Redis 7,不需要额外准备。生产环境建议保留,登录失败限流、异步任务都依赖它。
把扩展包放进 mes-extensions/,在管理后台「扩展管理」里安装。装的时候按 manifest 自动注册权限、菜单、迁移和前端插件,卸载时自动清理;扩展只通过事件总线和只读核心 API 与核心通信,不修改核心代码。
数据库结构变更走 Alembic 迁移,正常升级不会丢数据。但升级前请务必备份数据库 —— 迁移是单向的,降级不保证可逆。
自己厂里部署使用、改代码自用,没有对外提供服务的义务。若把修改后的系统作为网络服务对外提供,则需要按 AGPL-3.0 向使用者提供对应源码。具体以仓库 LICENSE 为准;二次开发与商业分发的边界建议咨询法务。