从Demo到生产:Hy-SimulMT线上部署的HTTPS、端口与安全实践指南
【免费下载链接】Hy-SimulMT-30B-A3B-GGUF项目地址: https://ai.gitcode.com/hf_mirrors/tencent/Hy-SimulMT-30B-A3B-GGUF
把腾讯混元的实时同声传译模型 Hy-SimulMT 从本地 Demo 推向线上服务,绕不开三个问题:HTTPS 怎么配、端口怎么规划、安全怎么加固。Hy-SimulMT-30B-A3B-GGUF 仓库提供了 Q4_K_M 与 Q8_0 两种 GGUF 量化权重,配合 llama.cpp 或 vLLM 推理服务,即可搭建支持麦克风实时同传、文件上传与 WebSocket 流式接口的翻译服务。本文面向新手,给出可直接照做的端口规划、HTTPS 反向代理与安全加固清单,帮你把部署风险降到最低。
先搞清架构:3 个服务、4 个关键端口
Hy-SimulMT 线上部署不是"一个进程",而是模型服务 + 网页/API 服务两层结构。端口规划是出问题的重灾区,先看全景:
| 端口 | 归属 | 默认值 | 是否必须对外暴露 |
|---|---|---|---|
| 网页/API 端口 | SimulInfer 网页、/translate/stream、/translate/ws | 8080 | ✅ 唯一需要对外放开的端口 |
| 桥接网页/API 端口 | llama.cpp 桥接模式(serve_llamacpp.py) | 8094 | ✅(此时替代 8080) |
| 模型 API 端口 | vLLM 模型服务 | 8800 | ❌ 建议只监听本机 127.0.0.1 |
| 模型推理端口 | llama.cpp 服务加载 GGUF | 8080 | ❌ 建议只监听本机 127.0.0.1 |
⚠️ 注意:vLLM 路径与 llama.cpp 路径的8080 含义不同——前者是网页/API 端口,后者是模型端口。桥接模式下,llama.cpp 占 8080,网页走 8094,切勿混淆。
GGUF 量化怎么选:Q4_K_M 还是 Q8_0?
本仓库直接内置了两个 GGUF 权重文件,可按显存余量二选一:
- 显存紧张、追求能跑起来:选 Hy-SimulMT-30B-A3B-Q4_K_M.gguf(4-bit K-quant,体积与显存占用最低)
- 显存充足、追求翻译质量:选 Hy-SimulMT-30B-A3B-Q8_0.gguf(8-bit 近全精度,质量最接近原始权重)
两者均为"仅输出译文"的模型;需要"原文+译文"双路输出时,应选用 Interleave 系列权重(见 README.md 模型链接表)。
一键部署:两条路径对照
路径 A:vLLM 新环境(一条命令拉起两个服务)
bash deploy.sh --install-server --model /path/to/Hy-SimulMT-30B-A3B-Interleave命令会创建独立环境、安装依赖、准备模型,再依次启动 vLLM 和网页/API 服务。看到Ready: http://127.0.0.1:8080/即部署成功。
路径 B:llama.cpp 桥接(适合已加载 GGUF 的场景)
前提是支持音频输入的 llama.cpp 服务已在8080端口加载了你的 GGUF 模型,然后在 Python 3.11+ 环境中执行:
export MODEL=/path/to/Hy-SimulMT-30B-A3B-Q8_0.gguf MODEL_TYPE=target_only python serve_llamacpp.py网页随后打开http://127.0.0.1:8094/。MODEL_TYPE=target_only对应"仅译文"模型(即本仓库两个文件);双路模型改为source_target。
💡 llama.cpp 官方仓库对 Hy-SimulMT 的适配还在推进中,若当前版本加载报错,可等待支持该模型的新版发布,或先走 vLLM 路径。
端口冲突最快解法:换端口而不是拆端口
端口被占用时,启动会直接报错(这是保护机制,不是要修的错误)。最快解法是显式换端口,而不是去杀占用进程:
# vLLM 路径:网页/API 与模型端口分别换 bash deploy.sh --backend-url http://model-host:8800/v1 --port 8081 # llama.cpp 桥接:用环境变量换网页端口 LLAMA_URL=http://127.0.0.1:8080 PORT=9000 python serve_llamacpp.py多实例并行测试时,还可配合--runtime-dir .simulinfer-alt让第二套服务使用独立的运行目录,避免config.toml与日志互相覆盖。
为什么远程麦克风必须上 HTTPS?
这是新手最容易踩的坑:浏览器只在"安全上下文"(Secure Context)中开放getUserMedia麦克风权限。
- 服务器本机打开
http://127.0.0.1:8080/→ 属于安全上下文,麦克风可用; - 其他机器走
http://SERVER_IP:8080/→ 非安全上下文,麦克风按钮点了也没反应,只有文件上传还能用。
官方 README 的明确建议是:远程使用麦克风需要 HTTPS,可使用平台提供的 HTTPS 端口转发地址,并保留/proxy/8080/这类完整路径前缀。
用 Caddy 自动配 HTTPS(推荐,证书零运维)
sim-translate.example.com { reverse_proxy 127.0.0.1:8080 { # WebSocket 长连接必需的头 header_up Sec-WebSocket-Key "" } # 长音频流式响应不能缓冲 flush_interval -1 }flush_interval -1很关键:同传是 SSE/WebSocket 流式输出,代理层一旦做缓冲,实时性就被抹掉了。
Nginx 手动配证书示例
server { listen 443 ssl http2; server_name sim-translate.example.com; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # WebSocket 必需 proxy_read_timeout 3600s; # 长对话防断连 proxy_buffering off; # 流式输出不缓冲 } }带路径前缀的转发(如/proxy/8080/)必须原样访问:浏览器地址、/translate/wsWebSocket 地址都要包含前缀,前缀丢了连接就会 404。
安全加固清单:5 条生产必做项
- 模型端口绝不裸奔:8800(vLLM)与 8080(llama.cpp)只监听
127.0.0.1,仅网页/API 端口对外;模型 API 直接暴露意味着任何人可免费调用你的 GPU。 - 防火墙只开 80/443:
ufw allow 80,443/tcp,内网调试用 SSH 隧道(ssh -L 8080:127.0.0.1:8080 user@host)代替长期开放 8080。 - 给服务设访问门槛:生产环境建议在反向代理层加一层
Basic Auth或 Token 校验,/translate/stream上传接口是资源消耗大户,最不该裸奔。 - 保留日志便于排障:环境生成的
config.toml、app.log(网页日志)与model.log(模型日志)统一保存在SimulInfer/.simulinfer/下,端口冲突、启动失败先查这两份日志。 - API 契约先自查:部署完成后打开网页根路径下的
/docs(交互式 API 文档),确认/translate/stream与/translate/ws两个端点行为符合预期,再接入你的业务。
部署验收:3 分钟自检流程
| 检查项 | 操作 | 预期 |
|---|---|---|
| 网页可达 | 浏览器打开https://你的域名/ | 页面正常渲染,可选翻译方向 |
| 流式上传 | curl -N https://你的域名/translate/stream -F direction=en-zh -F file=@audio.wav | 逐段返回译文 |
| WebSocket | 用/translate/ws建立连接并推流 | 连接稳定、译文实时返回 |
| 麦克风 | 在 HTTPS 地址下点击开启麦克风 | 授权弹窗正常出现、实时同传 |
| 日志 | 查看app.log/model.log | 无重复报错、无端口冲突记录 |
开启 TTS 后,同一上传命令还会把合成语音保存为outputs/translated.wav,可顺带验证音色克隆链路。
常见问题速查(FAQ)
Q:换端口后浏览器打不开?检查是否改错了变量:vLLM 路径用--port/--model-port,llama.cpp 桥接用PORT/LLAMA_URL环境变量,两套别混用。
Q:Ready: http://127.0.0.1:8080/出来了,但远程页面空白?大概率是反向代理没有透传 WebSocket/长连接头(Upgrade/Connection),或做了响应缓冲,按上文 Nginx 示例补齐。
Q:文件上传能用、麦克风不能用?典型非安全上下文症状,说明还在走 HTTP。切到 HTTPS 域名再试,127.0.0.1 本地访问不受影响。
Q:显存告警,怎么快速回退?把模型从 Q8_0 换成 Q4_K_M 文件 重新加载即可,无需改部署脚本。
结语
Hy-SimulMT 的线上部署可以概括为一句话:一个对外端口(网页/API)、两个仅本机端口(模型服务)、一层带 WebSocket 透传的 HTTPS 反向代理。端口冲突用参数换、麦克风问题靠 HTTPS 解、安全边界靠防火墙和认证守住——照本文清单走一遍,从 Demo 到生产的路径其实很清晰。更多细节可查阅仓库内的 README_CN.md 与 LICENSE.txt。
【免费下载链接】Hy-SimulMT-30B-A3B-GGUF项目地址: https://ai.gitcode.com/hf_mirrors/tencent/Hy-SimulMT-30B-A3B-GGUF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考