ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从Demo到生产:Hy-SimulMT线上部署的HTTPS、端口与安全实践指南

从Demo到生产:Hy-SimulMT线上部署的HTTPS、端口与安全实践指南

从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/ws8080✅ 唯一需要对外放开的端口
桥接网页/API 端口llama.cpp 桥接模式(serve_llamacpp.py)8094✅(此时替代 8080)
模型 API 端口vLLM 模型服务8800❌ 建议只监听本机 127.0.0.1
模型推理端口llama.cpp 服务加载 GGUF8080❌ 建议只监听本机 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 条生产必做项

  1. 模型端口绝不裸奔:8800(vLLM)与 8080(llama.cpp)只监听127.0.0.1,仅网页/API 端口对外;模型 API 直接暴露意味着任何人可免费调用你的 GPU。
  2. 防火墙只开 80/443:ufw allow 80,443/tcp,内网调试用 SSH 隧道(ssh -L 8080:127.0.0.1:8080 user@host)代替长期开放 8080。
  3. 给服务设访问门槛:生产环境建议在反向代理层加一层Basic Auth或 Token 校验,/translate/stream上传接口是资源消耗大户,最不该裸奔。
  4. 保留日志便于排障:环境生成的config.toml、app.log(网页日志)与model.log(模型日志)统一保存在SimulInfer/.simulinfer/下,端口冲突、启动失败先查这两份日志。
  5. 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),仅供参考

返回列表