资讯详情

资讯详情

Novu自托管如何配置JWT_SECRET、STORE_ENCRYPTION_KEY等关键密钥

Novu自托管如何配置JWT_SECRET、STORE_ENCRYPTION_KEY等关键密钥【免费下载链接】novuThe open-source communication infrastructure for agents and products项目地址: https://gitcode.com/GitHub_Trending/no/novu用 Docker Compose 自托管 Novu 时.env.example模板顶部的注释写得很直接YOU MUST CHANGE THESE BEFORE GOING INTO PRODUCTION上生产前必须更换密钥。这篇文档讲的就是三件事Novu 需要哪些密钥、每个密钥用在哪、以及如何在启动前把它们正确配置好。适用环境是 Docker docker-compose v2且系统里装有curl和openssl。需要配置哪些密钥Novu 自托管部署中有三个必填的安全密钥全部写入部署目录下的.env文件变量用途要求JWT_SECRETAPI 用它生成 JWT 认证令牌WebSocket 服务也用它校验必须先生成密码学随机值STORE_ENCRYPTION_KEY用于加密/解密各通知渠道provider的凭据必须恰好 32 个字符NOVU_SECRET_KEY服务端 API 的密钥SDK 调用接口时作为Authorization: ApiKey使用必须先生成密码学随机值.env.example中还列出了这些变量的生成示例JWT_SECRET和NOVU_SECRET_KEY用openssl rand -hex 32生成STORE_ENCRYPTION_KEY用openssl rand -hex 16生成16 字节十六进制输出正好是 32 个字符满足长度要求。除了密钥本身官方部署文档 的 Required Variables 列表还包含HOST_NAME本机运行时设为http://localhost部署到 VPS 时设为服务器 IP 或域名。REDIS_CACHE_SERVICE_HOST和REDIS_HOST在小规模部署中可以用同一个值较大部署建议用独立的 Redis 实例分别承载缓存和队列。主路径用 setup 脚本自动生成密钥最省事的方式是运行仓库里的 setup.sh文档给出的入口命令脚本内容与本仓库docker/community/setup.sh一致curl -fsSL https://raw.githubusercontent.com/novuhq/novu/next/docker/community/setup.sh | bash要安装到指定目录例如~/novu设置NOVU_DIRcurl -fsSL https://raw.githubusercontent.com/novuhq/novu/next/docker/community/setup.sh | NOVU_DIR~/novu bash执行前需要了解脚本会做的事检查curl、docker、openssl、docker compose是否存在缺任何一个都会直接报错退出下载docker-compose.yml和.env.example到目标目录默认为./novu用openssl rand -hex生成三个密钥的随机值从模板创建.env并填入执行chmod 600 .env把文件权限收紧为仅属主可读写运行docker compose up -d启动全部服务。如果目标目录已经存在.env文件脚本只会检查JWT_SECRET、STORE_ENCRYPTION_KEY、NOVU_SECRET_KEY三项仅当值为空时才补上随机值不会覆盖你已有的其他配置。也就是说已经改过.env的实例可以安全地重跑脚本。手动路径自己生成并填写密钥如果你的docker-compose.yml和.env.example是手动克隆仓库获取的需要在上生产前自己生成密钥。文档给出的方法是# JWT_SECRET64 位十六进制字符串 openssl rand -hex 32 # STORE_ENCRYPTION_KEY32 个字符 openssl rand -hex 16 # NOVU_SECRET_KEY64 位十六进制字符串 openssl rand -hex 32把输出分别填进.env对应行JWT_SECRET上面 openssl rand -hex 32 的输出 STORE_ENCRYPTION_KEY上面 openssl rand -hex 16 的输出 NOVU_SECRET_KEY上面 openssl rand -hex 32 的输出这里...需要替换为你本机openssl命令的实际输出占位符不是可直接执行的内容。填写完成后按文档启动docker compose up -d密钥是如何分发到各服务的查看 docker-compose.yml 可以看到三个密钥的注入位置这也是为什么它们必须在同一个.env里配好api服务接收JWT_SECRET、STORE_ENCRYPTION_KEY、NOVU_SECRET_KEYworker服务接收STORE_ENCRYPTION_KEYworker 要解密数据库里已保存的 provider 凭据才能发送通知所以必须和 API 用同一个值ws服务接收JWT_SECRET必须和 API 的值一致否则 WebSocket 端无法通过 API 签发的 JWT 校验。在仓库的源码运行模式下run-in-local-machine.mdx 对环境变量也有同样的约束Worker 的STORE_ENCRYPTION_KEYMust match the API valueWebSocket 的JWT_SECRETMust match the API value。Compose 文件里这些变量都来自同一个.env天然保持一致手动多实例部署时这一点需要自己保证。另外部署到 VPS 时记得同步更新HOST_NAME# 将 vps-ip-address 替换为你的服务器 IP HOST_NAMEhttp://vps-ip-address验证密钥配置是否生效文档给出的验证方式是启动后直接访问本机部署访问http://localhost:4000VPS 部署访问http://vps-ip-address:4000能打开 Dashboard 登录页说明各服务已经拉起用docker compose logs -f跟踪服务日志确认没有因环境变量缺失导致的启动报错docker-compose.yml中每个服务都配置了 healthcheckAPI、worker、ws 均探测各自的/v1/health-checkhealthcheck 通过是容器进入 healthy 状态的判定依据。NOVU_SECRET_KEY配置是否正确的实际检验发生在下一步用它初始化 Server SDKNode.js 为novu/api并触发一个事件API 会以Authorization: ApiKey NOVU_SECRET_KEY鉴权文档的 cURL 示例即展示了该请求形式。限制与注意STORE_ENCRYPTION_KEY长度必须恰好是 32 个字符这是.env.example注释和部署文档同时强调的硬性要求自行构造时不要用随意短字符串。setup.sh会执行docker compose up -d并修改目标目录下载两个文件、创建.env、设置 600 权限。在已有部署的目录重跑前确认脚本只补空值这一行为符合你的预期。部署文档提醒默认 compose 配置把数据库放在同一台机器、存储用 localstack 而非 S3并强烈建议在部署前把数据库解耦——这属于密钥之外的生产化建议。如果之后更换了STORE_ENCRYPTION_KEY的值worker/API 解密的仍是同一套数据库中的 provider 凭据文档没有描述换 key 后存量凭据的处理方式因此换 key 这类操作前请自行确认部署中是否已有加密数据。【免费下载链接】novuThe open-source communication infrastructure for agents and products项目地址: https://gitcode.com/GitHub_Trending/no/novu创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →