| 
 | 
 
要在 Docker 中运行 Vosk 服务器并使其通过 WebSocket 连接(使用 WSS,即通过安全 WebSocket 连接),你需要进行几个步骤来设置你的 Docker 容器和相关的网络配置。以下是一个详细的指南: 
 
步骤 1: 准备 Docker 镜像 
首先,确保你有一个可以运行 Vosk 服务器的 Docker 镜像。Vosk 官方并没有提供直接的 Docker 镜像,因此你需要自己构建一个或者使用一个基于 Python 的镜像,并在其中安装 Vosk。 
 
创建一个 Dockerfile 
例如,你可以创建一个 Dockerfile 来基于 Python 镜像安装 Vosk: 
- # 使用官方的 Python 镜像
 
 - FROM python:3.8-slim
 
  
- # 设置工作目录
 
 - WORKDIR /app
 
  
- # 安装 Vosk 和其他依赖
 
 - RUN pip install vosk \
 
 -     && pip install Flask \
 
 -     && pip install websockets
 
  
- # 将本地代码添加到容器中
 
 - COPY . /app
 
  
- # 暴露端口
 
 - EXPOSE 2700
 
  
- # 运行服务器
 
 - CMD ["python", "app.py"]
 
 
  复制代码 
 
app.py 示例代码 
创建一个 app.py 文件来启动 Vosk 服务器: 
- from flask import Flask, request, jsonify
 
 - import websockets
 
 - import vosk
 
 - import json
 
  
- app = Flask(__name__)
 
 - model = vosk.Model("model")  # 确保你有正确的模型文件路径
 
 - rec = vosk.KaldiRecognizer(model, 16000)  # 16000 是采样率
 
  
- @app.route('/listen', methods=['POST'])
 
 - async def listen():
 
 -     audio_data = request.data
 
 -     rec.AcceptWaveform(audio_data)
 
 -     result = json.loads(rec.Result())
 
 -     return jsonify(result)
 
  
- if __name__ == '__main__':
 
 -     app.run(host='0.0.0.0', port=2700)
 
 
  复制代码 
 
步骤 2: 构建 Docker 镜像 
在包含 Dockerfile 和 app.py 的目录中,运行以下命令来构建 Docker 镜像: 
- docker build -t vosk-server .
 
 
  复制代码 
 
步骤 3: 运行 Docker 容器并设置 WSS(WebSocket Secure) 
由于直接在 Docker 中使用 WSS 比较复杂(通常需要额外的 SSL/TLS 配置),你可以考虑使用反向代理如 Nginx 来处理 WSS。以下是如何设置 Nginx 的示例: 
 
创建一个 Nginx 配置文件 nginx.conf: 
- server {
 
 -     listen 443 ssl;
 
 -     server_name localhost;
 
  
-     ssl_certificate /path/to/your/fullchain.pem;  # 你的证书文件路径
 
 -     ssl_certificate_key /path/to/your/privkey.pem;  # 你的私钥文件路径
 
 -     ssl_session_timeout 1d;
 
 -     ssl_session_cache shared:SSL:50m;
 
 -     ssl_session_tickets off;
 
  
-     location / {
 
 -         proxy_pass http://localhost:2700;  # Vosk 服务器的地址和端口
 
 -         proxy_http_version 1.1;
 
 -         proxy_set_header Upgrade $http_upgrade;
 
 -         proxy_set_header Connection "upgrade";
 
 -         proxy_set_header Host $host;
 
 -     }
 
 - }
 
 
  复制代码 
 
运行 Nginx Docker 容器: 
- 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 容器: 
- docker run -d --name vosk-server -p 2700:2700 vosk-server
 
 
  复制代码 
 
这样,你的 Vosk 服务器应该可以通过 Nginx 的 WSS 设置被安全地访问了。确保你的防火墙和网络设置允许从外部访问端口 443 |   
 
 
 
 |