centos上部署apprct

來源:互聯網
上載者:User

一、環境準備:

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_64yum 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.gz2.  解壓到指定目錄``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.gitcd apprtc/npm i -g grunt-clinpm 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_pairelse:  #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_pairdef 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-certificatetar xvf go1.9.2.linux-amd64.tar.gz(可以選擇高點的版本或者其它方式安裝go環境)sudo mv go /usr/lib

編輯開啟檔案/etc/profile(也可根據自己需求選擇其他環境設定檔編輯),在檔案末尾添加兩行

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

儲存退出執行

source /etc/profile

五、配置信令伺服器

  1. 建立目錄(collider_root)用於存放apprtc裡的Collider的go代碼程式。
sudo mkdir -p /root/webrtc/collider_rootsudo mkdir /root/webrtc/collider_root/srcsudo chmod 777 -R /root/webrtc/collider_root
  1. /etc/profile中添加
export GOPATH=/root/webrtc/collider_rootexport 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 collidermaingo 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.gzmv golang.org /opt/webrtc/collider_root/srccd $GOPATH/srcgo install golang.org/x/net/websocket/go get collidermaingo install collidermain

7、運行

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

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

  1. 安裝環境
yum install openssl-develyum install libevent2yum install libevent-develyum install sqliteyum install sqlite-develyum install postgresql-develyum install postgresql-serveryum install mysql-develyum install mysql-serveryum install hiredisyum install hiredis-develorsudo apt-get install libssl-dev libevent-dev

2、下載源碼(詳細閱讀安裝手冊 INSTALL)

git clone https://github.com/coturn/coturn cd coturn ./configure make make installorcd /home/thf/Projectswget http://turnserver.open-sys.org/downloads/v4.5.0.7/turnserver-4.5.0.7.tar.gztar xvfz turnserver-4.5.0.7.tar.gz
  1. 編譯和安裝
cd coturn./configuremakesudo make install
  1. coturn配置
    a) coturn源碼的example/etc目錄中有提供coturn的預設設定檔,以供我們使用,我們需要分別拷貝turnserver所需要的三個設定檔:
    首先在/etc目錄下建立turnserver配置的存放目錄:
sudo mkdir /etc/turnserver/

註: 這一步並不是必須的,因為turnserver啟動時可以指定任意目錄的設定檔。
b) 拷貝conf配置指令碼
進入coturn目錄

cd coturnsudo 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反向 Proxy搭建

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')
})

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.