01 当前结论
本版本已废止为执行入口。四方达当前架构为 1 台应用服务器 + 1 台独立数据库服务器,通过 ToDesk 跳板电脑后 SSH 登录,当前没有域名。请使用 双服务器部署准备包 和 V0.2 运行手册。
四方达目前只确认了容量基线,尚未确认 openEuler 完整版本、CPU 架构、RDS 类型/版本、代码分支、发布包哈希、业务标识、域名证书和 Redis 形态。因此本版可以指导准备与评审,但不能直接宣称“可上线”。
3000 人已确认容量档位
1 × ECS8 核 / 16 GB / 10 M / 500 GB
1 × RDS4 核 / 8 GB / 250 GB
02 部署目标与参考拓扑
目标范围包括 PC 管理端、手机端、AI 视觉与营养结算、条码结算、CPT-S30A × 1 和 CPT-GMPOS200 × 3,以及支撑这些能力的应用、数据库、任务、日志、备份与监控。
浏览器 / 手机 / 设备
域名 + HTTPS
ECS 应用节点
RDS 私网数据库
ECS 候选运行组件
Nginx Web 入口
PHP 7.3 主项目
PHP 7.4 AI API
Redis(本机候选)
Supervisor / Cron
业务代码与运行日志
单台 ECS 不具备应用高可用。若合同要求高可用,需另行增加负载均衡、双应用节点、共享文件或对象存储、集中 Redis 和无状态化设计。
03 滨州复用边界
| 可以参考 | 禁止照搬 |
|---|---|
| 应用与数据库分离的部署顺序 | 滨州 IP、域名、端口和项目路径 |
/workspace/wwwroot 目录组织 | bzjk 业务标识、数据库名和初始化数据 |
| Nginx + 双 PHP 的运行思路 | 数据库账号、Redis 口令及任何明文凭据 |
| Redis、扩展、Supervisor、Cron 检查方法 | 滨州 MySQL 本机安装步骤;四方达使用 RDS |
| 包哈希、配置回读、分层验收方法 | 固定表数量和滨州专属设备/菜品/商户数据 |
04 参数冻结与停止条件
| 参数 | 当前口径 | 状态 | 责任 |
|---|---|---|---|
| ECS 容量 | 8 核、16 GB、10 M、500 GB | 已确认 | 客户 IT |
| RDS 容量 | 4 核、8 GB、250 GB | 已确认 | 客户 IT |
| 系统与架构 | openEuler;24.03 LTS 官方来源已登记,最终版本和 x86/ARM 未定 | 待确认 | 研发 + 客户 IT |
| RDS 类型/版本/高可用 | 必须与 SQL 和驱动兼容 | 待确认 | 研发 + 客户 IT |
| 代码与发布包 | 仓库、分支、提交、版本、SHA256 | 待确认 | 研发 |
| 业务标识与数据库 | 使用四方达专属值,禁止沿用 bzjk | 待确认 | 研发 |
| 域名与 HTTPS | 正式域名、证书、回调地址 | 待确认 | 客户 IT |
| Redis | ECS 本机或独立托管实例 | 待确认 | 研发 + 客户 IT |
| 支付/账户/条码 | 业务与真实资金验收边界 | 待确认 | 产品 + 客户 + 研发 |
资源低于基线、包无 SHA256、系统/RDS 不兼容、数据库无备份、出现其他客户标识,或要求把秘密写入文档/Git 时,必须停止生产部署。
05 发布材料与凭据处理
每个安装包、应用包、SQL、配置包都必须登记名称、版本、来源、适用架构和 SHA256。摘要不匹配时不得解压。
mkdir -p /root/sifangda-deploy/packages
cd /root/sifangda-deploy/packages
sha256sum -c SHA256SUMS
- RDS 管理账号只用于建库、授权和迁移,不进入应用配置。
- 主业务库与 AI 业务库优先使用独立最小权限账号。
- Redis 口令、RDS 密码、OSS 密钥和证书私钥走密码管理器或受控秘密输入。
- 现场记录只保存“已配置/验证通过”和秘密指纹,不保存原文。
06 ECS 与 RDS 资源验收
ECS 回读
uname -m
cat /etc/os-release
lscpu
free -h
lsblk -f
df -hT
ip -br addr
ip route
timedatectl
RDS 回读
确认数据库完整版本、实例系列、高可用、字符集、时区、最大连接数、自动备份、手动快照、恢复入口、私网连通性、TLS 和告警责任人。
nc -vz __RDS_PRIVATE_HOST__ __RDS_PORT__
mysql --ssl-mode=PREFERRED \
-h __RDS_PRIVATE_HOST__ -P __RDS_PORT__ \
-u __DEPLOY_DB_USER__ -p \
-e "SELECT VERSION(), NOW();"
07 应用服务器环境
候选基线来自滨州实装:LNMP 2.2、Nginx 1.26.x、PHP 7.3.33、PHP 7.4.33、phpredis 5.3.5 兼容线、Mosquitto 扩展、Redis 和 Supervisor。四方达必须锁定具体版本、安装包和 SHA256 后再执行。
mkdir -p /workspace/wwwroot /workspace/wwwlogs
mkdir -p /workspace/releases /workspace/backups
mkdir -p /workspace/wwwroot/__MAIN_BUSINESS__/{current,project}
mkdir -p /workspace/wwwroot/__AI_BUSINESS__/{current,project}
mkdir -p /workspace/wwwroot/log/__MAIN_BUSINESS__/cron
mkdir -p /workspace/wwwroot/log/__AI_BUSINESS__/cron
chown -R www:www /workspace/wwwroot /workspace/wwwlogs
chmod 750 /workspace/backups
PHP 7.3 与 7.4 的扩展必须分别按各自 ABI 编译,不能跨版本复制 .so。
nginx -v
/usr/local/php/bin/php -v
/usr/local/php7.4/bin/php -v
/usr/local/php/bin/php -m | grep -Ei "pdo|mysql|redis|mosquitto"
/usr/local/php7.4/bin/php -m | grep -Ei "pdo|mysql|redis|mosquitto"
08 RDS 数据库初始化
- 确认自动备份,并创建手动快照或等效备份。
- 在同版本测试库完成一次全量导入与应用启动验证。
- 创建四方达专属主业务库、AI 业务库和最小权限账号。
- 使用受控秘密输入导入 SQL,不在命令行或文档记录密码。
- 按四方达发布清单核对表、字符集、SQL Mode 和业务初始化数据。
mysql -h __RDS_PRIVATE_HOST__ -P __RDS_PORT__ \
-u __DEPLOY_DB_USER__ -p \
__MAIN_DATABASE__ < __MAIN_INIT_SQL__
mysql -h __RDS_PRIVATE_HOST__ -P __RDS_PORT__ \
-u __DEPLOY_DB_USER__ -p \
__AI_DATABASE__ < __AI_INIT_SQL__
不得套用滨州固定表数量。组织、商户、business、设备、菜品和 OSS 配置中出现
bzjk 或其他客户标识时停止发布。09 版本化发布与配置回读
新版本目录
摘要与占位符检查
原子切换 current
冒烟与确认
上传到新版本目录,不覆盖当前版本。完成配置、依赖、RDS/Redis 连通性和静态资源检查后,再原子切换 current 软链接。
grep -RInE "__[A-Z0-9_]+__|bzjk|bziht" \
/workspace/wwwroot/__MAIN_BUSINESS__/current \
/workspace/wwwroot/__AI_BUSINESS__/current
主项目回读业务标识、RDS、Redis、AI API、日志、OSS、回调和时区;AI API 回读 AI/主业务关联、数据库、Redis、算法、相机、菜品、设备和消息服务。第三方秘密只验证指纹。
10 Nginx、Supervisor、Cron 与日志
Nginx / HTTPS
- 80 只跳转 HTTPS,443 作为正式入口。
- AI API 内部端口只监听
127.0.0.1。 - PHP 7.3 处理主项目,PHP 7.4 处理 AI API。
- 证书私钥仅 root 可读,不进入 Git 或文档。
nginx -t
ss -lntp | grep -E ":(80|443|__AI_INTERNAL_PORT__)[[:space:]]"
curl -kI --resolve "__SIFANGDA_DOMAIN__:443:127.0.0.1" \
"https://__SIFANGDA_DOMAIN__/"
Supervisor / Cron
只使用四方达专属配置;业务任务以 www 运行,明确单例、幂等、日志、告警和重启策略。
supervisorctl reread
supervisorctl update
supervisorctl status all
sleep 90
supervisorctl status all
crontab -l -u www
systemctl status crond --no-pager
11 分层验收与通过标准
基础设施层
Nginx / PHP-FPM / Supervisor / Cron 正常
Redis(如本机)仅绑定必要地址
ECS 到 RDS 私网与 TLS 可用
磁盘、内存、时间同步正常
应用层
登录页和静态资源正常
主项目连接 RDS、Redis、AI API
Supervisor 90 秒稳定复查通过
无跨域、证书、Mixed Content 错误
业务层
PC / 手机端登录与权限
组织、菜品、营养数据
CPT-S30A 相机、算法、学习识别
3 台 CPT-GMPOS200 登记与收银
条码、价格与异常码处理
支付/账户、退款和对账
支付方式、账户体系和条码规则未确认前,只能完成非资金链路验证,不得进行真实扣款。
12 回滚与常见问题
应用回滚
- 停止新版本 Supervisor 任务。
- 将
current切回上一已验证版本。 - 平滑重载 PHP-FPM 和 Nginx。
- 恢复上一版 Supervisor/Cron 配置并复测。
数据库回滚
不可逆迁移必须停止写入,由数据库管理员按 RDS 快照/备份恢复。应用回滚不等于数据库自动回滚,发布前须明确代码与数据库兼容矩阵。
排障顺序
| 问题 | 优先检查 |
|---|---|
| ECS 无法连接 RDS | 私网地址、VPC 路由、白名单、安全组、端口、TLS、账号 Host |
| Nginx 检查失败 | log_format、证书、include、FPM socket、重复端口、server_name |
| PHP 扩展异常 | ABI、php.ini 加载位置、重复 extension、依赖库 |
| Supervisor 反复退出 | PHP 路径、工作目录、占位符、RDS/Redis/消息服务、日志权限 |
| 页面正常但设备/AI 异常 | 设备网络 → 登记 → 算法激活 → 菜品同步 → business → 消息服务 → 日志 |
13 升级 V1.0 前必须确认
- ECS CPU 架构和 openEuler 完整版本。
- RDS 数据库类型、版本、高可用等级和备份恢复策略。
- 主项目、AI API、PC/手机端的仓库、分支、提交、版本和 SHA256。
- 主业务标识、AI 业务标识和两个数据库名。
- Redis 使用 ECS 本机还是独立托管实例。
- 正式域名、HTTPS 证书和外部回调地址。
- 支付方式、账户体系、商户和真实资金验收边界。
- 条码规则、商品/菜品映射和异常处理规则。
- AI 算法、相机、菜品库、设备初始化责任人与验收样本。
- RDS 备份保留期、RTO/RPO、监控告警和恢复责任人。
上述问题关闭后,由交付负责人把 Markdown 真源升级为 V1.0“现场执行版”,补齐实际参数、发布清单和验证证据,再进入生产实施。