如何快速完成 Dograh 远程服务器部署自定义域名、Nginx 反向代理与 COTURN 全配置指南【免费下载链接】dograhOpen source voice AI platform. Self-hosted alternative to Vapi and Retell. On Prem, BYOK across Speech to Speech or LLM/STT/TTS, with a visual workflow builder, MCP native and telephony support.项目地址: https://gitcode.com/GitHub_Trending/do/dograhDograh是一个开源的语音 AI 平台voice AI platform也是 Vapi、Retell 的自托管self-hosted替代方案。它支持视觉工作流编辑器、MCP 原生集成和电话系统接入。本文将带你在一台远程服务器上完成 Dograh 的完整生产级部署一键拉起服务、理解 Nginx 反向代理的配置原理、配置 COTURN TURN 服务器解决 WebRTC 穿透最后绑定自定义域名并自动续期 SSL 证书。全程约 30 分钟无需手写任何配置。部署前检查服务器配置与端口清单在开始之前请确认你的服务器满足以下要求详见官方文档 docs/deployment/docker.mdx检查项要求硬件最低8 GB 内存 4 vCPU建议使用全新服务器系统已安装 Docker 和 Docker Composedocker compose version可验证网络拥有公网 IP权限需要sudoroot权限运行安装脚本⚠️端口是远程部署中最高频的踩坑点。请在云服务商防火墙和安全组中同时放行协议端口用途TCP/UDP80、443访问 Web 界面与 HTTPSTCP/UDP3478、5349WebRTC 信令TURN/STUNUDP49152-49200WebRTC 媒体中继浏览器出于安全限制只在 HTTPS或 localhost下开放麦克风权限所以远程部署必须走 HTTPS——这一点 Dograh 的自动化脚本已经全部替你处理好。一键启动远程部署先获取 Dograh 仓库然后运行官方远程部署脚本 scripts/setup_remote.shgit clone https://gitcode.com/GitHub_Trending/do/dograh.git cd dograh sudo ./scripts/setup_remote.sh脚本会依次询问你服务器公网 IPTURN 服务器密码回车生成随机值部署模式——prebuilt拉取官方镜像推荐或build从源码构建适合维护 fork 的用户FastAPI worker 数量——默认4一般与 vCPU 数一致即可。脚本会自动完成获取docker-compose.yaml、签发 Lets Encrypt 证书公网 IP 通过 sslip.io 免费获得可信证书并配置自动续期、生成包含 TURN 配置的环境文件.env、以及运行dograh-init预校验。完成后进入dograh/目录启动cd dograh ./remote_up.sh启动脚本 remote_up.sh 会先做 preflight 校验重新渲染 nginx 与 coturn 运行时配置再拉起整个容器栈。浏览器访问终端打印的地址形如https://203-0-113-10.sslip.io即可进入平台无需任何 DNS 配置就没有浏览器警告。理解 Nginx 反向代理它替你做了什么远程部署栈中内置了一个nginx:alpine容器见 docker-compose.yaml 的nginx服务它承担三类工作。配置模板位于 deploy/templates/nginx.remote.conf.template由dograh-init根据.env自动渲染无需手工维护1️⃣ HTTP → HTTPS 强制跳转 ACME 证书校验80 端口仅暴露/.well-known/acme-challenge/路径用于 Lets Encrypt 的 HTTP-01 校验其余请求 301 跳转到 HTTPS。这个设计让证书签发和续期全程零停机nginx 无需停止。2️⃣ API 请求负载均衡与 WebSocket 长连接/api/v1/路径被代理到名为dograh_api的 upstream内部包含所有 FastAPI worker 端口8000、8001、8002……并采用least_conn最少连接策略。语音通话是长驻 WebSocketleast_conn能把流式连接均匀分散到各 worker避免个别进程过载。模板中同时设置了proxy_read_timeout 3600s与Upgrade头保证音频流不断连。3️⃣ 静态资源与对象存储路由/转发到 UI 容器3010 端口/voice-audio/直接代理到 MinIO9000 端口录音与转写文件下载不绕路通过sub_filter把 API 响应里的localhost:9000内网地址改写为当前域名外链即可公网访问。COTURN 配置详解语音通话不串门、不掉线WebRTC 要穿越 NAT离不开 TURN 中继。Dograh 在栈中内置了coturn/coturn:4.8.0容器配置模板见 deploy/templates/turnserver.remote.conf.template仓库内另有一份带详细注释的参考配置 config/coturn/turnserver.conf。核心参数一览配置项值说明listening-port3478TURN 服务端口UDP/TCPtls-listening-port5349TLS 加密端口min-port/max-port49152 / 49200媒体中继端口范围务必放行 UDPexternal-ip服务器公网 IPdograh-init自动渲染NAT 穿透关键use-auth-secret开启使用 TURN REST API 临时凭证static-auth-secret与.env中TURN_SECRET一致HMAC-SHA1 共享密钥fingerprint/no-cli/no-multicast-peers开启安全加固项 认证机制上Dograh 没有使用固定的账号密码而是采用TURN REST API后端根据共享密钥为每通电话动态签发有时效的凭证默认 24 小时由TURN_CREDENTIAL_TTL控制更安全。如何验证 TURN 真的在工作在.env中加入FORCE_TURN_RELAYtrue并重启。此时浏览器只允许走中继候选relay-only如果 TURN 配置有误通话会干净地报ICE failed而不是看起来能通实则没声音。验证通过后改回false即可。部署成功进入平台后创建 API Key 并开始你的第一次语音 Agent 调用测试自定义域名从 IP 到 voice.yourcompany.com如果 IP 形式的地址不够体面可以绑定自己的域名完整文档见 docs/deployment/custom-domain.mdx。分三步第一步添加 DNS A 记录在域名解析面板添加类型为A主机记录为voice子域或根域值填服务器公网 IPTTL 300。生效后用nslookup voice.yourcompany.com确认真的解析到了你的 IP。第二步修改.env中的两个变量cd dograh sed -i s/^PUBLIC_HOST.*/PUBLIC_HOSTvoice.yourcompany.com/ .env sed -i s|^PUBLIC_BASE_URL.*|PUBLIC_BASE_URLhttps://voice.yourcompany.com| .env这两个变量是整个部署的锚点dograh-init会用PUBLIC_HOST渲染 nginx 的server_name而 webhook 回调地址、MinIO 下载链接、TURN 主机名都从PUBLIC_BASE_URL派生改这一处即可全局生效变量说明见 docs/developer/environment-variables.mdx。第三步签发并自动续期证书# 1. 先确保栈在运行nginx 需要用 80 端口应答 ACME 校验 ./remote_up.sh # 2. 用 webroot 方式签发证书零停机 sudo certbot certonly --webroot -w $(pwd)/certs -d voice.yourcompany.com # 3. 复制证书并重启 nginx 加载 sudo cp /etc/letsencrypt/live/voice.yourcompany.com/fullchain.pem certs/local.crt sudo cp /etc/letsencrypt/live/voice.yourcompany.com/privkey.pem certs/local.key sudo docker compose --profile remote restart nginx也可以直接运行官方一键脚本 scripts/setup_custom_domain.sh它会完成 DNS 校验、Certbot 安装、证书签发、.env更新和续期钩子的全部工作。别忘了自动续期Lets Encrypt 证书 90 天到期。创建/etc/letsencrypt/renewal-hooks/deploy/dograh-reload.sh内容就是复制新证书 → 重启 nginx然后用sudo certbot renew --dry-run演练一遍。⚠️ 注意不要移动dograh/目录续期钩子的路径是写死指向它的。上线后调优几个值得认识的环境变量变量作用建议FASTAPI_WORKERSnginx 负载均衡的 worker 数每加一个 worker 约需 300–500 MB 内存改完执行./remote_up.sh生效TURN_SECRETTURN 共享密钥生产环境务必用随机强密钥TURN_HOST/TURN_PORTTURN 地址与端口默认派生自PUBLIC_HOST仅 TURN 独立部署时手动设置FORCE_TURN_RELAY强制走中继仅作诊断平时保持false多 worker 模式下nginx 的least_conn会把并发通话均匀分摊到各 uvicorn 进程如果调用量继续增长可参考 docs/deployment/scaling.mdx 了解水平扩容思路。常见问题速查Q页面能打开但语音通话没声音大概率是 3478、5349 或 49152-49200 端口没放通。先用FORCE_TURN_RELAYtrue复现确认是 TURN 问题再排查防火墙。Q证书签发失败检查 80 端口是否开放、DNS 是否已生效、以及 Lets Encrypt 是否触发速率限制可稍后重试。Q改完.env后不生效不要直接docker compose up统一走./remote_up.sh它会先重新渲染 nginx/coturn 配置再启动保证三者对齐。Q浏览器显示 SSL 证书错误先ls -la dograh/certs/确认证书已复制再运行./remote_up.sh --preflight-only做纯校验最后重启 nginx 容器。至此你拥有了一台带自定义域名、可信 SSL、完整 TURN 中继能力的 Dograh 生产环境。接下来可以创建 Agent、接入电话线路或按 docs/deployment/update.mdx 跟踪版本升级让这套自托管语音 AI 平台持续跑在你的服务器上。【免费下载链接】dograhOpen source voice AI platform. Self-hosted alternative to Vapi and Retell. On Prem, BYOK across Speech to Speech or LLM/STT/TTS, with a visual workflow builder, MCP native and telephony support.项目地址: https://gitcode.com/GitHub_Trending/do/dograh创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
