如何完成PaiAgent生产部署:JWT认证、环境变量与敏感配置完全指南
【免费下载链接】PaiAgent🔥轻量级的AI工作流编排系统,类似dify、n8n,全程使用Vibe Coding,AI工具为Qoder+CLI。涉及到的技术栈包括SpringAI、LangGraph4J、SSE、MinIO、DAG自定引擎等。项目地址: https://gitcode.com/javabetter/PaiAgent
PaiAgent是一个轻量级 AI 工作流编排系统,类似 Dify、n8n,基于 Spring Boot + Spring AI + LangGraph4J 构建。很多同学在把它部署到生产环境时,最头疼的就是敏感配置管理:数据库密码、MinIO 凭证、JWT 密钥、默认管理员账户……一旦配置不当,轻则登录态异常,重则被弱口令直接打穿。这篇文章就带你一次讲透PaiAgent 生产部署中的JWT 认证机制、环境变量配置与敏感信息加固,零基础也能照着完成上线。
如上图,前端LoginPage负责认证入口,请求经后端Controller → Service链路落到 MySQL。理解这张分层图后,你就能明白为什么认证拦截器和密钥配置如此关键。
一、先看全局:PaiAgent 的部署组件
生产部署 PaiAgent 时,你至少会接触以下组件:
| 组件 | 作用 | 关键环境变量 |
|---|---|---|
| 后端 Spring Boot 服务 | 工作流引擎、认证、API | SERVER_PORT、JWT_SECRET |
| MySQL | 工作流配置、执行记录 | MYSQL_HOST、MYSQL_PASSWORD |
| Redis | Refresh Token 存储 | REDIS_HOST、REDIS_PASSWORD |
| MinIO | 对象存储(音频、图片) | MINIO_ACCESS_KEY、MINIO_SECRET_KEY |
| 前端 React 应用 | 可视化编排界面 | VITE_API_BASE_URL |
后端通过 backend/.env.example 提供了一份环境变量模板,所有敏感项都可以用变量名:默认值的方式在 application.yml 中占位注入。
登录成功后,就是这个拖拽式的工作流编排界面——但请注意,没带合法 JWT Token 的请求连这里都进不去。
二、PaiAgent 的 JWT 认证机制:双 Token 怎么运作?
PaiAgent 采用Access Token + Refresh Token 双令牌方案,核心代码在 AuthService.java:
- Access Token:标准 JWT,默认有效期120 分钟,由
JWT_SECRET签名。每个 API 请求都通过Authorization: Bearer <token>头携带; - Refresh Token:随机 UUID,存入 Redis(默认168 小时过期),到期后用它换新 Token 对,且旧 Token 立即作废,防止重放;
- 拦截器兜底:AuthInterceptor.java 对
/api/**全量拦截(登录、刷新接口除外),Token 缺失或验签失败直接返回 401。
💡 关键认知:
JWT_SECRET就是整个登录体系的"印章"。谁拿到这个密钥,谁就能伪造任意用户的合法 Token。所以它是生产部署中优先级最高的加固项。
三、环境变量配置速查表(生产版)
把backend/.env.example复制为backend/.env(该文件已加入.gitignore,不会被误提交),然后按下表逐项确认:
| 环境变量 | 必填 | 生产建议 |
|---|---|---|
JWT_SECRET | ✅ | 32 位以上随机字符串,绝不用默认值 |
MYSQL_PASSWORD | ✅ | 强密码,禁用123456、root |
REDIS_HOST/REDIS_PORT | ✅ | 指向真实 Redis 集群,建议设密码 |
MINIO_ACCESS_KEY/MINIO_SECRET_KEY | ✅ | 禁用默认的minioadmin/minioadmin |
APP_AUTH_DEFAULT_USERNAME | ⚠️ | 留空可彻底禁用默认管理员 |
APP_AUTH_DEFAULT_PASSWORD | ⚠️ | 如保留默认账户,务必换强密码 |
SERVER_PORT | 可选 | 默认 8084,按网关规划调整 |
一个稳妥的JWT_SECRET生成方式:
openssl rand -base64 32四、JWT_SECRET 的三个安全关卡
PaiAgent 在密钥处理上做了三层防护,源码位于 JwtSecretProvider.java:
- 弱密钥黑名单:内置了 8 个常见弱值(如
secret、123456、仓库默认值等),命中即视为未配置; - 本地开发兜底:如果检测到是本地环境(激活
local/devProfile、devtools 开启、或数据库指向 localhost),会自动用SecureRandom生成一把 48 字节临时密钥,让你开发时不被拦住; - 生产环境零容忍:只要激活了
prod或productionProfile,缺密钥直接用默认值启动会抛出异常,服务起不来——这是故意的"熔断"设计,避免裸奔上线。
这些实时执行的 SSE 流日志,同样跑在受 JWT 保护的 API 之上,登录态失效时整条链路都会 401。
五、默认管理员账户:禁用或加固
这是新手最容易忽视的坑。默认值如下(见 application.yml 第 80-84 行):
| 账户 | 默认值 | 风险 |
|---|---|---|
| 用户名 | admin | 配合弱口令可被爆破 |
| 密码 | admin123 | 属于公网高频撞库组合 |
两种处理方式二选一:
- 方案 A(推荐):将
APP_AUTH_DEFAULT_USERNAME和APP_AUTH_DEFAULT_PASSWORD都留空,彻底禁用默认账户; - 方案 B:保留默认账户,但替换为 8 位以上复杂密码,且启动日志里弱密码检查会持续提醒你。
六、启动自检:ConfigValidationRunner 帮你最后一道把关
服务每次启动时,ConfigValidationRunner.java 会自动执行 4 项安全巡检,并把结果打印到启动日志:
- 🔐JWT 密钥检查:未配置 → 报错退出;弱密钥 → 报错退出;长度不足 32 → 警告;
- 🗄️数据库密码检查:弱密码警告;数据库拒绝空密码时直接阻断启动;
- 📦MinIO 凭证检查:检测到
minioadmin/minioadmin会明确警告"生产环境必须修改"; - 👤默认账户检查:弱组合(admin/admin 等)高亮警告。
上线路径很简单:启动一次,盯住日志。只要没有❌报错、警告项都已按上文处理,就可以放心接流量。
七、生产部署最终清单 ✅
- 克隆仓库:
git clone https://gitcode.com/javabetter/PaiAgent - 复制
backend/.env.example为.env,按第三节表格填写所有强凭证 - 激活生产 Profile 并显式注入
JWT_SECRET(openssl rand -base64 48) - 禁用或加固默认管理员账户
- 启动服务,逐条核对 ConfigValidationRunner 的输出
- 前端通过
VITE_API_BASE_URL指向真实后端地址 - 验证:无 Token 访问
/api/workflows应返回 401,默认弱口令登录应失败
写在最后
生产部署的本质不是"能跑起来",而是把每一个默认值都换成只有你知道的值。PaiAgent 已经把 JWT 双令牌、弱密钥熔断、启动自检这些防线替你在代码里焊好了,你要做的,就是认真填好.env里的那些空。完成这篇文章的配置后,你的 PaiAgent 就具备了面向生产环境的完整认证与安全基线 🚀
【免费下载链接】PaiAgent🔥轻量级的AI工作流编排系统,类似dify、n8n,全程使用Vibe Coding,AI工具为Qoder+CLI。涉及到的技术栈包括SpringAI、LangGraph4J、SSE、MinIO、DAG自定引擎等。项目地址: https://gitcode.com/javabetter/PaiAgent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考