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

nas_container

其中vocespace容器可能会启动失败,这是因为vocespace.conf.json没有读写权限

为vocespace.conf.json增加读写权限

vocespace.conf.json的位置就在您执行脚本所在的位置,如果您查看容器日志,您应该会看到一行输出: /app/vocespace.conf.json: Permission denied

1chmod 644 ./vocespace.conf.json

赋予权限后重新启动vocespace容器即可

内网访问

到这一步说明您已经完成了本地安装,所有容器都正常启动了,但现在依然使用http和ws协议,这依旧无法正常通讯。那么接下来让我们继续。

alt text

复制新的VoceSpace

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

alt text

alt text

复制新的livekit-server

WARNING

如果你需要外部访问请跳过这步

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

  • LIVEKIT_NODE_IP = your.nas.server.ip
  • LIVEKIT_RTC_USE_EXTERNAL_IP = false

alt text

删除之前的容器

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

alt text

配置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}}'

alt text

设置代理

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

alt text

接下来新增一个配置并保存。

  • 来源
    • 协议:HTTPS
    • 主机名:不需要写 (如果有域名可以使用域名)
    • 端口:3008
  • 目的地
    • 协议:HTTP
    • 主机名:这是你vocespace在docker上的ip
    • 端口3000

alt text

增加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

1systemctl reload nginx

确保VoceSpace配置文件并重启VoceSpace容器

接下来我们只需要确保VoceSpace的配置文件正确并重启VoceSpace容器即可

1vim /volume1/share/data/vocespace.conf.json

配置文件中你因该注意

  1. livekit中的url需要: wss://your.server.ip:3008,是3008,不是7880
  2. 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容器并进行登录,如果你看到如下画面,那么恭喜你成功完成内网访问

alt text

问题处理

rtc访问受限

rtc访问受限的原因一般有两个:

  1. 错误的vocespace配置
  2. 由于server配置太差导致服务无法正常启动

对于这些问题可以采取适当提升服务器配置(最低2核2G),配置问题可以查看vocespace.conf.json文件确定是否是livekit.url配置错误

外部端口访问

NAS上配置过路由器配置可能会导致外部无法访问,此时需要添加端口规则

route

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