centos上部署apprct

So丶執念_31ed · · 839 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一、环境准备:

nodejs环境:

获取nodejs 资源 :curl --silent --location 
https://rpm.nodesource.com/setup_5.x | bash -
这里的5.x换成你需要安装的版本
在执行 
yum install -y nodejs

python和jdk环境:

查看yum库中的Java安装包 .◆输入:yum -y list java* 
查找对应系统 下的安装包下载
yum -y install java-1.8.0-openjdk-devel.x86_64
yum install python python-requests

二、安装Google App Engine SDK for Python

1.  下载[https://cloud.google.com/sdk/docs/#linux](https://link.jianshu.com?t=https%3A%2F%2Fcloud.google.com%2Fsdk%2Fdocs%2F%23linux)
    选择对应版本下载
例如:https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-208.0.0-linux-x86_64.tar.gz
2.  解压到指定目录
``
sudo tar zxvf google-cloud-sdk-208.0.0-linux-x86_64.tar.gz 
sudo chmod 777 -R /google-cloud-sdk
  1. 配置
sudo vi /etc/profile

将路径添加到PATH项上

export PATH=$PATH:/root/webrtc/google-cloud-sdk/bin

三、房间服务器部署:

apprtc源码下载:
git clone https://github.com/webrtc/apprtc.git
cd apprtc/
npm i -g grunt-cli
npm install

主要是src/app_engine目录下的apprtc.py和constants.py文件。
对于src/app_engine目录下的文件每次修改后需执行命令grunt build重新编译,
也可以直接编辑out/app_engine目录下的apprtc.py和constants.py避免重新编译。
修改constants.py,TURN_BASE_URL需要填写本机的ip地址(注意:使用localhost会有错误):

#TURN_BASE_URL = 'https://computeengineondemand.appspot.com'
TURN_BASE_URL = 'http://10.10.29.56:8080'
TURN_URL_TEMPLATE = '%s/turn?username=%s&key=%s'
#CEOD_KEY = '4080218913'
CEOD_KEY = '1234'

ICE_SERVER_BASE_URL = 'http://10.10.29.56:8080'
ICE_SERVER_URL_TEMPLATE = '%s/v1alpha/iceconfig?key=%s'
ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')
WSS_INSTANCES = [{   
    #WSS_INSTANCE_HOST_KEY: 'apprtc-ws.webrtc.org:443',
    WSS_INSTANCE_HOST_KEY: '10.10.29.56:8089', 
    WSS_INSTANCE_NAME_KEY: 'wsserver-std',
    WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
  }, {
    #WSS_INSTANCE_HOST_KEY: 'apprtc-ws-2.webrtc.org:443',
    WSS_INSTANCE_HOST_KEY: '10.10.29.56:8089',
    WSS_INSTANCE_NAME_KEY: 'wsserver-std-2',
    WSS_INSTANCE_ZONE_KEY: 'us-central1-f'
}]

修改apprtc.py:

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 = 'wss://' + wss_host_port_pair + '/ws'
  wss_url = 'ws://' + wss_host_port_pair + '/ws'
  #wss_post_url = 'https://' + wss_host_port_pair
  wss_post_url = 'http://' + wss_host_port_pair
def make_pc_config(ice_transports):
  config = {
  'iceServers': [],
  #'iceServers': [{"urls":"stun:10.10.29.56"},{"urls":"turn:lin@10.10.29.56","credential":"1234"}],
  'bundlePolicy': 'max-bundle',
  'rtcpMuxPolicy': 'require'
  };
if ice_transports:
  config['iceTransports'] = ice_transports
  return config

把原来的wss和https的scheme都改为ws和http,不要让客户端或者浏览器去使用SSL链接。若有第三方根证书的签名机构颁发的证书可忽略。
修改完后重新执行:

grunt build

四、安装GO环境
下载GO安装包并解压

wget https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz --no-check-certificate
tar xvf go1.9.2.linux-amd64.tar.gz
(可以选择高点的版本或者其它方式安装go环境)
sudo mv go /usr/lib

编辑打开文件/etc/profile(也可根据自己需求选择其他环境配置文件编辑),在文件末尾添加两行

export GOROOT=/usr/lib/go
export PATH=$PATH:$GOROOT/bin

保存退出执行

source /etc/profile

五、配置信令服务器

  1. 新建目录(collider_root)用于存放apprtc里的Collider的go代码程序。
sudo mkdir -p /root/webrtc/collider_root
sudo mkdir /root/webrtc/collider_root/src
sudo chmod 777 -R /root/webrtc/collider_root
  1. /etc/profile中添加
export GOPATH=/root/webrtc/collider_root
export PATH=$PATH:$GOPATH/bin
  1. 建立链接(也可以直接将/root/apprtc/src/collider/目录中的collider、collidermain、collidertest直接拷贝到~/collider_root/src目录下)
ln -sf ~/apprtc-master/src/collider/collider $GOPATH/src/
ln -sf ~/apprtc-master/src/collidermain $GOPATH/src/
ln -sf ~/apprtc-master/src/collider/collidertest $GOPATH/src/
  1. 编辑$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://10.10.29.56:7000", "The origin of the room server")
  1. 编辑$GOPATH/collider/collider.go,设置信令服务器所需要用的HTTPS的证书文件, 找到如下代码,注释后改为这样:
//e = server.ListenAndServeTLS("/cert/cert.pem", "/cert/key.pem")
e = server.ListenAndServeTLS("/etc/nginx/apprtc.diveinedu.com.crt", "/etc/nginx/apprtc.diveinedu.com.key")

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

go get collidermain
go install collidermain

若go get collidermain命令运行失败(https访问导致),那么则用下面这个麻烦的方法:
自行下载:https://www.golangtc.com/static/download/packages/golang.org.x.net.tar.gz
然后解压到/opt/webrtc/collider_root/src目录

tar xvf golang.org.x.net.tar.gz
mv golang.org /opt/webrtc/collider_root/src
cd $GOPATH/src
go install golang.org/x/net/websocket/
go get collidermain
go install collidermain

7、运行

/opt/webrtc/collider_root/bin/collidermain -port=7001 -tls=false

六、STUN/TURN/ICE服务器的搭建

  1. 安装环境
yum install openssl-devel
yum install libevent2
yum install libevent-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
or
sudo apt-get install libssl-dev libevent-dev

2、下载源码(详细阅读安装手册 INSTALL)

git clone https://github.com/coturn/coturn 
cd coturn 
./configure 
make 
make install
or
cd /home/thf/Projects
wget http://turnserver.open-sys.org/downloads/v4.5.0.7/turnserver-4.5.0.7.tar.gz
tar xvfz turnserver-4.5.0.7.tar.gz
  1. 编译和安装
cd coturn
./configure
make
sudo make install
  1. coturn配置
    a) coturn源码的example/etc目录中有提供coturn的默认配置文件,以供我们使用,我们需要分别拷贝turnserver所需要的三个配置文件:
    首先在/etc目录下创建turnserver配置的存放目录:
