NAS 私有部署
NAS(Network Attached Storage,网络附加存储)是一台“专管文件”的迷你服务器——它把硬盘直接挂到局域网里,专门提供文件存取、备份、共享、多版本快照、多媒体服务等,不跑通用计算任务。
常用的NAS供应商:
- Synology(群晖)
- 联想个人云 / 极空间 / 绿联
- Western Digital My Cloud
- ...
无需域名,私有部署
NAS 本地部署视频
视频中演示使用VoceChat内嵌VoceSpace设置获取部署脚本进行部署
如果您单纯只想部署VoceSpace请下载部署脚本并阅读下方手动部署VoceSpace部分
部署脚本下载
点击下载下方的shell脚本
NAS.sh
脚本说明:
- 下载所有你所需要的docker image
- 自动创建容器
- 不介入代理
手动执行脚本部署
你无需进行任何手动更改,直接使用sh进行执行
1# 登陆到您的服务器
2ssh your.account@your.nas.ip
3
4# 使用root执行
5sudo -i
6
7# 复制脚本到deploy.sh中并保存退出(:wq)
8vim ./deploy.sh
9
10# 赋予执行权限
11chmod 644 ./deploy.sh
12
13# 执行脚本
14sh ./deploy.sh
完成执行后你会在容器中看到这些容器
- redis
- vocespace
- livekit-server

其中vocespace容器可能会启动失败,这是因为vocespace.conf.json没有读写权限
为vocespace.conf.json增加读写权限
vocespace.conf.json的位置就在您执行脚本所在的位置,如果您查看容器日志,您应该会看到一行输出: /app/vocespace.conf.json: Permission denied
1chmod 644 ./vocespace.conf.json
赋予权限后重新启动vocespace容器即可
内网访问
到这一步说明您已经完成了本地安装,所有容器都正常启动了,但现在依然使用http和ws协议,这依旧无法正常通讯。那么接下来让我们继续。

复制新的VoceSpace
右击vocespace选择复制选项复制一个新的vocespace,我们需要修改原本映射的3008端口为3006端口,当然你也可以选择其他端口,只要不被占用且不是3008端口即可。


复制新的livekit-server
同样我们需要复制一个新的livekit-server容器,因为我们需要增加两个参数以确保webrtc服务不会通过外网转发,将下面的两个环境参数添加进去。不要填错你自己的IP!
- LIVEKIT_NODE_IP = your.nas.server.ip
- LIVEKIT_RTC_USE_EXTERNAL_IP = false

删除之前的容器
完成复制之后你就可以把之前的VoceSpace和livekit-server容器删除了

配置Nginx反向代理
查询VoceSpace在Docker上的ip
下面的命令可以查询所有容器的IP,找到VoceSpace的IP,记住它
1# 进入root用户
2sudo -i
3# 查询IP
4docker ps -q | xargs -n 1 docker inspect -f '{{.Name}}: {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'

设置代理
打开控制面板,选择系统中的登录门户,点击高级,点击反向代理服务器。

接下来新增一个配置并保存。
- 来源
- 协议:HTTPS
- 主机名:不需要写 (如果有域名可以使用域名)
- 端口:3008
- 目的地
- 协议:HTTP
- 主机名:这是你vocespace在docker上的ip
- 端口3000

