|
|
要在 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 |
|