深浅色
密钥与安全边界
这一篇是干什么的:讲清楚系统里的"钥匙"有哪些、放在哪、丢了怎么办。负责装系统的人务必读完。

系统的"钥匙"有哪些
| 钥匙 | 开什么锁 | 存在哪 |
|---|---|---|
| 数据库密码 | 打开数据仓库 | deploy/runtime.env |
| 缓存密码 | 打开缓存服务 | deploy/runtime.env |
| 登录令牌密钥 | 给登录凭证签名 | deploy/runtime.env |
| 管理员初始密码 | 第一次登录 | 只显示一次,存保险库 |
| 企微应用 Secret | 证明系统是你企业的应用 | deploy/runtime.env(服务器灌入) |
| 回调 Token / EncodingAESKey | 校验、加解密企微消息 | deploy/runtime.env(服务器灌入) |
| 会话存档 Secret / 私钥 | 拉取聊天记录 | deploy/runtime.env(服务器灌入) |
| 备份加密密钥 | 打开备份包 | deploy/secrets/backup.key |
| AI 接口 Key | 调用 AI 模型(用 AI 功能才有) | deploy/runtime.env |
| 统一登录密钥 | 对接企业身份系统(用 SSO 才有) | deploy/runtime.env |
钥匙放在哪、怎么保护
- 所有运行密钥集中在一个文件里:
deploy/runtime.env。 - 这个文件的权限必须是 600——意思是"只有服务器管理员本人能读能写,别人都不行"。
- 禁止提交到代码仓库,禁止用聊天、邮件传。
- 网页不接收、不回显企业微信密钥。钥匙只从服务器文件进系统。
这个文件丢了,麻烦很大
runtime.env 不在备份包里。丢了它,即使数据都在,系统也起不来——数据库密码、企微钥匙全没了。
所以装完系统的第一件事,就是把 runtime.env 和 backup.key 存进公司密码保险库。
数据存在哪(三个数据卷)
| 数据卷 | 装什么 |
|---|---|
mysql-data | 客户、群、标签、配置和业务数据 |
redis-data | 缓存和运行状态 |
upload-data | 上传的素材和附件 |
- 升级和普通回滚不会删除或重建这三个数据卷。
- 禁止使用
docker compose down -v,那个-v会连数据卷一起删。
对外只开一扇门
| 服务 | 谁能访问 |
|---|---|
| 网站(443 端口) | 公网,带 HTTPS |
| 系统自身(18921 端口) | 只绑服务器本机(127.0.0.1) |
| 数据库、缓存、后端 | 只在系统内部通信,不开放到宿主机 |
| 管理指标端口(8086) | 只在内网使用 |
另外,权限是在后端逐次检查的:没登录访问业务接口会被拒绝(返回 401),普通员工调用"改配置"的接口会被拒绝(返回 403)。不是前端把按钮藏起来就算数。
换钥匙(轮换)
怀疑泄露、员工离职、或者公司安全制度要求定期换时,按这五步:
- 在企业微信或身份系统里,生成一把新钥匙
- 更新服务器上的
deploy/runtime.env(保持权限 600) - 只重启后端:
bash
docker compose --env-file .env -f deploy/docker-compose.yml up -d --no-deps --force-recreate backend- 验证:能登录、企微验证连接通过、回调正常
- 确认没问题后,把旧钥匙作废,并翻一遍操作日志
几条纪律
- 每家企业用自己独立的钥匙,测试环境和正式环境不共用。
- 群发、删除、同步、改配置这些动作,后端会再查一遍权限。
- 每次升级前先备份;每月至少做一次异机恢复演练。
- 对外只开 443;证书私钥当钥匙对待。
常见问题
Q:runtime.env 能发给技术支持看吗?
不要。排障需要的信息从日志里拿(日志自动脱敏,不会写密钥和客户正文)。钥匙永远不出你的服务器。
Q:员工电脑上会不会存钥匙?
不会。钥匙只在服务器上,员工用浏览器或企业微信访问,拿不到钥匙。
Q:怎么确认权限锁对了?
在服务器上执行 ls -l deploy/runtime.env,开头显示 -rw------- 就是对的。备份密钥文件同理。
Q:几个环境能共用一套钥匙吗?
不能。测试、正式环境必须各用各的,避免一处泄露、处处失守。
相关页面
- 备份与恢复 — 备份不含密钥这件事
- 企业微信接入 — 企微密钥怎么灌
- 日常巡检与故障处理 — 日常怎么查系统状态
- 在线安装(一步一步) — 安装时密码怎么生成