webrtc服務器搭建

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

寫在最後:
該文來自網易雲課堂,本人只是學習添加了自己理解,方便後期查看,如有侵權請聯繫我刪除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章