sudo mkdir /etc/turnserver/

注: 这一步并不是必须的,因为turnserver启动时可以指定任意目录的配置文件。
b) 拷贝conf配置脚本
进入coturn目录

cd coturn
sudo cp ./examples/etc/turnserver.conf /etc/turnserver/
``
注: 在 examples 目录下的此配置文件,每个配置项均有说明,这样可以明白具体的参数含义;
此配置文件自己也可以新建,然后将后面章节中的内容直接粘贴进去;
c) 拷贝 pem 秘钥文件
为了做些明显的区分,我们将*.pem秘钥文件也拷贝到/etc/turnserver/目录(也可由 openssl命令生成,这里我们偷个懒,直接用默认的):

sudo cp ./examples/etc/turn_server_*.pem /etc/turnserver/

这里我们拷贝的秘钥文件,将在上一步的 turnserver.conf 配置文件中指定。
d) 生成coturn用户(可选)
通过turnadmin执行简单的命令,指定相应的用户名、密码、域名,既可将此账号添加到coturn的数据库中;
如下:

sudo turnadmin -a -u 用户名 -p 密码 -r 域名

执行成功后,通过turnadmin -l既可查看新创建的用户名及域名:

sudo turnadmin -a -u thf -p 123456 -r thf.com
turnadmin -l
thf[thf.com]表明创建成功!

其实这里我们指定的密码和域名暂时都是无关紧要的,因为后面我们在启动turnserver时,可以通过相关参数,给其指定固定的域名和密码。
e) 配置 turnserver.conf
建议:将之前拷贝的 turnserver.conf 文件备份,并新建一个 turnserver.conf 文件,将一下内容拷贝进入:

日志输出级别,turnserver 启动时加上 -v,可以得到更清晰的日志输出

