apprtc服务器搭建

yum install git

一、信令服务器搭建

1、安装GO环境
 

yum install golang
vi /etc/profile  
export GOROOT=/usr/lib/golang 
export PATH=$PATH:$GOROOT/bin
source /etc/profile

2、配置信令服务器

新建目录(collider_root)用于存放Collider的go代码程序。
 

mkdir /collider_root 
mkdir /collider_root/src
mkdir /collider_root/bin

在/etc/profile中添加

export GOPATH=/collider_root
export PATH=$PATH:$GOPATH/bin

建立链接
 

ln -s /apprtc/src/collider/collider $GOPATH/src 
ln -s /apprtc/src/collider/collidermain $GOPATH/src 
ln -s /apprtc/src/collider/collidertest $GOPATH/src 

编辑$GOPATH/collidermain/main.go,修改房间服务器为我们前面的房间服务器:

//var roomSrv = flag.String("room-server", "https://appr.tc", "The origin of the room server")
var roomSrv = flag.String("room-server", "http://39.106.73.63:8080", "The origin of the room server")

3、安装信令服务器依赖和collidermain

go get collidermain
go install collidermain

go get collidermain命令运行失败,那么则用下面这个麻烦的方法:

cd $GOPATH/src
wget http://www.golangtc.com/static/download/packages/golang.org.x.net.tar.gz
tar xvf golang.org.x.net.tar.gz
go install golang.org/x/net/websocket/

启动 collider 信令服务器

/collider-root/bin/collidermain -port=8089 -tls=false

 

二、centos coturn服务搭建

1.  克隆并安装

 

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

如果你的电脑上没有安装LibEvent2,需要先安装libevent-devel

error: OpenSSL Crypto library not found  

yum -y install openssl-devel

安装好之后使用which turnserver确保安装成功

[root@localhost local]# which turnserver
/usr/local/bin/turnserver

 设置配置文件:

在Coturn编译完成好之后会自动生成一个配置文件的模板,在/usr/local/etc/turnserver.conf.default,感兴趣的小伙伴可以仔细查看里面每一个配置项的含义。这里我们在新建一个新的配置文件/usr/local/etc/turnserver.conf,在这个里面编辑好之后使用turnserver命令会自动寻找到conf文件的位置

设置好 Coturn 配置

#本地监听的网卡设备,这里根据自己的实际情况填写
listening-device=eth0
listening-port=3478
#本地用于转发的网卡设备,这里根据自己的实际情况填写
relay-device=eth0
#指定的转发端口的分配范围,测试时,可以将防火墙全部关闭,防止 UDP 端口被屏蔽
min-port=3480
max-port=3500
#日志输出级别,turnserver 启动时加上 -v,可以得到更清晰的日志输出
Verbose
#消息验证,WebRTC 的消息里会用到
fingerprint
#webrtc 通过 turn 中继,必须使用长验证方式
lt-cred-mech
# ICE REST API 认证需要(如果打开了这行,turn就不工作了)
use-auth-secret
# REST API 加密所需的 KEY
# 这里我们使用“静态”的 KEY,Google 自己也用的这个
static-auth-secret=4080218913
#用户登录域,下面的写法可以不改变它,因为再启动 turnserver 时,可以通过指定参数覆盖它
realm=<填写你自己的服务器的IP>#这个特别关键,如果这里不是你的服务器的IP,数据就不通
#可为 TURN 服务提供更安全的访问(这个我没用,不知道干啥的)
#stale-nonce
#在Coturn代码中的/etc/examples/目录下有秘钥文件,可以直接用
cert=/coturn/pem/turn_server_cert.pem
pkey=/coturn/pem/turn_server_pkey.pem
#屏蔽 loopback, multicast IP地址的 relay
no-loopback-peers
no-multicast-peers
#启用 Mobility ICE 支持(不懂)
mobility
#禁用本地 telnet cli 管理接口
no-cli

 

 

上面cert和pkey配置的自签名证书用Openssl命令生成:

sudo openssl req -x509 -newkey rsa:2048 -keyout /coturn/pem/turn_server_pkey.pem -out /coturn/pem/turn_server_cert.pem -days 99999 -nodes

启动Coturn服务

turnserver -v /usr/local/etc/turnserver.conf

三、布署与启动 room 服务(appr.tc)

获取google_appengine

从https://download.csdn.net/download/china_jeffery/10375696下载google_appengine.tar,并使用tar命令解压:

mkdir /google_appengine
cd /google_appengine
unzip  google_appengine.tar

 

编辑/etc/profile

export PATH=$PATH:/google_appengine/

 

node直接使用sudo yum install nodejs-legacy安装版本过低,使用下面方法安装:

mkdir /nodejs
cd /nodejs
wget https://nodejs.org/dist/v9.5.0/node-v9.5.0-linux-x64.tar.gz  
tar xvf node-v9.5.0-linux-x64.tar.gz  

配置环境,编辑/etc/profile

export PATH=$PATH:/nodejs/node-v9.5.0-linux-x64/bin

