本文记录个人在 Ubuntu 16.04 和 Centos 7 环境下 mediasoup 部署过程,主要涉及编译环境搭建,依赖模块安装,公网 IP 和端口配置以及 HTTPS 设置等关键步骤。
基础信息
操作系统和 nodejs 版本信息
操作系统配置信息:Centos 7 版本信息:
CentOS Linux release 7.4.1708 (Core)
Ubuntu 16.04 版本信息:
Ubuntu 16.04.7 LTS
gcc 5.4.0 20160609
g++ 5.4.0 20160609
Nodejs 和 npm 版本信息:
Node: v10.15.2
NPM: 6.4.1
Centos GCC 升级
因 mediasoup 编译要求 GCC 版本大于 4.8,但 Centos 7.4 通过 yum 安装的 GCC 版本为 4.8.5,不能够直接编译 mediasoup 使用的 mediasoup-worker 程序。所以,需要对 GCC 版本进行升级处理。具体的操作步骤如下:
安装
SCL1
yum install -y centos-release-scl
安装
GCC1
yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
启动
GCC(临时)1
scl enable devtoolset-9 bash
完成
mediasoup-worker程序编译后,请关闭shell终端,不再使用9.3.1版本GCC,因为SCL仅升级了GCC版本,并未升级libstdc++和libc依赖库。如果继续使用9.3.1版本GCC将导致mediasoup-worker程序在启动时找不到高版本的库函数,例如提示libstdc++.so.6: versionGLIBCXX_版本号’ not found 和 libc.so.6: versionGLIBC_版本号' not found。个人因为永久启动高版本GCC,差点对libstdc++.so.6升级处理。
python 升级
mediasoup 要求 python 版本高于 3.7,因此需要对 python 进行升级:
1 | add-apt-repository ppa:deadsnakes/ppa |
生成自签名 HTTPS 证书
使用如下名称生成 HTTPS 协议使用的公钥和私钥对,其中key表示私钥,crt表示公钥。
1 | openssl req -new -newkey rsa:1024 -x509 -sha256 -days 3650 -nodes -out fullchain.pem -keyout privkey.pem |
生成证书后,将证书和私钥文件复制到 mediasoup-demo/server/certs 目录下。
mediasoup 部署
克隆项目:
1
2
3git clone https://github.com/versatica/mediasoup-demo.git
cd mediasoup-demo
git checkout v3安装
Server1
2cd server
npm install该步骤会下载
node需要的node_modules,其中c++部分的mediasoup代码会下载到mediasoup-demo/server/node_modules/mediasoup目录下,这个目录其实就是mediasoup,这个项目worker目录下是c++,修改后直接make就可以。
如果使用 npm install 安装 server 的 mediasoup 失败,可考虑使用如下操作方式:
1 | # 设置 npm 安装源为淘宝源 |
安装浏览器
app1
2
3
4cd app
npm install
# 若安装失败,尝试执行如下命令安装:
npm install --unsafe-perm全局安装
gulp1
npm install -g gulp-cli
配置修改
服务端配置
复制 mediasoup-demo/server/config.example.js 重命名 config.js,修改后的配置文件示例如下:
1 | /** |
主要包括修改 HTTPS 监听端口为 15025,RTP 传输端口范围为 15026~15038,并设置公网IP,其中 192.168.104.8 表示部署机器 IP 地址,10.12.13.14 表示公网 IP 地址。
若使用默认端口,因为在环境变量中没有对 MEDIASOUP_LISTEN_IP 和 MEDIASOUP_ANNOUNCED_IP 进行设置,所以,需要将 config.js 中的 0.0.0.0 的 IP 地址进行设置,否则实时视频通话会失败。在默认端口情形下,配置设置类似如下:
1 | listenIp : |
客户端配置
因为客户端默认监听在 3000 端口,当需要更该客户端默认监听端口时,需在 mediasoup-demo/app/gulpfile.js 文件中的 browserSync 添加端口配置,具体方式如下:
1 | browserSync( |
因服务器端将 HTTPS 监听端口设置为 15025,所以客户端代码亦需要修改对应端口,修改 mediasoup-demo/app/lib/urlFactory.js 文件中的端口:
1 | let protooPort = 15025; |
修改完成后,在 mediasoup-demo/app 路径下执行 gulp 命令打包客户端代码。客户端代码打包成功后,前端客户端页面会发布到 mediasoup-demo/server/public 路径下。
完成配置修改后,客户端将对 15024 端口进行监听服务。
Nginx 发布 app
为简化 app 的发布,因此使用 nginx 部署 HTTPS 服务器,发布客户端。
其中 /home/mediasoup/mediasoup-demo/server/public 目录为客户端发布目录。nginx 配置如下所示:
1 | worker_processes auto; |
服务运行
启动 mediasoup
使用 nohup 方式启动 mediasoup 后台运行,因某些云服务器在关闭 shell 终端时,同样也会结束 nohup 运行的进程,需要执行 exit 命令退出。
1 | cd mediasoup-demo/server/ |
启动 nginx
启动 nginx 服务器,发布客户端。
1 | /opt/nginx/sbin/nginx |
测试
打开浏览器,输入 https:\\10.12.13.14:15024 进入房间。