网站
为网站存储应用机密
The Secrets tab is an encrypted store for the sensitive configuration values a Node.js app needs, such as API keys, signing secrets and third-party tokens, kept per environment so your production…
Secrets 标签页是一个加密存储区,用于存放 Node.js 应用所需的敏感配置值,例如 API 密钥、签名密钥和第三方令牌,按环境分别保存,确保生产凭证和预览凭证永远不会混淆。
Secrets 的存储位置
打开 Websites,点击该网站,在网站标签栏中打开 Advanced 菜单,选择 Secrets。该标签页标题为 Secrets。
该标签页仅在 Node.js 网站上显示。WordPress、PHP 和静态网站不显示该标签页,因为它们的配置存储在磁盘上的文件中:WordPress 使用 wp-config.php,普通 PHP 应用使用框架读取的任何配置文件。

值的保护方式
每个值在进入数据库前都会被加密。没有任何值以可读文本形式存储,列表视图永远不会显示完整值:它只显示最后四个字符的掩码,这样你可以区分两个相似的密钥而不会泄露任何一个。
每一行都带有一个 Encrypted 标签作为提示。读取值是一个单独的、主动的操作,而不是打开页面时自动发生的事情。
设置、查看和删除密钥都需要 sites:write 权限。只读团队成员可以看到存在哪些密钥及其掩码,但看不到它们的值。
两个环境
页面顶部的分段控件在 production 和 preview 之间切换。它们是完全独立的密钥集。在生产环境中设置 STRIPE_SECRET_KEY 不会在预览环境中创建它,从预览环境中删除它也不会影响生产环境。
这种分离正是该功能的意义所在。预览构建是临时环境,任何拥有代码库访问权限的人都可以触发,因此它们应该使用测试凭证,而不是实时凭证。参阅 Preview Deploys For Pull Requests 了解预览环境的创建方式。
添加或更新密钥
- 使用分段控件选择环境。
- 在 KEY_NAME 字段中输入名称。该字段在你输入时强制使用大写字母。
- 在第二个字段中放入值。输入时值会被掩盖。
- 点击 Set。
设置已存在的密钥会覆盖它。没有单独的编辑操作,也没有覆盖的确认步骤,因此在点击 Set 前请检查环境标签。
密钥名称规则
密钥必须以大写字母开头,然后可以包含大写字母、数字和下划线,最多 128 个字符。DATABASE_URL、API_KEY_V2 和 SENTRY_DSN 都是有效的。其他任何格式都会被拒绝,显示消息 Key must be UPPER_SNAKE_CASE letters/numbers/underscore。
还有两个限制值得了解:
- 值不能为空。提交空白值会返回 value required。
- 值不能超过 16 KB。这对于令牌来说很充足,但对于完整的证书链来说不够,证书链应该存储在文件中而不是密钥中。
读取值
点击该行上的 Copy。KPanel 在服务器端解密该值并将其直接放在你的剪贴板上,显示 Value copied to clipboard 确认消息。值不会打印在屏幕上,因此屏幕共享或窥视者无法获得。
每次查看都会被写入网站的审计跟踪中,记录谁进行了操作以及哪个密钥,并显示在 Site Activity Log 中。
如果你需要检查值是否正确而不想暴露它,可以比较掩码。最后四个字符足以确认你拥有正确的令牌,它们已经在屏幕上了。
在应用中使用密钥
将值复制到应用在服务器上读取配置的位置。对于 Node.js 应用,通常是由进程管理器设置的环境变量,或应用根目录中的 .env 文件,你的代码在启动时加载。
不要将该文件提交到代码库。创建它之前,将 .env 添加到 .gitignore。已被推送到 git 远程的密钥必须被视为已泄露并在提供商处轮换,因为它会保留在历史记录中,即使你删除了文件。
Secrets 标签页是你对值的记录,以加密和审计的方式保存,而不是存储在密码管理器中的笔记或消息线程中。将其作为真实来源:当你在提供商处轮换密钥时,同时在这里更新它,这样下一个部署的人就会拥有当前值。
删除密钥
点击该行上的 Delete。KPanel 会要求你用 Delete {KEY}? 确认,并警告应用将在下次重启时失去对该值的访问权限。没有撤销操作,也没有保留副本,因此如果你以后可能需要该值,请先复制它。
当基础凭证在提供商处已被撤销,或使用它的代码已被删除时,删除密钥。保留过时的密钥会使其更难判断哪些实际上重要。
安全地轮换凭证
安全的顺序总是:在提供商处创建新凭证,在这里更新它,部署,确认应用工作正常,然后在提供商处撤销旧凭证。
以相反的顺序进行(先撤销)会给你一个时间窗口,运行中的应用持有无效凭证,每个需要它的请求都会失败。如果更改有风险,请先进行备份,以便你可以返回到已知的良好状态:参阅 Taking a Backup。
故障排除
Secrets 标签页不在菜单中。 该网站不是 Node.js 网站。检查页面顶部网站名称旁边的堆栈标签。
Set 按钮没有任何反应。 两个字段都是必需的。如果任一字段为空,该按钮会报告 Key + value required。
密钥被拒绝。 不允许小写字母、连字符、点和空格。api-key 和 Api_Key 都会失败;API_KEY 会通过。
Copy 没有将任何内容放在剪贴板上。 某些浏览器会阻止在非活跃标签页上进行剪贴板写入。先点击页面,然后再点击 Copy。
接下来去哪里
- Preview Deploys For Pull Requests,生产和预览分割的另一半。
- Git Deploy For a Site,用于推送读取这些值的代码。
- Site Activity Log,查看谁设置、查看或删除了密钥。