详细过程-部署你自己的WebRTC服务器

非常重要的一点,如果要跟本文一样做,那你必须会科学上网
不管在内网还是外网,如果要演示webrtc,必须使用域名并且部署为https站点(本文用Nginx做反向代理实现),不过ssl签名可以用假的证书,只要浏览器访问时忽略证书错误就可以了。
本文基于官方文档(此时git中提交码是dd7ef19)而来,主要补全一些注意事项和容易出现问题的地方。

本文成功的案例使用的系统是ubuntu 14.04

官方文档提到需要用到的Google App Engine SDK for Python, Node.js and Grunt. 其中GAE实际上不需要专门下载,在用grunt编译一次后会下载到代码目录/temp下

Node.js不要使用apt-get装,那版本还停留在0.10,可以到官网下载Node.js 6.x或者7.x,解压tar.gz到任意目录,用ln -s命令,在/usr/bin/建立连接,或者export到path里

Grunt就是安装好nodejs后安装sudo npm install -g grunt-cli

官网没说的还有一个需要的是JAVA,推荐安装open java 7

然后是golang,下载1.8, 安装教程参考 https://golang.org/doc/install  英文不需要很懂,就两个命令

1.  tar -C /usr/local -xzf go1.8.linux-amd64.tar.gz
2.  export PATH=$PATH:/usr/local/go/bin

说明: 1.解压到/usr/local/go. 2. 加入PATH环境变量中,这样可以直接使用go命令
Ubuntu已经自带python,但是没有pip,需要下载9.0.1版的安装脚本,在这里下 https://bootstrap.pypa.io/get-pip.py
然后一个命令 python get-pip.py (如果提示权限问题,前面加 sudo)
之前试过用apt-get装的python-pip也是版本太低,使用中会出错。这是一个坑。

准备妥当后,下载代码到某个文件夹,代码下载地址 本文例子是~/apprtc/

准备信令服务器Collider,通过几个命令就可以实现(此时命令行处于当前用户的主目录~/)

export GOPATH=$HOME/goprj/ mkdir $GOPATH/src

设置go语言的工作目录(相当于eclips的workspace目录)

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

通过go来下载和安装collider

go get collidermain

go install collidermain

看看能不能运行成功

$GOPATH/bin/collidermain -port=8089 -tls=true

文件collider/collidermain/main.go里面有一行代码,可以修改自己的域名

var roomSrv = flag.String("room-server", "https://your.apprtc.server", "The origin of the room server")

启动collider(通过这个服务,才能建立websocket)
$GOPATH/bin/collidermain -port=8089 -tls=true
(如果tls设为false也可以,就是在主程序src/app_engine/apprtc.py里面要修改代码,把wss://和https://改为ws://和http://,原来代码见下面)

if wss_tls and wss_tls == 'false':
  ......(省略)
else:
    wss_url = 'wss://' + wss_host_port_pair + '/ws'
    wss_post_url = 'https://' + wss_host_port_pair

准备穿透防火墙,用的是coturn
按照这个文档,下载libevent和turnserver代码并且安装
然后不需要按文档里的操作,跳过到启动服务就可以了。

turnserver -L 你的IP -a -f -r 你的IP或者域名  

后面一个用域名和ip都可以

回到开头下载好的apprtc代码的文件夹里,然后运行 grunt编译一次。 成功无任何错误后才行
此时在temp文件夹下会有 google_cloud_sdk 复制到外面比较方便的地方,然后路径加到PATH
修改文件apprtc/src/app_engine/constants.py把下面的代码中,第一行注释,另外的取消注释

TURN_SERVER_OVERRIDE = []

# TURN_SERVER_OVERRIDE = [
#   {
#     "urls": [
#       "turn:hostname/IpToTurnServer:19305?transport=udp",
#       "turn:hostname/IpToTurnServer:19305?transport=tcp"
#     ],
#     "username": "TurnServerUsername",
#     "credential": "TurnServerCredentials"
#   },
#   {
#     "urls": [
#       "stun:hostname/IpToStunServer:19302"
#     ]
#   }
# ]

然后把第一个(有两个WSS_INSTANCE_HOST_KEY,第二个不用管)

WSS_INSTANCE_HOST_KEY: 'apprtc-ws.webrtc.org:443',

改为刚才运行的collider地址,比如192.168.15.100:8089
保存后再运行grunt build一次。 在out目录下会更新app_engine程序,这就是服务器代码,chrome_app是生成的web服务器代码
运行webrtc, 通过一条命令/dev_appserver.py –host 你的IP ./out/app_engine
这样通过http://你的IP:8080就可以访问了。 但是你会发现,别的电脑访问的时候,提示不用调用getMedia接口,因为不安全,所以可以用Nginx反向代理成一个https的网站
具体方式很简单,就不说了。