TURN服务器搭建

本文详细介绍了在CentOS 7系统上从基础环境设置到Webrtc服务器的搭建过程,包括NodeJS环境配置、Turn服务器安装、nginx配置与SSL证书生成,以及Webrtc服务的部署和启动脚本编写。
摘要由CSDN通过智能技术生成


参考:https://github.com/androidtencent/WebrtcNodeJS,并将其中遇到的问题解决记录下

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

java项目:https://github.com/androidtencent/WebRtcJavaWeb

NodeJs项目 : https://github.com/ddssingsong/webrtc_server

本搭建是基于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
安装时  libevent2 始终安装失败,按照下面的重新安装一遍,忽略libevent2,已经安装的重复执行也不会有影响,会提示已经安装

        $ sudo yum install openssl-devel
        $ sudo yum install sqlite
        $ sudo yum install sqlite-devel
        $ sudo yum install libevent
        $ sudo yum install libevent-devel
        $ sudo yum install postgresql-devel
        $ sudo yum install postgresql-server
        $ sudo yum install mysql-devel
        $ sudo yum install mysql-server
        $ sudo yum install hiredis
        $ sudo yum install hiredis-devel    
1.3开始安装turn服务器

git clone https://github.com/coturn/coturn 
cd coturn 
./configure 
make 
sudo make install
 
查看是否安装成功

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.
 
安全访问秘钥 0xfb76c57e823de97df580e573437ef54a

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

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

创建内容

verbose
fingerprint
lt-cred-mech
realm=test
user=ddssingsong:0xfb76c57e823de97df580e573437ef54a
user=ddssingsong:123456
stale-nonce
no-loopback-peers
no-multicast-peers
mobility
no-cli
该配置文件是不存在的、

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

1.4安装Webrtc服务端

安装webrtc服务器和浏览器端
 
git clone https://github.com/androidtencent/WebrtcNodeJS
cd WebrtcNodeJS
npm install
1.5 安装nginx服务器(推荐用编译俩安装),

wget -C 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 
 
遇到问题:

错误为:./configure: error: the HTTP rewrite module requires the PCRE library.

安装pcre-devel解决问题

yum -y install pcre-devel

make的时候出问题:

src/core/ngx_murmurhash.c: 在函数‘ngx_murmur_hash2’中:

src/core/ngx_murmurhash.c:37:11: 错误:this statement may fall through [-Werror=implicit-fallthrough=]

37 | h ^= data[2] << 16;

| ~~^~~~~~~~~~~~~~~~

src/core/ngx_murmurhash.c:38:5: 附注:here

38 | case 2:

| ^~~~

src/core/ngx_murmurhash.c:39:11: 错误:this statement may fall through [-Werror=implicit-fallthrough=]

39 | h ^= data[1] << 8;

| ~~^~~~~~~~~~~~~~~

src/core/ngx_murmurhash.c:40:5: 附注:here

40 | case 1:

解决:

原因:将警告当成错误处理

第一步:解决错误1:进入到nginx-1.6.3目录下(解压的目录)

找到当前目录下找到objs文件夹,并进入,打开文件Makefile,找到有一下内容的这行:

CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  

-Werror: gcc将所有的警告当成错误进行处理把这行内容中的 “-Werror”去掉

第二步:

**/nginx-1.12.2/src/os/unix/

```/ngx_user.c** 文件中 修改:注释掉代码:

cd.current_salt[0] = ~salt[0];

解决方案参考:https://blog.csdn.net/yu_pan_love_cat/article/details/103035513

1.6 更改nginx 配置文件 (额外强调 其中包含https证书,下面会告诉生成方式),找到nginx的配置文件位置:/usr/local/nginx/conf,vim 打开vim nginx.conf

删除配置文件内容,更改为以下内容,注意: ssl_certificate     /cert/cert.crt;#配置证书  和它下面的一行是用来配置证书地址的,我们先把这个地址写上,然后在下面文档会在root目录下生成cert.crt证书,笔者配置时,还遇到access_log /var/log/nginx/access.log;报错,直接注释掉

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.7 生成nginx中的https证书

cd /  
//进入根目录
mkdir cert   
//新建cert文件夹用于放证书
cd cert 
//进入cert   
1.key的生成

openssl genrsa -des3 -out server.key 2048

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

openssl rsa -in server.key -out server.key

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

2.生成CA的crt

openssl req -new -x509 -key server.key -out ca.crt -days 3650

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

csr的生成方法
openssl req -new -key server.key -out server.csr

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

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

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

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

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

证书合并:

cat server.key server.crt > server.pem

注意:这里是直接拷贝的源博客的命令,命令生成的是server.crt证书 ,这我们之前在/usr/local/nginx/conf,vim 打开vim nginx.conf中配置的名称是不一样的,需要把配置改为server.crt,或者把上面的命令全部改成cert而不是server

1.8分别启动服务

启动turnserver服务

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

启动nginx服务

./usr/local/nginx/sbin/nginx

启动webrtc 服务

cd /root/webrtc/WebrtcNodeJS

node server

每个服务启动后,关闭窗口服务就关闭了 ,需要编写脚本,通过脚本开启就可以常驻后台了

 在webrtc目录 touch run.sh   新建run.sh文件

打开文件添加:

#!/bin/bash
 
NODE=`which node`
 
nohup $NODE server.js & > log.txt
nohup /usr/local/bin/turnserver --syslog -a -f --min-port=32355 --max-port=65535 --user=dds:123456 -r dds --cert=turn_server_cert.pem --pkey=turn_server_pkey.pem --log-file=stdout -v & > log.txt
./run.sh运行即可
————————————————
版权声明:本文为CSDN博主「zhangzhuo1024」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhangzhuo1024/article/details/119981235

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值