Congcong Backend Environment Report

正式环境与预发环境对比文档

记录 2026-06-29 服务器上正式生产、预发测试、数据库隔离、部署流程与 MCP 排查现状。

更新时间:2026-06-29 正式服务:congcong-api 预发服务:congcong-staging-api 预发端口:8002 预发前端目录:/www/wwwroot/staging.florist-saas.com

一、结论

当前服务器已经形成两套后端运行环境。

环境用途状态
正式生产对外真实业务运行已存在,继续使用 congcong-api
预发 / 测试开发联调、上线前验收已创建并启动 congcong-staging-api

预发环境不是复用正式数据库,而是复制正式库后使用独立数据库 congcong_staging,并使用独立 MySQL 用户、独立 Redis DB、独立 .venv 和独立 Supervisor 服务。

二、后端服务对比

项目正式生产预发 / 测试
代码目录/opt/congcong/backend/opt/congcong-staging/backend
Supervisor 服务名congcong-apicongcong-staging-api
本机监听端口127.0.0.1:8000127.0.0.1:8002
健康检查http://127.0.0.1:8000/healthhttp://127.0.0.1:8002/health
Gunicorn 配置/opt/congcong/deploy/gunicorn.conf.py/opt/congcong-staging/deploy/gunicorn.conf.py
日志目录/var/log/congcong/var/log/congcong-staging
Python 虚拟环境/opt/congcong/backend/.venv/opt/congcong-staging/backend/.venv
.venv 关系独立独立,已不再软链正式环境
调度器正常开启DISABLE_SCHEDULER=true,默认禁用
supervisorctl status congcong-staging-api
# congcong-staging-api RUNNING

curl -sS http://127.0.0.1:8002/health
# {"status":"ok"}

三、数据库对比

项目正式生产预发 / 测试
MySQL 实例同一台服务器 MySQL同一台服务器 MySQL
数据库名congcongcongcong_staging
连接用户congcongcongcong_staging
连接地址121.41.105.67:3306 / 线上配置127.0.0.1:3306
数据来源真实生产数据congcong 全量复制
表数量核对8787
DATABASE_URL=mysql+aiomysql://congcong_staging:<staging_password>@127.0.0.1:3306/congcong_staging?charset=utf8mb4

四、Redis 对比

项目正式生产预发 / 测试
REDIS_URLredis://127.0.0.1:6379/0redis://127.0.0.1:6379/6
CELERY_BROKER_URLredis://.../1redis://127.0.0.1:6379/7
CELERY_RESULT_BACKENDredis://.../2redis://127.0.0.1:6379/8
WS_DEVICE_REDIS_URLredis://127.0.0.1:6379/15redis://127.0.0.1:6379/14

预发环境与正式环境 Redis DB 已隔离,避免 WebSocket 设备注册、Celery 任务结果、普通缓存互相污染。

五、部署方式对比

项目正式生产预发 / 测试
部署脚本/opt/congcong/deploy/deploy_backend.sh/opt/congcong/deploy/deploy_backend_staging.sh
管理前端发布方式/opt/congcong/deploy/deploy_frontend_v2.shfrontend-v2 Webhook本地执行 frontend-v2/deploy/deploy_frontend_v2_staging_local.ps1 打包上传到 /www/wwwroot/staging.florist-saas.com
默认分支mainmain
迁移命令.venv/bin/alembic upgrade heads.venv/bin/alembic upgrade heads
重启服务congcong-apicongcong-staging-api
健康检查端口80008002
ssh root@121.41.105.67 "bash /opt/congcong/deploy/deploy_backend.sh"
ssh root@121.41.105.67 "bash /opt/congcong/deploy/deploy_backend_staging.sh"

5.1 预发布前端部署

https://staging.florist-saas.com/ 是预发布前端访问域名;它对应的服务器静态部署目录是 /www/wwwroot/staging.florist-saas.com

预发布前端不发布到 /opt/congcong-staging/backend,也不是只配置后端端口。前端 frontend-v2 本地打包后,把 dist/ 覆盖到 /www/wwwroot/staging.florist-saas.com,Nginx 再把同一域名下的 API/WS 请求转发到预发布后端。

项目
前端访问域名https://staging.florist-saas.com/
前端静态部署目录/www/wwwroot/staging.florist-saas.com
推荐部署脚本frontend-v2/deploy/deploy_frontend_v2_staging_local.ps1
备用服务器构建脚本/opt/congcong/deploy/deploy_frontend_v2_staging.sh
API Basehttps://staging.florist-saas.com/api/v1
WebSocket eventswss://staging.florist-saas.com/ws/events
WebSocket devicewss://staging.florist-saas.com/ws/device
cd D:\deliverables\flowerShop\frontend-v2
powershell -ExecutionPolicy Bypass -File .\deploy\deploy_frontend_v2_staging_local.ps1

5.2 前端部署对比

项目正式生产前端预发布前端
前端仓库frontend-v2 / congcong-admin.gitfrontend-v2 / congcong-admin.git
访问域名https://platform.florist-saas.com/https://staging.florist-saas.com/
静态部署目录/www/wwwroot/platform.florist-saas.com/www/wwwroot/staging.florist-saas.com
主要部署方式服务器执行 /opt/congcong/deploy/deploy_frontend_v2.shfrontend-v2 Webhook本地执行 frontend-v2/deploy/deploy_frontend_v2_staging_local.ps1 打包上传
备用部署方式无需备用,按正式脚本从 git commit 构建服务器执行 /opt/congcong/deploy/deploy_frontend_v2_staging.sh 从 git commit 构建
构建产物dist/dist/
API Basehttps://platform.florist-saas.com/api/v1https://staging.florist-saas.com/api/v1
WebSocket eventswss://platform.florist-saas.com/ws/eventswss://staging.florist-saas.com/ws/events
WebSocket devicewss://platform.florist-saas.com/ws/devicewss://staging.florist-saas.com/ws/device
后端转发目标127.0.0.1:8000127.0.0.1:8002
客户端路径策略保持 /api/v1/ws/...保持 /api/v1/ws/...,只换域名

