Docker + Nginx

通过本指南,你将学会如何使用 Docker 和 Nginx 将应用正式部署至生产环境,并配置 HTTPS 证书保障通信安全。

如何获得的key和secret?

1. 复制基础配置

以下是vocespace的基础配置,在启动容器前你需要将该配置复制并在启动时指定

1{
2  "livekit": {
3    "key": "devkey",
4    "secret": "secret",
5    "url": "wss://your.server.name"
6  },
7  "codec": "vp9",
8  "resolution": "1080p",
9  "maxBitrate": 3000000,
10  "maxFramerate": 30,
11  "priority": "medium",
12  "redis": { 
13    "enabled": true, 
14    "host": "your.ip", 
15    "port": 6379, 
16    "password": "vocespace", 
17    "db": 0 
18  },
19  "server_url": "your.server.name"
20}
WARNING

your.ip: 用户宿主机的IP地址,可以使用ifconfig | grep inet进行查看

1inet 127.0.0.1 netmask 0xff000000
2inet 192.168.31.138 netmask 0xffffff00 broadcast 192.168.31.255

在这个例子中 192.168.31.138 就是你的宿主机IP

your.server.name: 用于部署的域名

2. 使用 Docker 部署应用

获取 VoceSpace 镜像

VoceSpace含有两种镜像:

  • amd: privoce/vocespace:latest
  • arm: privoce/vocespace:latest_arm

所以您需要知道自己当前的服务器架构进行选择, 见: help-查看自己的linux架构

1# amd
2docker pull privoce/vocespace:latest
3# arm
4docker pull privoce/vocespace:latest_arm

启动容器

在开始配置 Nginx 反向代理前,我们需要先将后端服务容器运行起来。

1docker run -d \
2  -p 3000:3000 \
3  -v ${PWD}/vocespace.conf.json:/app/vocespace.conf.json \
4  --name vocespace \
5  privoce/vocespace:latest
NOTE
  • -p 3000:3000:将容器的 3000 端口映射至宿主机 3000 端口。
  • -v ${PWD}/vocespace.conf.json:/app/vocespace.conf.json: 将配置进行映射
  • --name:给容器命名,便于后续管理。

3. 安装并配置 Nginx

3.1 安装 Nginx 与 Certbot

确保系统更新,并安装所需软件包:

1apt update
2apt install nginx certbot python3-certbot-nginx -y
WARNING
  • 如果你使用的是 CentOS 或其他非 Debian 系发行版,请更换为相应的包管理命令(如 yumdnf)。
  • certbotpython3-certbot-nginx 是用于自动配置 HTTPS 的工具。

3.2 配置 nginx.conf(全局配置,可忽略)

路径:/etc/nginx/nginx.conf

