webrtc服务器搭建

只谈情不闲聊 提交于 2020-01-28 09:55:35

webRTC服务器搭建
目前主流的ip方式是ip4,地址是有限的,会出现很多内网,通过内网解决ip地址不可分的问题。很多客户端都处在192.168.1.xx这种内网。两个客户端之间想要交互,就必须进行内网穿透,进行NAT转换。想要完成NAT 转换,必须通过服务器,才能实现p2p通信。

服务器介绍:

  1. turn服务器作用:寻找两个客户端之间最短的网络路径,以便建立p2p通信。
    webrtc默认支持turn服务器,只需要搭建一个turn服务。只需要通过webrtc告诉turn服务地址就可以。对外提供服务,端口是3478

  2. socket服务器作用:sdp交换,icecandidate交换,信息交换及业务逻辑。
    端口自己定义,3000

实际项目中,是通过ngix进行服务分发。

服务器搭建:
相关介绍:

  1. turn服务可以直接在官网获取,
  2. ngix服务:
  3. socket服务需要自己来写。
    socket服务有两个版本,java和nodejs版本

Webrtc服务器搭建后台项目地址

以下所有的【注意:】皆为本人添加的备注。

本搭建是基于centos 7.6 64位系统,系统恢复原始状态,重新装系统,确保人人都能搭建成功**

如果系统安装了基础软件 如git gcc++ 可以跳该步骤

yum update
yum install git
yum install  make
yum install gcc-c++

1.1 搭建Node环境

下载官网最新nodejs:https://nodejs.org/en/download

mkdir webrtc
cd webrtc
wget https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.xz
# 解压
tar -xvf node-v10.16.0-linux-x64.tar.xz
# 改名
mv node-v10.16.0-linux-x64 nodejs
# 进入目录
cd nodejs/

# 确认一下nodejs下bin目录是否有node 和npm文件,如果有就可以执行软连接
sudo ln -s /root/webrtc/nodejs/bin/npm /usr/local/bin/
sudo ln -s /root/webrtc/nodejs/bin/node /usr/local/bin/

# 看清楚,这个路径是你自己创建的路径,我的路径是/home/dds/webrtc/nodejs

#查看是否安装
node -v 
npm -v 

# 注意,ubuntu 有的是需要sudo,如果不想sudo,可以
sudo ln -s /root/webrtc/nodejs/bin/node /usr/bin/

1.2 安装turn服务器的环境准备

cd ..
yum install openssl openssl-libs libevent2 libevent-devel
yum install openssl-devel
yum install sqlite
yum install sqlite-devel
yum install postgresql-devel
yum install postgresql-server
yum install mysql-devel
yum install mysql-server
yum install hiredis
yum install hiredis-devel

【注意:】我安装在 [root@VM_0_2_centos nodejs]# yum install hiredis-devel目录下

1.3开始安装turn服务器

git clone https://github.com/coturn/coturn 
cd coturn 
./configure 
make 
sudo make install 

【注意:】clone 路径为[root@VM_0_2_centos webrtc]#
【注意:】通过 ./configure 命令将coturn服务安装到linux服务器上,生成一个MakeFile文件。
【注意:】 执行make命令,后回去寻找MakeFile文件并进行编译。
【注意:】make install 会将可执行文件放在系统变量下。注意区分是否命令前带了sudo,视频中没带。

查看是否安装成功

which turnserver

生成用户名和密码

turnadmin -k -u ddssingsong -r north.gov -p 123456
0xfb76c57e823de97df580e573437ef54a
0: log file opened: /var/log/turn_1791_2019-07-31.log
0: SQLite connection was closed.

【注意:】0xe0cf652c51340b75d230ab841a78344a,可以理解为一个地址,该值表示:Ngix分发到turn服务器的一个分发接口

安全访问秘钥 0xe0cf652c51340b75d230ab841a78344a

接下来配置turnserver 的配置文件,配置文件存放在/usr/local/etc/turnserver.config文件下

这个文件本身是不存在的,需要我们自己创建

创建内容

verbose
fingerprint
lt-cred-mech
realm=test
user=junlyuan:0xe0cf652c51340b75d230ab841a78344a
user=junlyuan:123456
stale-nonce
no-loopback-peers
no-multicast-peers
mobility
no-cli

该配置文件是不存在的、

user=“是你本机生成的随机ID 不要全部直接复制了”

1.4 【注意:】启动turn服务器

启动命令:

/usr/local/bin/turnserver --syslog -a -L 172.17.0.2 -X 111.229.245.175 -E 172.17.0.2 -f --min-port=32355 --max-port=65535 --user=junlyuan:123456 -r junlyuan --cert=turn_server_cert.pem --pkey=turn_server_pkey.pem --log-file=stdout -v
启动成功的部分截图:
在这里插入图片描述
如上所示:turn服务器已经启动成功。
ps:172.17.0.2为内网IP,111.229.245.175为外网IP,请自行修改为安装服务器的ip
此外:不添加参数-L 172.17.0.2 -X 111.229.245.175 -E 172.17.0.2 执行命令:
/usr/local/bin/turnserver --syslog -a -f --min-port=32355 --max-port=65535 --user=junlyuan:123456 -r junlyuan --cert=turn_server_cert.pem --pkey=turn_server_pkey.pem --log-file=stdout -v 也可以启动成功:
在这里插入图片描述
修复上图中的Warning

