AI陪伴机器人生产部署清单-从云服务器到稳定运行
10-生产部署清单-从云服务器到稳定运行系列AI 伙伴AI-Partner——具身智能陪伴机器人 · 数据接口部署与二次开发篇10/12一、先说结论这套 Demo 距离生产差几步AI 伙伴AI-Partner的后端是一个克制、清晰的工程但它的默认配置是为本地跑通设计的。上生产前心里要有这张差距账均来自源码实证如实列出现状开发态默认生产要求风险jpa.hibernate.ddl-autoupdate改validateDDL 受控执行自动改表可能在生产造成意外结构变更所有接口无鉴权拦截器必须加鉴权任何拿到地址的人都能读写全库CORS 对/api/**全开收紧白名单任意网页可跨域调接口数据库默认账号 root/root专用账号 强口令弱口令等于送库actuator 只暴露 health,info按需保留禁止公网直连基线安全密钥全走环境变量保持并升级为密钥管理别写进代码库就行这篇就按从裸服务器到稳定运行的顺序把每一步讲透。二、服务器与系统准备机型入门 2核4G 可跑通全套后端 MySQL 视觉服务视觉服务吃 CPU/NPU预算紧可以把它放边缘设备。系统主流 Linux 发行版均可选你熟的。开启防火墙时只放行 80/4438080、3306、8000、1883 一律不对公网开放——数据库和 broker 只允许本机或内网访问。时间同步开启 NTP。系统提示词里会拼当前时间时区错了提醒全乱。三、JDK17 与 MySQL8 安装要点JDK用发行版仓库或压缩包方式装 JDK 17java -version确认。别装 21 再抱怨 weird 兼容性问题——项目基线就是 17。MySQL 8安装后立刻做三件事——改 root 强口令、建专用账号只授ai_partner库的权限、确认字符集 utf8mb4。建库语句沿用项目文档CREATEDATABASEai_partnerDEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;导表sql/init.sql。注意该脚本无外键、无种子数据表间关系靠 user_id/device_code 逻辑关联——备份和迁移时要把逻辑一致性当成自己的责任。四、DDL 从 update 切到 validate生产环境把spring.jpa.hibernate.ddl-auto改为validate启动时只校验实体和表结构是否匹配不自动改表。所有结构变更改走受控流程开发环境验证变更 → 2. 写成增量 SQL 脚本含回滚语句→ 3. 低峰期人工/流水线执行 → 4. 重启服务用 validate 校验。这一步必须配代码外置配置用application-prod.yml或启动参数--spring.jpa.hibernate.ddl-autovalidate覆盖不要直接改仓库里的默认值然后忘记。五、密钥与敏感配置的安全管理原则一句话密钥永远不进代码库。项目的约定本来就对——LLM_API_KEY、MYSQL_PASSWORD、DASHSCOPE_API_KEY等全部走环境变量。生产再加三道锁注入方式systemd 的EnvironmentFile权限 600属主运行账号或密钥管理服务各云厂商都有 KMS/凭据管理不要把密钥写进启动脚本再提交 git。最小权限LLM key 与语音 key 分开泄露时好排查、好吊销。轮换演练定期换 key 走一遍旧 key 下线、新 key 生效流程确认没有密钥被硬编码在某个角落。六、JVM 参数建议以 4G 内存机器、给后端 2G 堆为例示意java-Xms1g-Xmx2g\-Duser.timezoneAsia/Shanghai\-XX:UseG1GC\-XX:MaxGCPauseMillis200\-jarai-partner-backend.jar-Xms/-Xmx初始与最大堆设成一样可避免动态伸缩抖动这台服务对话链路有 LLM HTTP 等待堆不用贪大。-Duser.timezoneAsia/Shanghai强烈建议。提醒调度器每分钟扫描remindTime时区不对提醒就是灾难。GC 用 G1 即可这是 JDK17 的默认选择没有极端延迟需求不必上花活。七、systemd 托管服务别再用nohup java -jar 了挂了都没人拉。systemd 单元文件示意# /etc/systemd/system/ai-partner.service [Unit] DescriptionAI Partner Backend Afternetwork.target mysql.service [Service] Useraipartner WorkingDirectory/opt/aipartner EnvironmentFile/opt/aipartner/aipartner.env ExecStart/usr/bin/java -Xms1g -Xmx2g -Duser.timezoneAsia/Shanghai -jar ai-partner-backend.jar Restartalways RestartSec5 [Install] WantedBymulti-user.targetsystemctl daemon-reloadsystemctlenable--nowai-partner journalctl-uai-partner-f# 看日志要点专用低权用户运行、Restartalways自动拉起、Aftermysql.service保证数据库先起。视觉服务同理再写一个 unituvicorn app:app --host 127.0.0.1 --port 8000——注意生产上视觉服务只监听本机由后端内网调用。八、Nginx 反向代理与 HTTPSserver { listen 443 ssl; server_name your.domain; # ssl_certificate / ssl_certificate_key 按云厂商证书配置 location /api/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 60s; # 对话要等 LLM别设太短 } }要点HTTPS 必须语音、健康数据在裸 HTTP 上传输不可接受proxy_read_timeout放宽到 60s 以上因为/api/chat要同步等大模型返回若未来引入长连接语音流、WebSocket需要额外配proxy_http_version 1.1、Upgrade/Connection头并拉长读写超时——现在项目的阻塞式对话暂时用不到提前知道有这回事就行。九、MQTT brokerEMQX 部署要点端口 1883 只对内网开放设备在公网的话上 8883 TLS。开启鉴权至少账号密码认证进阶做一机一密 ACL限制每台设备只能发布/订阅自己的device/{code}/...主题。项目默认配置里 MQTT 账号密码为空生产必须改。EMQX 管理台18083改默认口令或干脆不对公网开放。十、日志、监控与告警日志后端日志级别已按包设置journalctl 或落盘均可建议加 logback 滚动策略磁盘别被日志撑爆。监控actuator 目前只暴露 health 和 info/actuator/health适合接探活云厂商健康检查、Uptime 机器人定时戳它。它的局限也要清楚——healthUP 只代表进程活着不代表 LLM key 有效、不代表 MQTT 通。更实质的探活建议写个定时任务调/api/ping甚至发起一次测试对话失败就告警短信/企微/钉钉任选。告警分级服务挂 → 立刻告LLM 连续 401 → 立刻告单次视觉调用超时 → 允许降级聚合后再告。注意项目当前告警工单t_alert只有落库、无短信/推送触达外部通知通道要自己补。十一、备份与恢复演练MySQL 定时备份每晚mysqldump --single-transaction ai_partner | gzip落盘并异地对象存储/另一台机同步保留 7~30 天。恢复演练每季度找台空机用备份文件完整恢复一次并起服务验证。没演练过的备份等于没有备份——备份成功 ≠ 能恢复这是两条独立的命。隐私数据的备份文件要加密存储里面是老人的健康与情绪记录属于敏感个人信息。十二、升级发布与回滚流程建议示意mvn clean package→ 新 jar 上传为ai-partner-backend-new.jar→ 停服务、备份旧 jar → 换名启动 →curl /api/ping验证 → 异常则换回旧 jar 秒级回滚。数据库变更与代码版本解耦先加兼容性变更新表、新列可空后上代码回滚代码不动数据库避免结构来回横跳。条件允许就上双实例 Nginx 切流单实例时代至少保证 jar 包可秒换。十三、上线前检查清单档位检查项必须关闭或收紧 CORS白名单替代全开必须加接口鉴权JWT/小程序登录态 管理端隔离当前所有接口裸奔必须修改默认数据库密码建专用最小权限账号必须配置LLM_API_KEY等全部密钥环境变量/密钥服务不进代码库必须ddl-auto改 validateDDL 受控必须HTTPS 证书就位8080/3306/8000/1883 不对公网开放必须数据库备份任务上线 完成一次恢复演练必须隐私合规用户授权告知、健康/情绪数据最小化收集、医疗免责声明AI 仅善意提醒不构成诊断建议systemd 托管 自动重启JVM 时区与堆参数固化建议MQTT 开鉴权与 TLSEMQX 管理台改口令建议告警通道服务探活、LLM 401 监控日志滚动与留存策略建议发布/回滚脚本化提醒下发失败重试当前失败仅记日志加分接口限流actuator 加独立端口与访问控制加分恢复演练常态化密钥轮换机制灰度发布最后提醒一句这个系统服务的是老人、孩子和独居者稳定运行不只是运维指标更是责任——你多做的每一项检查都是某位长辈跌倒时那条告警能送出去的概率。上线清单逐项打勾别图快。