Verbose

消息验证,WebRTC 的消息里会用到

fingerprint

webrtc 通过 turn 中继,必须使用长验证方式

lt-cred-mech

ICE REST API 认证需要

use-auth-secret

REST API 加密所需的 KEY

这里我们使用“静态”的 KEY,Google 自己也用的这个

static-auth-secret=1234

用户登录域,下面的写法可以不改变它,因为再启动 turnserver 时,可以通过指定参数覆盖它

realm=<填写你自己的域名>

可为 TURN 服务提供更安全的访问

stale-nonce

SSL 需要用到的, 生成命令:

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

listening-ip=192.168.164.128
listening-port=3478

tls-listening-port=7002

relay-ip=192.168.164.128

external-ip=192.168.164.128 --外网ip

relay-threads=50
use-auth-secret
static-auth-secret=1234
user=lin:0x7e3a2ed35d3cf7f19e2f8b015a186f54
(0x7e3a2ed35d3cf7f19e2f8b015a186f54 通过turnadmin -k -u lin -r north.gov -p lin
-k 表示生成一个long-term credential key
-u 表示用户名
-p 表示密码
-r 表示Realm域,(这个值的设置可能会有影响)。)
user=xml:1234

userdb=/etc/turnuserdb.conf

max-bps=1000000
cert=/etc/turnserver/turn_server_cert.pem
pkey=/etc/turnserver/turn_server_pkey.pem

max-bps=102400

pidfile="/var/run/turnserver.pid"

log-file=/home/thf/Projects/turnserver-4.5.0.7/turn.log

屏蔽 loopback, multicast IP地址的 relay

no-loopback-peers
no-multicast-peers

启用 Mobility ICE 支持(不懂)

mobility

禁用本地 telnet cli 管理接口

no-cli

5.  启动 turnserver
    通过 turnserver 实现 Peers 默认通过 turn 中继转发媒体数据流,进行音视频通话,其中一个关键点是coturn 需要布置到一个同时连接到两个网络的服务器(公网)上,如网卡一:公网,网卡二:私网(暂且还用不到),且需要同时联通网络,否则会出现两个Peers 只要开始连接,turnserver就会报 Allocation timeout的错误,目前原因需要通过跟踪代码去分析,暂时还未明确具体原因。
    启动turnserver可以通过如下命令进行启动:

turnserver -v -L 192.168.164.128 -a -f -r 192.168.164.128 -c /etc/turnserver/turnserver.conf

以上命令:通过 -v 指定日志输出级别; -L 指定用于绑定的网卡 IP 地址;-a 指定使用长期凭证机制,turn中继转发模式,必须使用长期凭证机制;-f 指定 turn 消息使用 fingerprint;-r 指定使用的域名,将覆盖 turnserver.conf 文件中的配置;-C 指定配置文件路径。
[https://webrtc.github.io/samples/src/content/pee/rconnection/trickle-ice](https://link.jianshu.com?t=https%3A%2F%2Fwebrtc.github.io%2Fsamples%2Fsrc%2Fcontent%2Fpee%2Frconnection%2Ftrickle-ice)
检验打洞服务器是否正常
七、grunt build 里的request安装问题解决方法:

sudo pip uninstall requests
sudo pip uninstall urllib3
sudo yum remove python-urllib3
sudo yum remove python-requests
sudo yum install python-urllib3
sudo yum install python-requests

八、Nginx反向代理搭建

yum install php

location / {
#root html;
#index testssl.html index.html index.htm;

  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://127.0.0.1:18085/;

}

location /v1alpha/iceconfig {
#add_header Access-Control-Allow-Origin *;
#proxy_redirect off;
#proxy_set_header Host host; #proxy_set_header X-Real-IPremote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:3033/v1alpha/iceconfig;
}

ice.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.post('/v1alpha/iceconfig', function (req, resp) {
var query = req.query
var key = 'apprtc.51buck.com'
var time_to_live = 600
var timestamp = Math.floor(Date.now() / 1000) + time_to_live
var turn_username = timestamp + ':buck'
var password = hmac(key, turn_username)

return resp.send({
iceServers: [
{
urls: [
'stun:apprtc.51buck.com:3478',
'turn:apprtc.51buck.com:3478'
],
username: turn_username,
credential: password
}
]
})
})

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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:So丶執念_31ed

查看原文:centos上部署apprct

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

839 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传