预发布前端的核心区别是“静态目录换成 /www/wwwroot/staging.florist-saas.com,后端转发换成 127.0.0.1:8002”。业务路径不改,避免客户端测试时还要改 URL path。

六、Webhook 对比

项目正式生产预发 / 测试
后端部署接口POST /api/v1/webhooks/deploy/backendPOST /api/v1/webhooks/deploy/backend-staging
执行脚本配置项DEPLOY_BACKEND_SCRIPTDEPLOY_BACKEND_STAGING_SCRIPT
TokenDEPLOY_WEBHOOK_TOKEN预发 .env 内独立生成

backend-staging 只用于区分“部署预发后端”的 Webhook,不是业务 API 或客户端 WebSocket 路由。业务侧预发访问仍保持与正式一致的路径,只需要把域名从 platform.florist-saas.com 换成 staging.florist-saas.com,例如 /api/v1/.../ws/... 都不需要改路径。

七、服务器域名与 Nginx

7.1 部署服务器

项目
服务器公网 IP121.41.105.67
SSH 登录root@121.41.105.67
Nginx vhost 目录/www/server/panel/vhost/nginx
正式后端本机地址127.0.0.1:8000
预发后端本机地址127.0.0.1:8002

7.2 正式生产已部署域名

域名用途静态目录 / 服务后端转发
https://platform.florist-saas.com平台管理后台(当前权威入口)/www/wwwroot/platform.florist-saas.com/api//ws//docs/redoc/openapi.json 转发到 127.0.0.1:8000
https://admin.florist-saas.com历史 / 兼容后台入口/opt/congcong/frontend/dist/api//ws//docs/redoc/health 转发到 congcong-api upstream,即 127.0.0.1:8000
https://b.florist-saas.com苁丛内容管家前端/www/wwwroot/congcong-content-managemen/dist-prod/api/ 转发到 127.0.0.1:8000
https://c.florist-saas.com商家助手前端/www/wwwroot/c.florist-saas.com/current/api//uploads//ws/ 转发到 127.0.0.1:8000
https://d.florist-saas.comAI Agent / DeerFlow前端代理到 127.0.0.1:3000/api//api/langgraph//health 转发到 127.0.0.1:18001
https://florist-saas.com / https://www.florist-saas.com官网 / 首页/www/wwwroot/www.florist-saas.com当前未发现后端代理
https://a.florist-saas.com独立静态站点宝塔 vhost:html_a.florist-saas.com.conf当前未发现后端代理

7.3 预发公网域名状态

域名目标当前状态
https://staging.florist-saas.com预发平台管理后台,/api//ws//uploads//health 转发到 127.0.0.1:8002已配置 DNS / Nginx / HTTPS

7.4 客户端路径保持一致

类型正式生产预发 / 测试
API Basehttps://platform.florist-saas.com/api/v1https://staging.florist-saas.com/api/v1
WebSocket eventswss://platform.florist-saas.com/ws/eventswss://staging.florist-saas.com/ws/events
WebSocket devicewss://platform.florist-saas.com/ws/devicewss://staging.florist-saas.com/ws/device

当前预发后端已经确认服务器本机与公网域名访问正常。正式域名和预发域名按 Nginx server_name 分流:正式 /api//ws/ 仍走 127.0.0.1:8000;只有 staging.florist-saas.com127.0.0.1:8002,不存在端口冲突。

八、已实施事项

项目状态
创建 /opt/congcong-staging/backend已完成
创建 congcong_staging 数据库已完成
从正式库复制到预发库已完成
创建独立 MySQL 用户 congcong_staging已完成
配置预发 Redis DB已完成
配置预发 .env已完成
创建预发 Supervisor 服务已完成
创建预发 Gunicorn 配置已完成
创建独立 .venv已完成
启动 congcong-staging-api已完成
健康检查已通过
Nginx 预发域名 staging.florist-saas.com已完成
本地改动提交 git未完成

九、MCP 排查现状

检查项结果
Supervisor 中 MCP 服务未发现
systemd 中 MCP 服务未发现
Docker / pm2 中 MCP 服务未发现
运行中的 MCP 进程未发现
AI Agent 目录/opt/congcong/congcong-ai-agent 存在
MCP 文档/opt/congcong/congcong-ai-agent/backend/docs/MCP_SERVER.md 存在
MCP 配置文件/opt/congcong/congcong-ai-agent/extensions_config.json 存在
"mcpServers": {}

示例配置中保留了 githubpostgres 两个默认禁用的 MCP 配置。当前能确认的是:AI Agent 项目支持 MCP,但线上没有启用 MCP server,也没有发现独立 MCP 服务进程。

十、下一步建议

优先级事项说明
P0提交本地 staging 改动保证脚本、文档、Webhook 代码和 Nginx 模板进入 git
P1明确要恢复的 2 个 MCP 名称当前只能看到示例 github / postgres
P1恢复 MCP 配置明确 MCP 名称和凭据后,写入 extensions_config.json 并重启 AI Agent
P2定期刷新 staging 数据根据测试节奏决定是否从正式库重新同步