公网部署经验分享
前言
我也是一步一步摸索和群里的大佬们请教,才把这个项目搭建并可以外网正常访问,现在就分享一下我的经验吧。首先是方案,我们公司自有机房,所以我的数字人部署在本地,经过安全的考虑,搭建Coturn服务器放在阿里云服务器上,将本地的数字人和Coturn服务器的端口映射(白名单),这样就可以让外网用户访问内网资源了,且端口得到有效的保护。
环境准备
- 阿里云服务器: 外网IP:1.2.3.4 内网IP:192.168.1.100
- 自有机房: 外网:113.1.1.2
- 数字人服务器 内网IP:172.16.10.30
step1: 安装Coturn服务器
Coturn服务器的安装比较简单,我是使用docker安装的。 第一步创建turnserver.conf,内容如下:
listening-ip=192.168.1.100
listening-port=3478
#tls-listening-port=5349
relay-ip=192.168.1.100
external-ip=1.2.3.4
realm=1.2.3.4
allowed-peer-ip=0.0.0.0
relay-threads=10
lt-cred-mech
#cert=pem/turn_server_cert.pem
#pkey=pem/turn_server_pkey.pem
pidfile=/var/run/turnserver.pid
min-port=49152
max-port=65535
user=admin:passwd123456 #密码建议复杂一点
cli-password=passwd123456 #密码建议复杂一点
verbose
fingerprint
syslog
具体参数说明请参考Coturn官网Docker说明。
第二步启动Coturn服务器,命令如下:
docker run -d --network=host --name=coturn \
-v /root/turnserver.conf:/etc/coturn/turnserver.conf \
coturn/coturn
network=host,这样就可以直接用内网IP访问了。
step2: Coturn服务器防火墙配置
开启端口防火墙,我的防火墙情况:
To Action From
-- ------ ----
3478/udp ALLOW Anywhere
3478/tcp ALLOW Anywhere
5349/tcp ALLOW Anywhere
49152:65535/udp ALLOW Anywhere
22 ALLOW Anywhere
3478/udp (v6) ALLOW Anywhere (v6)
3478/tcp (v6) ALLOW Anywhere (v6)
5349/tcp (v6) ALLOW Anywhere (v6)
49152:65535/udp (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
step3: 阿里云管理后台的安全组
也需要放行端口,这里比较简单,跟Coturn服务器的端口一致即可。 至此,Coturn服务器就可以外网访问了。你可以使用火狐浏览器(必须火狐)打开 Trickle ICE 去做测试。参考我的测试结果,Done表示OK了。
Time Type Foundation Protocol Address Port Priority URL (if present) relayProtocol (if present)
0.002 host 0 udp 60ef3317-e18c-49eb-820b-63f2271b57bb.local 57429 126 | 32512 | 255
0.002 host 2 tcp 60ef3317-e18c-49eb-820b-63f2271b57bb.local 9 125 | 32704 | 255
0.002 host 0 udp 60ef3317-e18c-49eb-820b-63f2271b57bb.local 57430 126 | 32512 | 254
0.002 host 2 tcp 60ef3317-e18c-49eb-820b-63f2271b57bb.local 9 125 | 32704 | 254
0.018 srflx 1 udp 1.2.3.4 2537 100 | 32543 | 255
0.048 Done
step4: 本地数字人配置
在数字人服务器上,修改配置文件,修改app.py代码:
搜索:async def offer(request) 接口
#ice_server = RTCIceServer(urls='stun:stun.l.google.com:19302')
# 改为Coturn服务器的地址端口、用户名密码
ice_server = RTCIceServer(urls='turn:1.2.3.4:3478',username='admin', credential = 'passwd123456')
然后再启动数字人,这里很重要,包括如果你自己制作客户端来对接,也需要配置如上,比如我安卓的客户端代码:
PeerConnection.IceServer.builder("turn:1.2.3.4:3478")
.setUsername("admin")
.setPassword("passwd123456")
.createIceServer()
step5: 本地防火墙配置
因为本地防火墙放行情况不归属我们部门管理,就告诉网管吧,让他们自己去配置吧。
X哥,我们现在做一个项目,搭建了一个流媒体服务器在本地,另外再阿里云服务器做了转发的,帮我们设置一下白名单。
172.16.10.30的外网IP,对阿里云1.2.3.4 IP开通1-65535 端口的 udp 协议。
那么 113.1.1.2 就跟 阿里云1.2.3.4 做了白名单端口放行。
至此,Coturn服务器都配置好了,可以外网访问了。
补充,数字人是webRTC启动的,就是默认的启动命令:
CUDA_VISIBLE_DEVICES=2 python app.py --transport webrtc --model wav2lip --avatar_id wav2lip256_avatar1_0704 --batch_size 32 --max_session 100 --customvideo_config data/custom_config.json --tts tencent --REF_FILE 101008
麻烦问下,前端client.js那边的代码要改吗?
麻烦问下,前端client.js那边的代码要改吗?
客户端都需要,不论是web或是其他
请问群在哪,我也想请教,感谢。
你好,如果我的数字人部署在本地了,假如我外部想使用浏览器进行访问网页版的数字人,需要怎么做呢,因为网上搜索好像coturn只是进行webrtc推流的中转服务,不提供web服务,是不是还需要做内网穿透呢
你好,如果我的数字人部署在本地了,假如我外部想使用浏览器进行访问网页版的数字人,需要怎么做呢,因为网上搜索好像coturn只是进行webrtc推流的中转服务,不提供web服务,是不是还需要做内网穿透呢
我也遇到这个问题,其他的是否可以通过NGINX 转发进入内网?
你好,如果我的数字人部署在本地了,假如我外部想使用浏览器进行访问网页版的数字人,需要怎么做呢,因为网上搜索好像coturn只是进行webrtc推流的中转服务,不提供web服务,是不是还需要做内网穿透呢
讨论网络的问题,建议带上你的拓扑结构,不好理解你说的。
你好,如果我的数字人部署在本地了,假如我外部想使用浏览器进行访问网页版的数字人,需要怎么做呢,因为网上搜索好像coturn只是进行webrtc推流的中转服务,不提供web服务,是不是还需要做内网穿透呢
我也遇到这个问题,其他的是否可以通过NGINX 转发进入内网?
讨论网络的问题,建议带上你的拓扑结构,不好理解你说的。