quality-inspection-platform/docs/deploy_server.md
qihongkun f5143aee09 feat: 添加 Docker 部署支持和 MCP 原生集成
- 添加 Dockerfile、docker-compose.yml 和 Jenkins 流水线配置
- 新增 MCP 原生集成模块 (mcp_native.py)
- 移除旧的 mcp_bridge.py,更新依赖和文档
- 添加部署文档 (Docker 和服务器部署指南)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-25 14:21:43 +08:00

12 KiB
Raw Blame History

服务器部署完整步骤Linux

本文假设在 一台内网 Linux 服务器 上从零部署,所有命令均在服务器上执行(通过 SSH 登录)。

  • 部署目录示例:/opt/quality-inspection-platform
  • 运行用户示例:qip(可改成你的业务用户)
  • 监听端口:8000(也可用 Nginx 反代 80/443

CentOS 7 用户

  • 推荐:用 Docker无需在宿主机装 Python 3.11 → deploy_docker.md
  • 裸机部署:系统自带 Python 3.6 不够用 → §1B CentOS 7,再从 §2 继续

0. 部署前确认

项目 要求
系统 CentOS 7(见 §1B或 Ubuntu 20.04+ / Debian 11+(见 §1A
Python 3.10+(必须,用于 mcp / FastAPI
Node 18+(仅构建 frontend-admin 时需要)
权限 sudo 安装软件、创建用户
网络 能访问内网 Gitnpm / pip 可用(或本机构建 dist 后上传)
磁盘 预留 ≥2GB

交付能力(一个 uvicorn 进程)

  • Web 管理端:http://<服务器>:8000/
  • API/api/*
  • MCPCursor/Codexhttp://<服务器>:8000/mcp
  • 数据文件:项目根目录 ai_test.dbSQLite需备份

1A. 安装系统依赖Ubuntu / Debian

sudo apt update
sudo apt install -y git curl ca-certificates \
  python3 python3-venv python3-pip \
  nodejs npm

检查版本:

python3 --version    # 须 >= 3.10
node --version       # 建议 >= 18

python3 低于 3.10,请安装更新的 Python 后再继续。
nodejs 过旧,改用 NodeSource 安装 18+。


1B. 安装系统依赖CentOS 7

CentOS 7 默认 python3 为 3.6无法直接运行本项目。推荐用 IUS 的 Python 3.11 + NodeSource 18

1B.1 基础工具与编译依赖

sudo yum install -y epel-release
sudo yum install -y git curl ca-certificates gcc make \
  openssl-devel bzip2-devel libffi-devel zlib-devel \
  readline-devel sqlite-devel

1B.2 安装 Python 3.11IUS

# 若服务器不能访问外网,请改用内网 yum 源或在本机构好 wheel 再上传
sudo yum install -y https://repo.ius.io/ius-release-el7.rpm
sudo yum install -y python311 python311-pip python311-devel

python3.11 --version    # 应显示 3.11.x

后续所有 python3 / pip 命令在 CentOS 7 上请写成 python3.11 / python3.11 -m pip

1B.3 安装 Node.js 18构建前端

curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs

node --version    # 应 >= v18
npm --version

无法访问 NodeSource 时:在开发机 npm run build 后,只把 frontend-admin/dist/ 上传到服务器,可跳过 Node 安装(见 §5 说明)。

1B.4(可选)用 SCL Python 3.8 的说明

部分环境只有 rh-python383.8),可能装不上新版 mcp 包。不推荐 CentOS 7 用 3.8 跑本仓库;请优先 3.11。


2. 创建运行用户与目录

sudo useradd -r -m -d /opt/qip -s /bin/bash qip 2>/dev/null || true
sudo mkdir -p /opt/quality-inspection-platform
sudo chown -R qip:qip /opt/quality-inspection-platform

后续命令用 qip 执行(或你自己的用户):

sudo -iu qip
cd /opt/quality-inspection-platform

3. 获取代码

方式 AGit推荐

cd /opt/quality-inspection-platform
git clone <你的内网仓库地址> .
# 或指定分支git clone -b main <url> .

方式 B上传压缩包

在本机打包后 scp 到服务器,再解压:

cd /opt/quality-inspection-platform
tar xzf quality-inspection-platform.tar.gz --strip-components=1

4. 安装 Python 依赖

cd /opt/quality-inspection-platform

# Ubuntu / Debian
python3 -m venv .venv

# CentOS 7IUS
# python3.11 -m venv .venv

source .venv/bin/activate

pip install --upgrade pip
pip install -r requirements.txt

# 验证关键包
python -c "import fastapi, mcp, uvicorn; print('python deps ok')"

CentOS 7 若 pip install 编译失败,确认已执行 §1B.1 的 gcc*-devel 包;或在内网配置 pip 镜像源。


5. 构建前端(生产必做)

cd /opt/quality-inspection-platform/frontend-admin

npm install
npm run build

cd ..
ls -la frontend-admin/dist/index.html

必须存在 frontend-admin/dist/index.html,否则浏览器访问 / 会提示前端未构建。

CentOS 7 未装 Node 时:在开发机构建后只上传 dist

cd frontend-admin && npm install && npm run build
scp -r dist qip@<服务器>:/opt/quality-inspection-platform/frontend-admin/

可选:构建完成后删除 node_modules 节省空间(以后升级需重新 npm install

rm -rf /opt/quality-inspection-platform/frontend-admin/node_modules

6. 配置环境变量

cd /opt/quality-inspection-platform
mkdir -p data/ssh-scripts

cat > /opt/quality-inspection-platform/.env <<'EOF'
# 生产务必修改下面三项
AUTH_TOKEN_SECRET=请替换为随机长字符串
DEFAULT_SUPERADMIN_USERNAME=admin
DEFAULT_SUPERADMIN_PASSWORD=请替换为强密码

# MCP强制所有工具带 API Key
MCP_REQUIRE_API_KEY=true

# 同事从其它机器用 Cursor 连 MCP 时,若连不上可开启:
QIP_MCP_DISABLE_DNS_PROTECTION=true
# 或精确白名单(二选一):
# QIP_MCP_ALLOWED_HOSTS=10.0.0.5:8000,qip.internal:8000
# QIP_MCP_ALLOWED_ORIGINS=http://10.0.0.5:8000

# 可选Loki 日志探索
# GENERAL_LOKI_EXPLORE_URL=https://grafana.example/explore
EOF

chmod 600 .env

.env 已在 .gitignore 中,不会进 Git。
uvicorn 默认不会自动读 .env;下面 systemd 示例用 EnvironmentFile 加载。


7. 首次试跑(前台)

cd /opt/quality-inspection-platform
source .venv/bin/activate

set -a
source .env
set +a

uvicorn app.main:app --host 0.0.0.0 --port 8000

另开一个 SSH 窗口自检:

curl -s http://127.0.0.1:8000/health
# 期望:{"ok":true}

curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8000/
# 期望200

浏览器访问:http://<服务器IP>:8000/
使用 .env 里的 DEFAULT_SUPERADMIN_USERNAME / DEFAULT_SUPERADMIN_PASSWORD 登录。

确认无误后,在前台试跑窗口 Ctrl+C 停止,进入第 8 步配置 systemd。


8. 配置 systemd 常驻

sudo tee /etc/systemd/system/quality-inspection-platform.service <<'EOF'
[Unit]
Description=Quality Inspection Platform
After=network.target

[Service]
Type=simple
User=qip
Group=qip
WorkingDirectory=/opt/quality-inspection-platform
EnvironmentFile=/opt/quality-inspection-platform/.env
Environment=PATH=/opt/quality-inspection-platform/.venv/bin:/usr/bin:/bin
ExecStart=/opt/quality-inspection-platform/.venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable quality-inspection-platform
sudo systemctl start quality-inspection-platform
sudo systemctl status quality-inspection-platform

查看日志:

journalctl -u quality-inspection-platform -f

9. 防火墙(按需)

CentOS 7firewalld — 仅内网访问 8000

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="8000" accept'
sudo firewall-cmd --reload

若用 Nginx 对外 80

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

Ubuntuufw

sudo ufw allow from 10.0.0.0/8 to any port 8000 proto tcp
sudo ufw reload

若前面有 Nginx 对外 80/443则只开放 80/443不要把 8000 暴露到公网。


10. Nginx 反向代理(可选)

适用于希望用域名访问、或只暴露 80/443 的场景。

# Ubuntu / Debian
sudo apt install -y nginx

# CentOS 7
sudo yum install -y nginx
sudo systemctl enable nginx
sudo tee /etc/nginx/sites-available/quality-inspection-platform <<'EOF'
server {
    listen 80;
    server_name qip.internal;   # 改成你的域名或 IP

    client_max_body_size 50m;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        # MCP Streamable HTTP 可能需要较长连接
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}
EOF

sudo ln -sf /etc/nginx/sites-available/quality-inspection-platform /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

此时访问地址变为:http://qip.internal/
MCP URLhttp://qip.internal/mcp

可将 systemd 里 uvicorn 改为只监听本机:

ExecStart=.../uvicorn app.main:app --host 127.0.0.1 --port 8000

11. 同事配置 MCP不在服务器装 Python

每人本机 Cursor ~/.cursor/mcp.json

{
  "mcpServers": {
    "quality-inspection-platform": {
      "url": "http://qip.internal/mcp",
      "headers": {
        "Authorization": "Bearer sto-个人API密钥"
      }
    }
  }
}
  • sto- Key登录 Web → 个人中心创建
  • 详细说明:mcp_install.md

12. 数据备份

数据库与上传的 SSH 脚本目录:

# 示例:每日备份 cron
0 2 * * * qip cp /opt/quality-inspection-platform/ai_test.db /opt/qip/backup/ai_test.db.$(date +\%Y\%m\%d)

升级代码时不要覆盖 已有 ai_test.db


13. 版本升级流程

sudo systemctl stop quality-inspection-platform

sudo -iu qip
cd /opt/quality-inspection-platform

# 备份
cp -a ai_test.db ai_test.db.bak.$(date +%Y%m%d)

# 拉代码
git pull

source .venv/bin/activate
pip install -r requirements.txt

cd frontend-admin
npm install
npm run build
cd ..

exit
sudo systemctl start quality-inspection-platform
curl -s http://127.0.0.1:8000/health

14. 验收清单

# 检查 命令/操作
1 服务运行 systemctl is-active quality-inspection-platform
2 健康检查 curl -s http://127.0.0.1:8000/health
3 Web 首页 浏览器打开 /,能登录
4 API 文档 http://<主机>:8000/docs
5 MCP 工具列表 curl -s http://127.0.0.1:8000/mcp/tools -H "Authorization: Bearer sto-xxx"
6 改密 登录后修改超管密码API Key 仅个人保管
7 防火墙 仅内网可达

15. 常见问题

现象 处理
访问 / 提示 frontend dist not found 重新执行第 5 步 npm run build,或上传 frontend-admin/dist
ModuleNotFoundError: mcp 第 4 步 pip install -r requirements.txtCentOS 7 须用 3.11 的 venv
CentOS 7 python3 是 3.6 不要用系统 python3,改用 python3.11 建 venv
pip 编译卡住 / 失败 yum install §1B.1 开发包;配置内网 pip 镜像
IUS / NodeSource 无法访问 内网 yum 镜像;或本机构建 dist + 离线 wheel 装 Python 包
MCP 在 Cursor 里连不上 .envQIP_MCP_DISABLE_DNS_PROTECTION=true 或配置 QIP_MCP_ALLOWED_HOSTS
401 / 无 Key Web 个人中心创建 sto- Key或设 MCP_REQUIRE_API_KEY 后请求头带 Bearer
端口被占用 ss -lntp | grep 8000 查占用进程
权限错误 确认 ai_test.dbdata/ 目录属主为 qip
SELinux 拦截CentOS 临时:sudo setenforce 0 排查;长期:setsebool -P httpd_can_network_connect 1 或按策略放行

16. 相关文档

文档 内容
mcp_install.md MCP / Cursor / 内网排障
mcp_tools_for_ai.md AI 工具能力与 Recipe
mcp_quickstart.md curl / HTTP 网关示例

快速命令抄录(已装好环境后)

cd /opt/quality-inspection-platform && source .venv/bin/activate
git pull && pip install -r requirements.txt
cd frontend-admin && npm install && npm run build && cd ..
sudo systemctl restart quality-inspection-platform