Jo-im开发:用于WebRTC的ICE中继服务器Coturn搭建

前言

本人计划开发一套具备文本、语音、视频通话功能的IM demo,同时具备多人在线会议功能,按习惯大概会开源版定义名称为Duihao jo-im,本案主要用于实现语音视频通话的基础组件支撑。因为我们选择基于WebRTC实现IM中语音、视频通话,因此需要搭建用于WebRTC的ICE中继服务器,我们选择coturn进行搭建。

在 WebRTC 网络传输模块中,当遇到 NAT 之间无法打通的情况下,会使用 TURN 协议通过中转的方式实现端与端之间的通信。Coturn 就是一种开源的 STUN/TURN 服务器,它可以让你轻松地搭建一个能够在 NAT 防火墙和代理服务器背后运行的实时通信系统。Coturn 支持各种协议和技术,包括 STUN(Session Traversal Utilities for NAT)、TURN(Traversal Using Relays around NAT)和 ICE(Interactive Connectivity Establishment)。Coturn 可以用于向 WebRTC 应用程序提供 TURN 服务器,这些应用程序需要在 P2P 通信中转储流量。本文主要介绍 Coturn 在 Linux系统下部署的步骤。

服务器环境

云服务器:阿里ECS

操作系统:Alibaba Cloud linux

控制面板:BT宝塔

安装&启动coturn

因为coturn使用到了UDP,所以要把coturn监听的UDP和TCP相关端口在安全组中打开,这个一般在云资源控制台的服务器安全组配置中。我们这次使用的是3478端口。

安装依赖

下载libevent2发行包,通过宝塔面板直接上传到服务器,并解压。因为阿里云国内服务器的国际资源访问限制,建议您通过浏览器下载后直接上传、解压。

Release release-2.1.12-stable · libevent/libevent · GitHub[这里是图片001]https://github.com/libevent/libevent/releases/tag/release-2.1.12-stable 您也可以使用命令进行下载(阿里云国内服务器可能会报错):

复制代码
wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz

使用命令解压:

复制代码
tar -zxvf libevent-2.1.12-stable.tar.gz

解压后,进入libevent2目录,执行编译安装:

复制代码
cd libevent-2.1.12-stable

./configure && make && make install

安装过程如下:

下载coturn代码

方法1:使用git命令下载(需要服务器中已安装git):

复制代码
# 国内仓库(推荐使用)
git clone https://gitee.com/whatitis/coturn

# 原仓库(速度会慢一些)
git clone https://github.com/coturn/coturn

方法2:使用wget命令下载,然后执行解压:

复制代码
wget https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz

# 解压
tar -zxvf 4.5.1.1.tar.gz

执行coturn编译安装

复制代码
cd coturn
./configure --prefix=/usr/local/coturn
make && make install

配置 Coturn

切换到 coturn 的 etc 目录,拷贝一份 turnserver.conf.default 再进行修改。宝塔面板可以直接进入/usr/local/coturn/etc这个目录去复制,并修改文件。

1、进入目录

复制代码
cd /usr/local/coturn/etc

2、复制文件

复制代码
cp ./turnserver.conf.default ./turnserver.conf

3、修改配置项

复制代码
vi ./turnserver.conf

vi命令注释:终端编辑文件时先输入i进入编辑模式,编辑好后,按esc退出编辑模式,输入:wq保存文件

4、配置说明

修改 turnserver.conf 文件配置内容,realm 需要指定 IP 或域名,否则无法在 WebRTC 本地库中使用,虽然使用 trickle-ice 可以正常访问,但是在 WebRTC本地库中是没法正常使用的。将下方的代码直接复制到turnserver.conf文件最后,保存。

