ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Novu VPS部署指南:Docker Compose跑通公网访问

2026/9/18 13:28:23 拓冰建站 浏览量
Novu VPS部署指南:Docker Compose跑通公网访问 Novu VPS部署指南Docker Compose跑通公网访问【免费下载链接】novuThe open-source communication infrastructure for agents and products项目地址: https://gitcode.com/GitHub_Trending/no/novuNovu 自托管部署到 VPS 后最常见的翻车现场是服务全绿但浏览器访问公网地址打不开只能在本机看到 Dashboard。八成情况不是镜像没拉起来而是.env里的HOST_NAME还停在出厂默认值http://localhost——API、WebSocket 的对外地址全由它推导它不改团队从公网就进不来。这篇文章讲清楚这一个变量如何牵动整站地址并用 Docker Compose 部署 Novu 的最短路径把服务真正暴露到公网。一个变量决定整站访问地址先看.env.example里的推导关系见 .env.example变量值作用HOST_NAMEhttp://localhost默认整站地址的根VITE_API_HOSTNAME${HOST_NAME}:3000Dashboard 前端调 API 的地址VITE_WEBSOCKET_HOSTNAME${HOST_NAME}:3002前端 WebSocket 连接地址API_ROOT_URL${HOST_NAME}:3000API 对外根地址S3_LOCAL_STACK${HOST_NAME}:4566LocalStack 对象存储地址因果一句话Dashboard4000、API3000、WebSocket3002的对外可达性都建立在HOST_NAME指向的这台机器上。默认值http://localhost是它最常见的翻车现场——本机部署它完全正确VPS 上它就是元凶。改成公网 IP 或域名后所有派生地址自动跟随不需要逐项改端口。顺带确认三个必填密钥缺一个服务都起不来密钥用途要求JWT_SECRETAPI 签发 JWT 签名加密随机值STORE_ENCRYPTION_KEY加解密通道凭据必须恰好 32 字符NOVU_SECRET_KEYSDK 请求鉴权加密随机值最短路径一条命令拿到能跑的 Novu在 VPS 上装好 Docker 与 docker compose外加curl、openssl多数系统自带然后运行官方 setup 脚本# 文件默认放到 ./novu也可用 NOVU_DIR~/novu 指定目录 curl -fsSL https://raw.githubusercontent.com/novuhq/novu/next/docker/community/setup.sh | NOVU_DIR~/novu bash脚本自动完成四件事下载 docker-compose.yml 和.env.example、用openssl rand生成三个密钥、写出.env、docker compose up -d拉起全部服务。脚本逻辑见 setup.sh重复运行时只补齐缺失的密钥不会覆盖你已有的配置。不想用脚本也行把docker/community/下这两个文件拷到服务器手写.env并自行生成密钥即可。一个变量改完全站地址打开.env改这一项# 把 vps-ip 换成你的公网 IP有域名就填域名 HOST_NAMEhttp://vps-ip公网部署建议顺手把注册开关一起加上省得重启两次# .env 中追加 DISABLE_USER_REGISTRATIONtrue保存后重启改了任何环境变量都走这一条docker compose up -d docker compose logs -f单台 VPS 的规格参考Novu 四个服务API/Worker/WS/Dashboard4 vCPUs / 8 GB RAMMongoDB 2 GB RAM / 20 GB 磁盘Redis 2 GB RAM开 AOF即追加文件持久化防止宕机丢任务对象存储 10 GB 起。够用了再往上加。上线检查清单逐项过全绿才算部署完成浏览器打开http://vps-ip:4000能看到 Novu 登录/注册页只放行 4000 却打不开优先查防火墙docker compose ps中所有服务状态为healthy——每个服务都配了 healthcheck即容器定期自检接口API/WS/Worker 走/v1/health-checkDashboard 走根路径 200确认云厂商安全组与主机防火墙放行 4000Dashboard、3000API、3002WebSocketWorker 的 3004 只做内部健康检查不用对外docker compose logs -f无持续报错日志正常滚动后 CtrlC 退出上线前安全清单关掉注册公网默认谁都能注册账号。DISABLE_USER_REGISTRATIONtrue后 API 会以 400 拒绝注册Account creation is disabled老用户登录不受影响防火墙最小化只放行 4000/3000/3002其余端口全部拒绝上 SSL/TLSIP 直连是临时方案尽快绑域名并配 HTTPS保持更新定期更新 Docker 镜像与主机系统密钥质量三个密钥用强随机值别偷懒复用如果要用 Nginx 之类反向代理做子路径如company.com/novu需设置GLOBAL_CONTEXT_PATH再按服务配API_CONTEXT_PATH、WS_CONTEXT_PATH等且这些变量要在 Novu 所有服务上设置缺一个地址就拼不对。这套方案的边界官方文档明确了两点取舍MongoDB 与所有服务同机运行强烈建议生产前把数据库拆出去单独部署对象存储用 LocalStack 代替 S3省掉了 S3 配置但存储能力也止步于此。另外社区版自托管不支持社交登录账号只能用邮箱密码访问SSO、MFA、RBAC 等能力在 Cloud 侧。边界清楚了剩下就是接入在你的应用里把 Inbox 组件的backendUrl/serverURL指向http://vps-ip:3000、socket 指向:3002发一条测试通知团队就能用了。【免费下载链接】novuThe open-source communication infrastructure for agents and products项目地址: https://gitcode.com/GitHub_Trending/no/novu创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考