centos上部署apprct

一蔚鸥、環(huán)境準備:

nodejs環(huán)境:

獲取nodejs 資源 :curl --silent --location 
https://rpm.nodesource.com/setup_5.x | bash -
這里的5.x換成你需要安裝的版本
在執(zhí)行 
yum install -y nodejs

python和jdk環(huán)境:

查看yum庫中的Java安裝包 .◆輸入:yum -y list java* 
查找對應系統(tǒng) 下的安裝包下載
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
source /etc/profile

三、房間服務器部署:

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目錄下的文件每次修改后需執(zhí)行命令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 = 'https://rtc.tlifang.com:3478'
TURN_URL_TEMPLATE = '%s/turn?username=%s&key=%s'
#CEOD_KEY = '4080218913'
CEOD_KEY = 'myvm'

ICE_SERVER_BASE_URL = 'https://rtc.tlifang.com'
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: 'rtc.tlifang.com: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: 'rtc.tlifang.com: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

把原來的wss和https的scheme都改為ws和http榜晦,不要讓客戶端或者瀏覽器去使用SSL鏈接冠蒋。若有第三方根證書的簽名機構頒發(fā)的證書可忽略。
修改完后重新執(zhí)行:

grunt build

四乾胶、安裝GO環(huán)境
方式一抖剿、

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install golang -y

方式二、
下載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環(huán)境)
sudo mv go /usr/lib

編輯打開文件/etc/profile(也可根據(jù)自己需求選擇其他環(huán)境配置文件編輯)胚吁,在文件末尾添加兩行

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

保存退出執(zhí)行

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", "https://rtc.tlifang.com", "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/tlifang.com.crt", "/etc/nginx/tlifang.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. 安裝環(huán)境
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目錄下創(chuàng)建turnserver配置的存放目錄:
sudo mkdir /etc/turnserver/

注: 這一步并不是必須的史简,因為turnserver啟動時可以指定任意目錄的配置文件乃秀。
b) 拷貝conf配置腳本
進入coturn目錄

cd coturn
sudo cp ./examples/etc/turnserver.conf /etc/turnserver/
``
注: 在 examples 目錄下的此配置文件,每個配置項均有說明圆兵,這樣可以明白具體的參數(shù)含義跺讯;
此配置文件自己也可以新建,然后將后面章節(jié)中的內容直接粘貼進去殉农;
c) 拷貝 pem 秘鑰文件
為了做些明顯的區(qū)分刀脏,我們將*.pem秘鑰文件也拷貝到/etc/turnserver/目錄(也可由 openssl命令生成,這里我們偷個懶超凳,直接用默認的):

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

這里我們拷貝的秘鑰文件愈污,將在上一步的 turnserver.conf 配置文件中指定。
d) 生成coturn用戶(可選)
通過turnadmin執(zhí)行簡單的命令轮傍,指定相應的用戶名暂雹、密碼、域名金麸,既可將此賬號添加到coturn的數(shù)據(jù)庫中擎析;
如下:

sudo turnadmin -a -u 用戶名 -p 密碼 -r 域名

執(zhí)行成功后,通過turnadmin -l既可查看新創(chuàng)建的用戶名及域名:

sudo turnadmin -a -u myvm -p myvm -r rtc.tlifang.com
turnadmin -l
thf[thf.com]表明創(chuàng)建成功!

其實這里我們指定的密碼和域名暫時都是無關緊要的揍魂,因為后面我們在啟動turnserver時桨醋,可以通過相關參數(shù),給其指定固定的域名和密碼现斋。
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

這里我們使用“靜態(tài)”的 KEY限书,Google 自己也用的這個

static-auth-secret=myvm

用戶登錄域虫蝶,下面的寫法可以不改變它,因為再啟動 turnserver 時倦西,可以通過指定參數(shù)覆蓋它

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-device=eth0
listening-ip=192.168.164.128 --內網(wǎng)ip
listening-port=3478

tls-listening-port=7002

relay-ip=192.168.164.128

external-ip=192.168.164.128 --外網(wǎng)ip
relay-threads=50
use-auth-secret
static-auth-secret=myvm
user=myvm:0x7e3a2ed35d3cf7f19e2f8b015a186f54
(0x7e3a2ed35d3cf7f19e2f8b015a186f54 通過turnadmin -k -u myvm -r rtc.tlifang.com -p myvm
-k 表示生成一個long-term credential key
-u 表示用戶名
-p 表示密碼
-r 表示Realm域能真,(這個值的設置可能會有影響)。)
user=myvm:myvm

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 實現(xiàn) Peers 默認通過 turn 中繼轉發(fā)媒體數(shù)據(jù)流扰柠,進行音視頻通話粉铐,其中一個關鍵點是coturn 需要布置到一個同時連接到兩個網(wǎng)絡的服務器(公網(wǎng))上,如網(wǎng)卡一:公網(wǎng)卤档,網(wǎng)卡二:私網(wǎng)(暫且還用不到)蝙泼,且需要同時聯(lián)通網(wǎng)絡,否則會出現(xiàn)兩個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 指定用于綁定的網(wǎng)卡 IP 地址;-a 指定使用長期憑證機制琢唾,turn中繼轉發(fā)模式,必須使用長期憑證機制盾饮;-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 = 'myvm'
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:rtc.tlifang.com:3478',
'turn:rtc.tlifang.com:3478'
],
username: turn_username,
credential: password
}
]
})
})

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末衔蹲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舆驶,老刑警劉巖橱健,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沙廉,居然都是意外死亡拘荡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門撬陵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珊皿,“玉大人,你說我怎么就攤上這事巨税◇ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵草添,是天一觀的道長驶兜。 經(jīng)常有香客問我,道長果元,這世上最難降的妖魔是什么促王? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮而晒,結果婚禮上蝇狼,老公的妹妹穿的比我還像新娘。我一直安慰自己倡怎,他們只是感情好迅耘,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著监署,像睡著了一般颤专。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钠乏,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天栖秕,我揣著相機與錄音,去河邊找鬼晓避。 笑死簇捍,一個胖子當著我的面吹牛,可吹牛的內容都是我干的俏拱。 我是一名探鬼主播暑塑,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锅必!你這毒婦竟也來了事格?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驹愚,沒想到半個月后远搪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡么鹤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年终娃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒸甜。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡棠耕,死狀恐怖,靈堂內的尸體忽然破棺而出柠新,到底是詐尸還是另有隱情窍荧,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布恨憎,位于F島的核電站蕊退,受9級特大地震影響,放射性物質發(fā)生泄漏憔恳。R本人自食惡果不足惜瓤荔,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钥组。 院中可真熱鬧输硝,春花似錦、人聲如沸程梦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屿附。三九已至郎逃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挺份,已是汗流浹背褒翰。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留匀泊,地道東北人影暴。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像探赫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撬呢,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內容