Docker部署WebRTC Server AppRTC实现手机、浏览器互通简易指南

AppRTC是什么?

AppRTC是WebRTC Server Demo,具备Signaling Server、Room Server、TURN/STUN Server等相应功能。AppRTC作为服务端部分,可以实现Android 、iOS、浏览器等之间的视频通话。

源码:https://github.com/webrtc/apprtc

官网 Demo:https://appr.tc/

AppRTC怎么用?

使用官网Demo Server

手动搭建部署

源码是在Google app engine 的基础上部署的,由于Google Cloud服务不可用,这里使用了GAE SDK的方式部署。
由于网络和依赖等问题,这里不从零安装部署,使用了Piasy的Docker部署方案。

Docker常用命令

列出所有容器(运行和停止的)docker ps -a

停止容器                    
docker stop <container-id>

移除容器可读写层            
docker rm <container-id>

列出所有镜像                
docker images -a

删除镜像                    
sudo docker rmi c1fe6d45bdad

容器生成镜像              
docker commit -m "modify ice.js" -a "wildcreek" 4ebdd4587ced 

加载镜像进容器,并运行镜像bash      
docker run --rm --net=host -e PUBLIC_IP=x.x.x.x -v /root/docker/:/apprtc_configs -it  wildcreek/apprtc-server /bin/bash

Docker部署AppRTC简易指南

这里完全参考了Piasy的Docker部署方案,并修改了几个小问题。piasy的demo目前测试支持android互通;此demo目前测试firefox57 和android手机互通正常,chrome 要求必须支持https (getUserMedia) 和wss,尚未改造完成暂不支持。

第一步:安装Docker

第二步:拉取镜像

docker pull wildcreek/apprtc-server

第三步:修改配置

https://github.com/Piasy/WebRTC-Docker/blob/master/apprtc-server/constants.py

第四步:运行Server

docker run –rm –net=host -e PUBLIC_IP=x.x.x.x -v /root/docker/:/apprtc_configs -it wildcreek/apprtc-server
./run.sh

第五步:效果预览

Docker部署WebRTC Server AppRTC实现手机、浏览器互通简易指南_第1张图片

修改Docker容器后重新提交的简单思路

见 https://github.com/Piasy/WebRTC-Docker/issues/3 ,在此基础上修改,以此为例

  1. 修改 iceserver get方式获取

    cd /apprtc/src/web_app/js

    vim util.js //将requestIceServers POST方法修改为GET

  2. 修复ice.js CORS跨域访问问题

    resp.header(“Access-Control-Allow-Origin”, “*”)

    resp.header(“Access-Control-Allow-Credentials”,”true”)

    resp.header(“Access-Control-Allow-Headers”, “Origin, X-Requested-With, Content-Type, Accept”)

    resp.header(‘Access-Control-Allow-Methods’, ‘PUT, POST, GET, DELETE, OPTIONS’)

  3. 构建 :cd /apprtc ; grunt build

  4. 部署appengine :/usr/local/google_appengine/dev_appserver.py /apprtc/out/app_engine/

  5. 容器提交 docker commit -m “modify ice.js fix CORS” -a “wildcreek” 4ebdd4587ced wildcreek/apprtc-server

  6. 容器push: docker login ; docker push xxx/xxx

  7. nginx https转发
    7.1 nginx安装
    apt-get update
    apt-get install nginx
    7.2 创建私钥和证书

首先,进入你想创建证书和私钥的目录,例如:
cd /nginx

创建服务器私钥,命令会让你输入一个口令:
openssl genrsa -des3 -out server.key 1024

创建签名请求的证书(CSR):
openssl req -new -key server.key -out server.csr

在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

最后标记证书使用上述私钥和CSR:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

7.3 nginx配置
sudo vim /etc/nginx/nginx.conf
//sudo vim /etc/nginx/sites-available/default

server {
listen 443;
ssl on;
server_name x.x.x.x;
ssl_certificate /nginx/server.crt;
ssl_certificate_key /nginx/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

location / {
    # redirecting to http
    proxy_pass http://x.x.x.x:8080;
}

}

7.4 nginx 启动
service nginx -t
service nginx restart

7.5 容器提交 docker commit -m “nginx with https ,bug:need wss supprot” -a “wildcreek” 5e67a42e3fc6 wildcreek/apprtc-server

问题清单

已解决:
1. js跨域访问
2. https支持

未解决:
1. https需要配合wss使用,代码中为ws,提示:An insecure WebSocket connection may not be initiated from a page loaded over HTTPS

参见:https://stackoverflow.com/questions/28625351/uncaught-securityerror-failed-to-construct-websocket-an-insecure-websocket-c#

你可能感兴趣的:(webrtc)