复制代码
# 指定侦听的端口。
listening-port=3478
# 云主机内网 IP 地址,如果没有内网IP就直接用公网IP。
listening-ip=xxx.xxx.xxx.xxx
# 云主机的公网 IP 地址。
external-ip=xxx.xxx.xxx.xxx
# 这个很重要,如果没有配置这个就服务使用中转服务。云主机的公网 IP 地址或域名。
realm=xxx.xxx.xxx.xxx
# 访问 STUN/TURN 服务的用户名和密码。
user=admin:123456

服务器端口开启

在阿里云ecs服务器安全组中进行开启,需要到控制中的安全策略组或者防火墙中允许3478、49152-65535端口 UDP/TCP 通行(出、入),然后在宝塔面板安全中再进行开启。

阿里云ECS安全规则如下:

宝塔面板安全规则:

启动Coturn

设置系统环境变量,直接打开/etc/profile文件,在文件末尾加上以下内容

复制代码
export PATH=$PATH:/usr/local/coturn/bin

执行以下命令,让系统环境变量生效

复制代码
 source /etc/profile

通过配置文件执行启动命令

复制代码
turnserver -c /usr/local/coturn/etc/turnserver.conf

启动命令运行结果

检测coturn工作状态

使用这个网址可以检测ICE服务器的工作状态,出现 relay 说明配置成功。https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/[这里是图片006]https://cloud.tencent.com/developer/tools/blog-entry?target=https%3A%2F%2Fwebrtc.github.io%2Fsamples%2Fsrc%2Fcontent%2Fpeerconnection%2Ftrickle-ice%2F&source=article&objectId=2037764

测试的时候,STUN or TURN URI 需要加入协议头和端口号,点击 Add Server 按钮,然后再点击Gather candidates 按钮。

如:turn:143.163.245.191:3478

将 Coturn 设置为系统服务

把 Coturn 设置成系统服务,便于开机自动启动,就不用手动启动了。

执行以下命令:

复制代码
touch /usr/lib/systemd/system/coturn.service

命令编辑或直接宝塔面板找到刚刚生成的服务文件,编辑:

复制代码
vi /usr/lib/systemd/system/coturn.service

编辑coturn.service 文件内容如下:

复制代码
[Unit]
Description=Coturn Server
After=network.target
 
[Install]
WantedBy=multi-user.target
 
[Service]
User=root
Group=root
ExecStart=/usr/local/coturn/bin/turnserver -c /usr/local/coturn/etc/turnserver.conf
LimitNOFILE = 5000

将 coturn 设置开机启动:

复制代码
systemctl enable coturn

启动 coturn 服务:

复制代码
systemctl start coturn

重启coturn 服务:

复制代码
systemctl restart coturn

停止coturn 服务:

复制代码
systemctl stop coturn

结束语

本文仅对IM中语音视频通话所需要的WebRTC支持组件进行安装,要想开发具备语音、视频通话的IM,还有大量工作需要做,后续Jo-im系列文章将会持续更新,敬请关注。

相关推荐
F_D_Z11 分钟前
【解决办法】pip install albumentations安装下载遇19kB/s超级慢细水管
linux·运维·python·pip
luoqice12 分钟前
在嵌入式 Linux 系统中,配置 DNS 以实现内网或外网连接
linux·运维·服务器
中心观察者20 分钟前
haproxy应用详解
运维
青草地溪水旁29 分钟前
Ubuntu上开通Samba网络共享
linux·运维·ubuntu·samba
妙妙屋(zy)34 分钟前
基于Astro开发的Fuwari静态博客模版配置CICD流程
服务器·docker
芥子沫42 分钟前
ElasticSearch 的3种数据迁移方案
运维·elasticsearch·搜索引擎
IvanCodes1 小时前
三、Linux用户与权限管理详解
linux·运维·服务器
默默敲代码的徐哥儿1 小时前
八股文整理——计算机网络
服务器·网络·计算机网络
蝉明✘1 小时前
HAproxy负载均衡
运维·负载均衡
格发许可优化管理系统2 小时前
GTSuite许可证性能优化建议
大数据·运维·数据库·安全·性能优化·数据分析