1user  nginx;
2worker_processes  auto;
3
4error_log  /var/log/nginx/error.log warn;
5pid        /var/run/nginx.pid;
6
7events {
8    worker_connections  1024;
9}
10
11http {
12    include       /etc/nginx/mime.types;
13    default_type  application/octet-stream;
14
15    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
16                      '$status $body_bytes_sent "$http_referer" '
17                      '"$http_user_agent" "$http_x_forwarded_for"';
18
19    access_log  /var/log/nginx/access.log  main;
20
21    sendfile        on;
22    keepalive_timeout  65;
23
24    include /etc/nginx/conf.d/*.conf;
25}
NOTE
  • 此为全局配置,通常不需频繁更改。
  • 日志目录建议开启 logrotate,避免磁盘占满。

3.3 配置站点文件(虚拟主机配置)

路径建议:/etc/nginx/sites-enabled/vocespace/etc/nginx/conf.d/vocespace

首先先简单进行配置:

1# HTTP 重定向至 HTTPS
2server {
3    listen 80;
4    listen [::]:80;
5
6    server_name your.server.name;
7
8    location / {
9        return 301 https://$host$request_uri;
10    }
11
12    return 404;
13}

3.4 使用 Certbot 申请 HTTPS 证书

在 DNS 服务商中确保域名已正确解析至服务器 IP。

签发证书命令

1certbot --nginx -d your.server.name --register-unsafely-without-email
NOTE
  • --nginx:Certbot 将自动修改你的 nginx 配置以启用 HTTPS。
  • --register-unsafely-without-email:不绑定邮箱。不推荐正式使用,建议加上 --email your@email.com

验证 Nginx 状态并重启

1nginx -t
2systemctl reload nginx

3.5 补全https的配置

1# HTTPS 反向代理配置
2server {
3    listen 443 ssl;
4    listen [::]:443 ssl;
5
6    server_name your.server.name;
7
8    ssl_certificate /etc/letsencrypt/live/your.server.name/fullchain.pem;
9    ssl_certificate_key /etc/letsencrypt/live/your.server.name/privkey.pem;
10    include /etc/letsencrypt/options-ssl-nginx.conf;
11    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
12
13    # 应用主服务(例如前端或后端 Web 接口)
14    location / {
15        proxy_pass http://127.0.0.1:3000;
16        proxy_http_version 1.1;
17        proxy_set_header Upgrade $http_upgrade;
18        proxy_set_header Connection "Upgrade";
19        proxy_set_header Host $host;
20        proxy_cache_bypass $http_upgrade;
21    }
22
23    # WebRTC 服务代理(端口和路径视项目而定)
24    location /rtc {
25        proxy_pass http://127.0.0.1:7880;
26        proxy_http_version 1.1;
27        proxy_set_header Upgrade $http_upgrade;
28        proxy_set_header Connection "Upgrade";
29        proxy_set_header Host $host;
30    }
31
32    # nginx 中的 Socket.IO 实时通信代理这里可以忽略
33    # location /socket.io {
34    #    proxy_pass http://127.0.0.1:3000; 
35    #    proxy_http_version 1.1;
36    #    proxy_set_header Upgrade $http_upgrade;
37    #    proxy_set_header Connection "Upgrade";
38    #    proxy_set_header Host $host;
39    #    proxy_set_header X-Real-IP $remote_addr;
40    #    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
41    #    proxy_set_header X-Forwarded-Proto $scheme;
42    #    proxy_cache_bypass $http_upgrade;
43    # }
44}
WARNING
  • server_name 必须与你实际申请的证书域名一致。
  • 请确保 /etc/letsencrypt/live/your.server.name/ 中的文件已生成 其中ssl的配置由certbot生成

3.6 启动并检测 Nginx 状态

1# 检测配置是否正确
2nginx -t
3
4# 重载配置(推荐)或重启服务
5systemctl reload nginx
6# 或
7systemctl restart nginx

4. 启动 livekit-server

和本地部署一样您同样需要启动livekit-server来支持webrtc, 您可以选择和本地部署一样下载livekit进行启动,也可以使用docker部署

本地
Docker

下载 livekit-server

1curl -sSL https://get.livekit.io | bash

完成下载后一般都会在/usr/local/bin/livekit-server

创建配置

我们提供了一份极简配置帮助您进行快速部署,首先创建配置文件vim /etc/livekit.yml

1port: 7880
2bind_addresses:
3    - "0.0.0.0"
4rtc:
5    tcp_port: 7881
6    port_range_start: 50000
7    port_range_end: 60000
8    use_external_ip: true
9    enable_loopback_candidate: false
10turn:
11    enabled: false
12    domain: turn.vocespace.xyz
13    tls_port: 5349
14    udp_port: 3478
15    external_tls: true
16keys:
17  devkey: secret

使用 nohup 后台启动

通过使用 nohup 您可以在后台启动livekit-server并将日志输出到/usr/local/bin/logs/livekit_output.log以便于查看

1nohup /usr/local/bin/livekit-server --config /etc/livekit.yml > /usr/local/bin/logs/livekit_output.log 2>&1 &

5. 下载并启动redis

Macos
Windows
Linux
1brew install redis
2brew services start redis -- --requirepass "vocespace" --bind 0.0.0.0 --protected-mode no

云服务器说明

配置安全组/防火墙

在使用云服务器时,例如:阿里云,腾讯云,Google Cloud等,您需要对服务器等安全组/防火墙进行相关配置

port type ingress/egress allow ip
3000 tcp ingress 0.0.0.0/0 Ipv4
3000 tcp egress 0.0.0.0/0 Ipv4
7880 tcp ingress 0.0.0.0/0 Ipv4
7881 tcp ingress 0.0.0.0/0 Ipv4
80 tcp ingress 0.0.0.0/0 Ipv4
443 tcp ingress 0.0.0.0/0 Ipv4
50000~60000 udp ingress 0.0.0.0/0 Ipv4

补充建议

自动续签证书

1# 测试续签
2certbot renew --dry-run

防火墙开放端口(如使用 ufw):

1ufw allow 'Nginx Full'

HTTPS 强制与安全加固:可在 nginx.conf 中增加如下配置:

1ssl_protocols TLSv1.2 TLSv1.3;
2ssl_prefer_server_ciphers on;