保存退出执行source /etc/profile

安装 grunt

sudo apt-get install npm
sudo npm -g install grunt-cli

打开 apprtc/src/app_engine/constants.py 修改以下内容:

ICE_SERVER_BASE_URL = 'http://39.106.73.63:3033'
ICE_SERVER_URL_TEMPLATE = '%s/iceconfig?key=%s'
ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')

上面的配置是为了动态获取 stun/turn 服务器的密码,所以其IP地址与端口号应该与下面的 ICE REST API 服务中的一样,即端口号为 3033。

以及

# Dictionary keys in the collider instance info constant.
WSS_INSTANCE_HOST_KEY = 'host_port_pair'
WSS_INSTANCE_NAME_KEY = 'vm_name'
WSS_INSTANCE_ZONE_KEY = 'zone'
WSS_INSTANCES = [{
       WSS_INSTANCE_HOST_KEY: '39.106.73.63:8089',
       WSS_INSTANCE_NAME_KEY: 'wsserver-std',
       WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}]

上面这个配置是为了使房间服务器与信令服务器 collider 进行通讯,所以配置的 IP 和 端口要与上面设置collider时的一样。

apprtc.py:
修改get_wss_parameters(request) 下的

if wss_tls and wss_tls == 'false':  
    wss_url = 'ws://' + wss_host_port_pair + '/ws'  
    wss_post_url = 'http://' + wss_host_port_pair  
else:  
    wss_url = 'ws://' + wss_host_port_pair + '/ws'  
    wss_post_url = 'http://' + wss_host_port_pair

 

主要是把原来的wss和https的scheme都改为ws和http,不要让客户端和浏览器去使用ssl连接,如果有第三 方根证书的签名机构颁发的证书就不需要这样了。

 

 

安装 JDK
通过java -version 判断是否已经安装了 JDK,如果没有安装的话,先装 JDK安装上。别外 JDK只能安装 JDK7 或 JDK8,太高或太低的版本都不行。

sudo apt install openjdk-8-jdk

 

编译 apprtc
修改了 appr.tc 的代码后,使用 grunt build 进行编译,在 apprtc 目录下执行下面命令:

sudo npm install # 安装 apprtc 中需要的 nodejs 依赖包,其存放在 package.json 文件中
sudo grunt build

启动房间服务器

dev_appserver.py --host=0.0.0.0 /apprtc/out/app_engine

 

四、配置 ICE REST API 服务 

客户端连接 Room Server apprtc 后,通过 Room Server 得到用于获取 ICE Server 信息的 iceServerRequestUrl,然后浏览器和 AppRTC Demo 通过请求此 URL,得到 ICE Server 相关信息(返回 json)

首先安装 Express,Express 是一种保持最低程度规模的灵活 Node.js Web 应用程序框架,为 Web 和移动应用程序提供一组强大的功能。

npm install express --save

生成 index.js 代码文件,配置 REST API

mkdir /iceserver
cd /iceserver
vi index.js

index.js 文件,内容如下:

var express = require('express')
var crypto = require('crypto')
var app = express()

var hmac = function (key, content) {
  var method = crypto.createHmac('sha1', key)
  method.setEncoding('base64')
  method.write(content)
  method.end()
  return method.read()
}

app.get('/iceconfig', function (req, resp) {
  var query = req.query
  var key = '4080218913'
  var time_to_live = 600
  var timestamp = Math.floor(Date.now() / 1000) + time_to_live
  var turn_username = timestamp + ':gobert'
  var password = hmac(key, turn_username)

  resp.setHeader("Access-Control-Allow-Origin", "*");   //设置跨域访问
  
  return resp.send({
    iceServers: [
      {
        urls: [
          'turn:39.106.73.63:3478?transport=udp',
          'turn:39.106.73.63:3478?transport=tcp',
          'turn:39.106.73.63:3479?transport=udp',
          'turn:39.106.73.63:3479?transport=tcp'
        ],
        username: turn_username,
        credential: password
      }
    ]
  })
})

app.listen('3033', function () {
  console.log('server started')
})

上面代码中有几点要说明:

  1. 上面的turn:ip:3478这个不要换成域名。
  2. 用户名的格式为 时间戳:用户名。时间戳是由当前时间换成秒数 + 过期时间
  3. credential的值是key加密后base64编码,再与用户名连在一起。注意,这里的key要与 turn 配置文件中的 key保持一至
  4. 提供的必须是https服务。

注意:

resp.setHeader("Access-Control-Allow-Origin", "*");   //设置跨域访问

*添加此行代码,可以解决同源策略禁止跨域请求的问题,为了方便设置了 ,即所有域名,布置公网的话比较危险;

其中 turn server ip 地址请根据上面步骤中的配置自行修改!

最后通过 node 启动此脚本,外部即可访问:

node /iceserver/index.js

访问方法如:

http://100.100.32.64:3303/iceconfig?key=none

 


 

 

 

你可能感兴趣的:(apprtc服务器搭建)