增加rtc配置
接下来我们需要修改nginx配置增加rtc的配置来让ws协议升级为wss协议。
# 切换到nginx的site-enabled中
cd /usr/local/etc/nginx/sites-enabled
# 修改服务器代理配置
vim server.ReverseProxy.conf
当你打开这个文件时,他应该是这样的
1server {
2 listen 3008 ssl default_server;
3 listen [::]:3008 ssl default_server;
4
5 server_name _;
6
7 include /usr/syno/etc/www/certificate/ReverseProxy_e7f64ca5-8ca2-4f67-bf01-16e3c2cb0bd4/cert.conf*;
8
9 include /usr/syno/etc/security-profile/tls-profile/config/ReverseProxy_e7f64ca5-8ca2-4f67-bf01-16e3c2cb0bd4.conf*;
10
11 proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
12
13 location / {
14
15 proxy_connect_timeout 60;
16
17 proxy_read_timeout 60;
18
19 proxy_send_timeout 60;
20
21 proxy_intercept_errors off;
22
23 proxy_http_version 1.1;
24
25 proxy_set_header Upgrade $http_upgrade;
26
27 proxy_set_header Connection $connection_upgrade;
28
29 proxy_set_header Host $http_host;
30
31 proxy_set_header X-Real-IP $remote_addr;
32
33 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
34
35 proxy_set_header X-Forwarded-Proto $scheme;
36
37 proxy_pass http://172.17.0.2:3000;
38
39 }
40
41 error_page 403 404 500 502 503 504 /dsm_error_page;
42
43 location /dsm_error_page {
44 internal;
45 root /usr/syno/share/nginx;
46 rewrite (.*) /error.html break;
47 allow all;
48 }
49
50}
接下来在location / { 的上一行,增加下面的配置
1location /rtc {
2
3 proxy_pass http://127.0.0.1:7880;
4
5 proxy_http_version 1.1;
6
7 proxy_set_header Upgrade $http_upgrade;
8
9 proxy_set_header Connection "Upgrade";
10
11 proxy_set_header Host $host;
12
13}
完成后按ESC,输入:wq进行报错退出
完整的配置文件如下:
1server {
2 listen 3008 ssl default_server;
3 listen [::]:3008 ssl default_server;
4
5 server_name _;
6
7 include /usr/syno/etc/www/certificate/ReverseProxy_e7f64ca5-8ca2-4f67-bf01-16e3c2cb0bd4/cert.conf*;
8
9 include /usr/syno/etc/security-profile/tls-profile/config/ReverseProxy_e7f64ca5-8ca2-4f67-bf01-16e3c2cb0bd4.conf*;
10
11 proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
12
13 location /rtc {
14
15 proxy_pass http://127.0.0.1:7880;
16
17 proxy_http_version 1.1;
18
19 proxy_set_header Upgrade $http_upgrade;
20
21 proxy_set_header Connection "Upgrade";
22
23 proxy_set_header Host $host;
24
25 }
26
27 location / {
28
29 proxy_connect_timeout 60;
30
31 proxy_read_timeout 60;
32
33 proxy_send_timeout 60;
34
35 proxy_intercept_errors off;
36
37 proxy_http_version 1.1;
38
39 proxy_set_header Upgrade $http_upgrade;
40
41 proxy_set_header Connection $connection_upgrade;
42
43 proxy_set_header Host $http_host;
44
45 proxy_set_header X-Real-IP $remote_addr;
46
47 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
48
49 proxy_set_header X-Forwarded-Proto $scheme;
50
51 proxy_pass http://172.17.0.2:3000;
52
53 }
54
55 error_page 403 404 500 502 503 504 /dsm_error_page;
56
57 location /dsm_error_page {
58 internal;
59 root /usr/syno/share/nginx;
60 rewrite (.*) /error.html break;
61 allow all;
62 }
63
64}
重新加载nginx
确保VoceSpace配置文件并重启VoceSpace容器
接下来我们只需要确保VoceSpace的配置文件正确并重启VoceSpace容器即可
1vim /volume1/share/data/vocespace.conf.json
配置文件中你因该注意
- livekit中的url需要:
wss://your.server.ip:3008,是3008,不是7880
- redis中的host需要:
your.server.ip
例如:
1{
2 "livekit": {
3 "key": "APIQLeUrXGujRQk",
4 "secret": "fWHUA2CQlfi1iG4L3YqWKIhXuF9aqvlO5uTWAuHoLKm",
5 "url": "wss://192.168.31.249:3008"
6 },
7 "codec": "vp9",
8 "resolution": "1080p",
9 "maxBitrate": 3000000,
10 "maxFramerate": 30,
11 "priority": "medium",
12 "redis": {
13 "enabled": true,
14 "host": "192.168.31.249",
15 "port": 6379,
16 "password": "vocespace",
17 "db": 0
18 },
19 "server_url": "192.168.31.249",
20 "host_token": "vocespace",
21 "license": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImhhbkBwcml2b2NlLmNvbSIsImV4cGlyZXNfYXQiOjE3NzkyNzg0MDAsImNyZWF0ZWRfYXQiOjE3NDc3NDI0MDAsImRvbWFpbnMiOiIqIiwibGltaXQiOiJwcm8iLCJpZCI6IjZkZjgyMTMyLTIyODQtNGY2MS1iYmZhLWZkZmU4YmMzMWE2NyJ9.PiagYRDWSpzhIdbnY-pp8QeOf5Ij7neV8RMEafDgVT4"
22}
确定配置没有任何问题之后,重启VoceSpace容器并进行登录,如果你看到如下画面,那么恭喜你成功完成内网访问

问题处理
rtc访问受限
rtc访问受限的原因一般有两个:
- 错误的vocespace配置
- 由于server配置太差导致服务无法正常启动
对于这些问题可以采取适当提升服务器配置(最低2核2G),配置问题可以查看vocespace.conf.json文件确定是否是livekit.url配置错误
外部端口访问
NAS上配置过路由器配置可能会导致外部无法访问,此时需要添加端口规则

| port |
type |
ingress/egress |
allow ip |
| 3008 |
tcp |
ingress |
0.0.0.0/0 Ipv4 |
| 3008 |
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 |
| 6379 |
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 |