Discuz! BBS

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 26|回复: 0

在 Docker 中运行 Vosk 服务器并使其通过 wss WebSocket 连接

[复制链接]

393

主题

556

帖子

3294

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3294
发表于 4 天前 | 显示全部楼层 |阅读模式
要在 Docker 中运行 Vosk 服务器并使其通过 WebSocket 连接(使用 WSS,即通过安全 WebSocket 连接),你需要进行几个步骤来设置你的 Docker 容器和相关的网络配置。以下是一个详细的指南:

步骤 1: 准备 Docker 镜像
首先,确保你有一个可以运行 Vosk 服务器的 Docker 镜像。Vosk 官方并没有提供直接的 Docker 镜像,因此你需要自己构建一个或者使用一个基于 Python 的镜像,并在其中安装 Vosk。

创建一个 Dockerfile
例如,你可以创建一个 Dockerfile 来基于 Python 镜像安装 Vosk:
  1. # 使用官方的 Python 镜像
  2. FROM python:3.8-slim

  3. # 设置工作目录
  4. WORKDIR /app

  5. # 安装 Vosk 和其他依赖
  6. RUN pip install vosk \
  7.     && pip install Flask \
  8.     && pip install websockets

  9. # 将本地代码添加到容器中
  10. COPY . /app

  11. # 暴露端口
  12. EXPOSE 2700

  13. # 运行服务器
  14. CMD ["python", "app.py"]
复制代码


app.py 示例代码
创建一个 app.py 文件来启动 Vosk 服务器:
  1. from flask import Flask, request, jsonify
  2. import websockets
  3. import vosk
  4. import json

  5. app = Flask(__name__)
  6. model = vosk.Model("model")  # 确保你有正确的模型文件路径
  7. rec = vosk.KaldiRecognizer(model, 16000)  # 16000 是采样率

  8. @app.route('/listen', methods=['POST'])
  9. async def listen():
  10.     audio_data = request.data
  11.     rec.AcceptWaveform(audio_data)
  12.     result = json.loads(rec.Result())
  13.     return jsonify(result)

  14. if __name__ == '__main__':
  15.     app.run(host='0.0.0.0', port=2700)
复制代码


步骤 2: 构建 Docker 镜像
在包含 Dockerfile 和 app.py 的目录中,运行以下命令来构建 Docker 镜像:
  1. docker build -t vosk-server .
复制代码


步骤 3: 运行 Docker 容器并设置 WSS(WebSocket Secure)
由于直接在 Docker 中使用 WSS 比较复杂(通常需要额外的 SSL/TLS 配置),你可以考虑使用反向代理如 Nginx 来处理 WSS。以下是如何设置 Nginx 的示例:

创建一个 Nginx 配置文件 nginx.conf:
  1. server {
  2.     listen 443 ssl;
  3.     server_name localhost;

  4.     ssl_certificate /path/to/your/fullchain.pem;  # 你的证书文件路径
  5.     ssl_certificate_key /path/to/your/privkey.pem;  # 你的私钥文件路径
  6.     ssl_session_timeout 1d;
  7.     ssl_session_cache shared:SSL:50m;
  8.     ssl_session_tickets off;

  9.     location / {
  10.         proxy_pass http://localhost:2700;  # Vosk 服务器的地址和端口
  11.         proxy_http_version 1.1;
  12.         proxy_set_header Upgrade $http_upgrade;
  13.         proxy_set_header Connection "upgrade";
  14.         proxy_set_header Host $host;
  15.     }
  16. }
复制代码


运行 Nginx Docker 容器:
  1. docker run --name nginx -v /path/to/your/nginx.conf:/etc/nginx/nginx.conf:ro -p 443:443 -d nginx
复制代码


确保你已经有了有效的 SSL 证书(例如通过 Let's Encrypt)。你可以使用 certbot 来获取免费的 SSL 证书。

步骤 4: 运行 Vosk Docker 容器:
  1. docker run -d --name vosk-server -p 2700:2700 vosk-server
复制代码


这样,你的 Vosk 服务器应该可以通过 Nginx 的 WSS 设置被安全地访问了。确保你的防火墙和网络设置允许从外部访问端口 443
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-10-25 08:51 , Processed in 0.011055 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表