LiveTalking icon indicating copy to clipboard operation
LiveTalking copied to clipboard

公网部署经验分享

Open EminemJK opened this issue 5 months ago • 8 comments

前言

我也是一步一步摸索和群里的大佬们请教,才把这个项目搭建并可以外网正常访问,现在就分享一下我的经验吧。首先是方案,我们公司自有机房,所以我的数字人部署在本地,经过安全的考虑,搭建Coturn服务器放在阿里云服务器上,将本地的数字人和Coturn服务器的端口映射(白名单),这样就可以让外网用户访问内网资源了,且端口得到有效的保护。

环境准备

Image
  • 阿里云服务器: 外网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服务器都配置好了,可以外网访问了。

EminemJK avatar Jul 11 '25 02:07 EminemJK

补充,数字人是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

EminemJK avatar Jul 11 '25 02:07 EminemJK

麻烦问下,前端client.js那边的代码要改吗?

juzstu avatar Jul 16 '25 07:07 juzstu

麻烦问下,前端client.js那边的代码要改吗?

客户端都需要,不论是web或是其他

EminemJK avatar Jul 17 '25 06:07 EminemJK

请问群在哪,我也想请教,感谢。

angel-heart avatar Jul 31 '25 07:07 angel-heart

你好,如果我的数字人部署在本地了,假如我外部想使用浏览器进行访问网页版的数字人,需要怎么做呢,因为网上搜索好像coturn只是进行webrtc推流的中转服务,不提供web服务,是不是还需要做内网穿透呢

2524271078 avatar Aug 20 '25 04:08 2524271078

你好,如果我的数字人部署在本地了,假如我外部想使用浏览器进行访问网页版的数字人,需要怎么做呢,因为网上搜索好像coturn只是进行webrtc推流的中转服务,不提供web服务,是不是还需要做内网穿透呢

我也遇到这个问题,其他的是否可以通过NGINX 转发进入内网?

swinghu avatar Aug 26 '25 11:08 swinghu

你好,如果我的数字人部署在本地了,假如我外部想使用浏览器进行访问网页版的数字人,需要怎么做呢,因为网上搜索好像coturn只是进行webrtc推流的中转服务,不提供web服务,是不是还需要做内网穿透呢

讨论网络的问题,建议带上你的拓扑结构,不好理解你说的。

EminemJK avatar Sep 04 '25 02:09 EminemJK

你好,如果我的数字人部署在本地了,假如我外部想使用浏览器进行访问网页版的数字人,需要怎么做呢,因为网上搜索好像coturn只是进行webrtc推流的中转服务,不提供web服务,是不是还需要做内网穿透呢

我也遇到这个问题,其他的是否可以通过NGINX 转发进入内网?

讨论网络的问题,建议带上你的拓扑结构,不好理解你说的。

EminemJK avatar Sep 04 '25 02:09 EminemJK