[root@VM_0_2_centos ~]# cd /usr/local/etc/
[root@VM_0_2_centos etc]# ls
turnserver.conf.default  turnserver.config
[root@VM_0_2_centos etc]# mv turnserver.config turnserver.conf
[root@VM_0_2_centos etc]# ls
turnserver.conf  turnserver.conf.default

1.5安装Webrtc服务端

安装webrtc服务器和浏览器端

git clone https://github.com/androidtencent/WebrtcNodeJS
cd WebrtcNodeJS
npm install

【注意:】npm install类似AndroidStudio中的build,下载需要的依赖库。
执行 node server.js 启动socket服务
在这里插入图片描述

1.6 安装nginx服务器(推荐用编译俩安装)

wget  http://nginx.org/download/nginx-1.12.0.tar.gz
tar xvf nginx-1.12.0.tar.gz
cd nginx-1.12.0

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

make 

sudo make install 

【注意:】以上是采取编译的方式进行安装,避免出错。还可以采用yum install ngix方式进行安装

1.7 更改nginx 配置文件 (额外强调 其中包含https证书,下面会告诉生成方式)

vim /usr/local/nginx/conf/nginx.conf

删除配置文件内容,更改为以下内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xTsuQc3R-1578971970693)(img/3.png)]

user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
        multi_accept on;
	}

http {
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 300;
	types_hash_max_size 2048;
	default_type application/octet-stream;


	ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	gzip on;

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;

        upstream web {
		server localhost:3000;      
        }
	
	upstream websocket {
		server localhost:3000;   
        }

	server { 
		listen       443; 
		server_name  localhost;
		ssl          on;

		ssl_certificate     /cert/cert.crt;#配置证书
		ssl_certificate_key  /cert/cert.pem;#配置密钥
			ssl_session_cache    shared:SSL:1m;
		ssl_session_timeout  50m;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
		ssl_ciphers  HIGH:!aNULL:!MD5;
		ssl_prefer_server_ciphers  on;
		
		location /wss {
		proxy_pass http://websocket/; # 代理到上面的地址去
		proxy_read_timeout 300s;
		proxy_set_header Host $host;
		proxy_set_header X-Real_IP $remote_addr;
		proxy_set_header X-Forwarded-for $remote_addr;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection 'Upgrade';	
 		 }
		location / {
		proxy_pass         http://web/;
		proxy_set_header   Host             $host;
		proxy_set_header   X-Real-IP        $remote_addr;
		proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 		 }
	}
}

1.8 生成nginx中的https证书

x509证书一般会用到三类文,key,csr,crt

Key 是私用密钥openssl格,通常是rsa算法。

Csr 是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。

crt是CA认证后的证书文,(windows下面的,其实是crt),签署人用自己的key给你签署的凭证。

1.key的生成

openssl genrsa -des3 -out cert.key 2048

这样是生成rsa私钥,des3算法,openssl格式,2048位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。可以通过以下方法生成没有密码的key:

openssl rsa -in cert.key -out cert.key

server.key就是没有密码的版本了。

2. 生成CA的crt

openssl req -new -x509 -key cert.key -out cert.crt -days 3650

生成的ca.crt文件是用来签署下面的server.csr文件。

3. csr的生成方法

openssl req -new -key cert.key -out cert.csr

需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书。

4. crt生成方法

CSR文件必须有CA的签名才可形成证书,可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢。

openssl x509 -req -days 3650 -in cert.csr -CA cert.crt -CAkey cert.key -CAcreateserial -out cert.crt

输入key的密钥后,完成证书生成。-CA选项指明用于被签名的csr证书,-CAkey选项指明用于签名的密钥,-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。

最后生成了私用密钥:server.key和自己认证的SSL证书:server.crt

证书合并:

cat cert.key cert.crt > cert.pem

1.9分别启动服务

启动turnserver服务

/usr/local/bin/turnserver --syslog -a -f --min-port=32355 --max-port=65535 --user=dds:123456 -r dds --cert=/cert/cert.pem --pkey==/cert/cert.pem --log-file=stdout -v

–syslog 使用系统日志
-a 长期验证机制
-f 使用指纹
–min-port 起始用的最小端口
–max-port 最大端口号
–user=dds:123456 turn用户名和密码
-r realm组别
–cert PEM格式的证书
–pkey PEM格式的私钥文件
-l, --log-file, 指定日志文件

启动nginx服务

./usr/local/nginx/sbin/nginx

启动webrtc 服务

cd /root/webrtc/WebrtcNodeJS

node server

写在最后:
该文来自网易云课堂,本人只是学习添加了自己理解,方便后期查看,如有侵权请联系我删除。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!