首页/部署指南

装到自己的服务器上

三种方式:Docker Compose 一键起全栈(推荐)、手动分别启动、start.sh 本地开发模式。环境好的话,从克隆到能登录十分钟以内。

⚠️ 生产环境务必做两件事:设置固定 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本地开发、演示给客户看

方式一:Docker 一键启动 推荐

1

克隆并启动

拉起后端 + MySQL 8 + Redis + 管理后台 + 员工 H5。前端内置 nginx 自动把 /api 反代到后端,不需要另配。

bash
git clone https://github.com/likele001/cenkor_mes.git
cd cenkor_mes
docker compose up -d --build
2

确认端口与访问地址

首启自动建表并创建默认管理员。端口可在仓库根 .env 里用 APP_PORT / WEB_ADMIN_PORT / WEB_H5_PORT 覆盖。

服务默认地址
后端 API(含 /docs)http://localhost:8000
管理后台http://localhost:8080
员工 H5http://localhost:8081
3

(可选)注入演示数据

幂等脚本,可重复执行。想先看效果再录真实数据的话用它最快。

bash
bash docker/scripts/init-demo.sh

默认管理员 admin / admin123;演示数据账号 123456。两个都要改。

方式二:手动启动

1

后端

bash
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
2

PC 管理后台

bash
cd frontend-admin-pro
npm install
npm run dev -- --port 5174   # http://localhost:5174
3

员工 H5

bash
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 本地开发 / 演示

bash
./start.sh                       # dev:后端 :8000 + 后台 :5174 + H5 :5173
./start.sh --prod              # prod:后端无热重载,前端 build 后 preview 托管
BACKEND_PORT=8500 ./start.sh     # 后端端口被占用时,前端自动跟随

绑定域名与 HTTPS Docker 部署 · 可选

容器内 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。

🛠️

系统 Nginx

反代到 127.0.0.1:8080 / 8081,用 certbot --nginx 自动签发证书。需要后端识别 HTTPS 时追加 proxy_set_header X-Forwarded-Proto https;,并把 PUBLIC_BASE_URL 指向 HTTPS 地址。

常用配置项(.env)

配置项说明
JWT_SECRETJWT 密钥。生产建议 ≥32 位随机串;缺失时容器入口自动生成临时密钥
DB_URLMySQL 连接串
APP_PORT / WEB_ADMIN_PORT / WEB_H5_PORTDocker 部署的对外端口
STORAGE_DRIVER本地磁盘 / 阿里云 OSS / 腾讯云 COS / 七牛
REDIS_URL / CELERY_*缓存与异步任务
TRUSTED_HOSTSHost 白名单。配了就必须把域名加进去,否则访问被 403 拦
PUBLIC_BASE_URL / H5_PUBLIC_BASE_URL对外地址,影响生成链接的协议与域名
ℹ️ 完整配置示例与 TRUSTED_HOSTS 细节见仓库 docs/DEPLOYMENT.md 第 4 节。扩展的安装、升级与卸载在管理后台「扩展管理」里操作,扩展包放在 mes-extensions/ 目录。

常见问题

首启默认账号是什么?可以直接用吗?

首启自动建表并创建 admin / admin123。可以直接登录看功能,但生产环境必须立刻改密码 —— 这个默认口令在文档里是公开的。

没设 JWT_SECRET 会怎样?

容器入口会自动生成一个临时随机密钥,保证一键能起。但容器重启后密钥变化,已签发的 token 全部失效,所有人都要重新登录。正式部署请在仓库根 .env 配固定的 32 位以上随机串。

8080 / 8000 端口被别的服务占了怎么办?

在仓库根 .env 覆盖 APP_PORT、WEB_ADMIN_PORT、WEB_H5_PORT 后重启。开发模式下用 BACKEND_PORT=8500 ./start.sh,前端会自动跟随后端端口。

绑了域名后访问 403?

多半是配了 TRUSTED_HOSTS 但没把新域名加进去。这个变量是 Host 白名单,一旦设置就只放行名单内的 Host,把域名补进去再重启服务即可。

能不能一套跑多个工厂 / 多个租户?

不能。独立版是单租户设计,一个实例服务一个法人主体,数据完全隔离在自己的库里。要多个主体就起多个实例 —— 这也是它简单、可控、好备份的原因。

Redis 是必须的吗?

手动部署时 Redis 可选,缓存与队列相关能力会降级;Docker Compose 已内置 Redis 7,不需要额外准备。生产环境建议保留,登录失败限流、异步任务都依赖它。

扩展怎么装?会不会影响核心?

把扩展包放进 mes-extensions/,在管理后台「扩展管理」里安装。装的时候按 manifest 自动注册权限、菜单、迁移和前端插件,卸载时自动清理;扩展只通过事件总线和只读核心 API 与核心通信,不修改核心代码。

升级会不会丢数据?

数据库结构变更走 Alembic 迁移,正常升级不会丢数据。但升级前请务必备份数据库 —— 迁移是单向的,降级不保证可逆。

AGPL-3.0 意味着什么?内部使用要开源吗?

自己厂里部署使用、改代码自用,没有对外提供服务的义务。若把修改后的系统作为网络服务对外提供,则需要按 AGPL-3.0 向使用者提供对应源码。具体以仓库 LICENSE 为准;二次开发与商业分发的边界建议咨询法务。

起不起来,跑一遍就知道

一条命令,十分钟内能看到管理后台和 H5 报工界面。跑完觉得不合适,删容器就行,不留痕迹。