ubuntu 搭建apprtc 记录
搭建apprtc 主要分为3不大步骤
1.打洞服务器 turnserver
2.房间服务器 room-server
3.信令服务器 collider
一、coTurn 打洞服务器 配置
1.1安装依赖
sudo apt-get install libssl-dev
sudo apt-get install libevent-dev
1.2 下载并编译源码
- 依次执行即可:
cd ~
git clone https://github.com/coturn/coturn.git
cd coturn
configure
make
make install
1.3 turnserver 的证书
turnserver 的 证书在 turnserver-4.5.1.0/examples/etc/目录下有 直接用自带的证书即可
turn_server_cert.pem和turn_server_pkey.pem
1.4 启动turnserver 服务(10.140.0.6为内网ip, 34.80.18.14为外网ip)
注意:-u 是设置的turnserver 的账号密码 这里设置的账号和密码均为mvs cert 和pkey 为证书和密钥
turnserver的参数可以查看:https://github.com/coturn/coturn/wiki/turnserver
./turnserver-4.5.1.0/bin/turnserver -L 10.140.0.6 -a -u mvs:mvs -v -f -r 34.80.18.14 -cert=turn_server_cert.pem -pkey=turn_server_pkey.pem
二、房间服务器的搭建及需要的环境
2.1 jdk1.8安装:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载到/home/cc/java目录下 下载到/home/cc/java目录下
cd /home/cc/java
tar zxf jdk-8u201-linux-x64.tar.gz
设置java 的环境变量
//编辑配置文件
vim /etc/profile
//在文件最下面设置环境
JAVA_HOME=/home/cc/java/jdk1.8.0_201
export JRE_HOME=/home/cc/java/jdk1.8.0_201/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存退出profile文件之后执行 source /etc/profile 命令让 配置文件立马生效;
测试Java是否安装成功:
2.2node.js 安装
sudo apt-get install nodejs (ubuntu 14 不建议使用这种方式安装,建议源码安装:参考链接:https://blog.csdn.net/taoerchun/article/details/80943660)
sudo npm install -g npm
sudo apt-get install nodejs-legacy
sudo npm -g install grunt-cli
2.3 安装Python和Python-webtest (python2.7 环境)
ubuntu 一般都会自带python 2.7 输入 python -v 输出版本则已经有了
//没有则输入下命令
sudo apt-get install python
//python 安装之后安装 Python-webtest
sudo apt-get install python-webtest
2.4下载apprtc源码并安装
cd ~
//下载源码
git clone https://github.com/webrtc/apprtc.git
//编译
cd apprtc
npm install
如果在npm install 报如下错误可以换 cnpm install(cnpm需要下载) 解决 或者更换 npm 到淘宝镜像
- 修改配置文件:
修改:apprtc/src/app_engine/constants.py 文件 内容如下 34.80.18.14 是外网 ip:ICE_SERVER_BASE_URL = ‘https://34.80.18.14’
ICE_SERVER_URL_TEMPLATE = ‘%s/v1alpha/iceconfig?key=%s’
ICE_SERVER_API_KEY = os.environ.get(‘ICE_SERVER_API_KEY’)
WSS_INSTANCE_HOST_KEY = ‘34.80.18.148089’
WSS_INSTANCE_NAME_KEY = ‘vm_name’
WSS_INSTANCE_ZONE_KEY = ‘zone’
WSS_INSTANCES = [{
WSS_INSTANCE_HOST_KEY: ‘34.80.18.14:8089’,
WSS_INSTANCE_NAME_KEY: ‘wsserver-std’,
WSS_INSTANCE_ZONE_KEY: ‘us-central1-a’
}, {
WSS_INSTANCE_HOST_KEY: ‘34.80.18.14:8089’,
WSS_INSTANCE_NAME_KEY: ‘wsserver-std-2’,
WSS_INSTANCE_ZONE_KEY: ‘us-central1-f’
}]
说明一下apprtc/src/app_engine/apprtc.py 文件不需要修改 ,如果用http 需要改这里:
- 修改/apprtc/src/web_app/js/utils.js
** 找到requestIceServers 函数 把原来的函数注释换成新的函数如下:**
/**
function requestIceServers(iceServerRequestUrl, iceTransports) {
return new Promise(function(resolve, reject) {
sendAsyncUrlRequest(‘POST’, iceServerRequestUrl).then(function(response) {
var iceServerRequestResponse = parseJSON(response);
if (!iceServerRequestResponse) {
reject(Error('Error parsing response JSON: ’ + response));
return;
}
if (iceTransports !== ‘’) {
filterIceServersUrls(iceServerRequestResponse, iceTransports);
}
trace(‘Retrieved ICE server information.’);
resolve(iceServerRequestResponse.iceServers);
}).catch(function(error) {
reject(Error('ICE server request error: ’ + error.message));
return;
});
});
}**/
下面是修改后的:username 和credential 是turnserver 启动时设置的账号密码
function requestIceServers(iceServerRequestUrl, iceTransports) {
return new Promise(function(resolve, reject) {
var servers = [{
credential: “mvs”,
username: “mvs”,
urls: [
“turn:34.80.18.14:3478?transport=udp”,
“turn:34.80.18.14:3478?transport=tcp”
]
}];
resolve(servers);
});
}
- 编译
grunt build
2.5 安装google_appengine 需要fq
google_appengine 下载地址:
https://cloud.google.com/appengine/docs/standard/python/download
这里注意一下 别下成 Google Cloud SDK 了
点击下图的链接 下载 google_appengine 即可
- 下载解压完成设置环境变量:
sudo /etc/profile
export PATH=$PATH:/home/cc/google_appengine
source /etc/profile
2.6启动房间服务器
//进入到google_appengine根目录下 10.140.0.6 为本地ip
sudo ./dev_appserver.py --host=10.140.0.6 /home/cc/apprtc/out/app_engine
三、collider 信令服务器的搭建
collider 服务器在 apprtc 的源码里已经有了 在 apprtc/src/collider 路径下
3.1 安装go
sudo apt-get install golang-go(如果go版本过低 请源码安装)
//检测go 版本
go version
- 创建 的工作目录
mkdir -p ~/collider/src
- 将 apprtc/src/collider 路径下 的所有文件拷贝到 刚刚创建的 collider/src 目录下
- 这里需要生成 一个 自签名的ssl 证书:
sudo apt-get install openssl (有openssl 则不用安装)
sudo mkdir -p /cert
cd /cert
//私钥
openssl genrsa -out key.pem 2048
//自签证书
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
- 修改 collider/src/collider/collider.go 文件
打开collider.go 文件 把证书修改成刚才自己生成的证书:
- 设置GO 的环境变量
vim /etc/profile
export GOPATH=/home/cc/collider
source /etc/profile
3.2编译collide服务器
- 进入到collider/src,开始编译安装collider
go get collidermain go install collidermain
- 下面这段错误解决方法截至这个博客:https://blog.csdn.net/danfengw/article/details/68485223
3.3 启动信令服务器
cd /home/cc/collider/bin
./collidermain -port=8089 -tls=true -room-server="https://34.80.18.14 :8080"
四、nginx 的搭建反向代理https
4.1 安装nginx
- 下载 nginx 源码 http://nginx.org/download/ 下载解压
cd /home/ccnginx-1.15.6
./configure
make
make install
4.2修改配置文件
安装成功后 nginx 默认放置在/usr/local/nginx目录下
/usr/local/nginx/conf/nginx.conf 为主要配置文件
/usr/local/nginx/sbin/nginx 为执行文件
进入 修改成如下内容ssl_certificate 和ssl_certificate_key 分别时创建信令服务器时生成的证书和密钥
events {
worker_connections 1024;
}
http{
upstream roomserver {
server 34.80.18.14:8080;
}
server {
listen 80;
server_name 34.80.18.14;
return 301 https:// s e r v e r n a m e server_name servernamerequest_uri;
}
server {
root /usr/share/nginx/html;
index index.php index.html index.htm;
listen 443 ssl;
ssl_certificate /root/cert/cert.pem;
ssl_certificate_key /root/cert/key.pem;
server_name 34.80.18.14;
location / {
proxy_pass http://roomserver$request_uri;
proxy_set_header Host KaTeX parse error: Expected 'EOF', got '}' at position 10: host; }̲ location ~ .… {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
}
4.3启动nginx
cd /usr/local/nginx
sbin/nginx
五、视频
本地访问:https://lcoalhost 或 https://本地ip http://外网ip
外部 https://外网ip
六、最后的问题
- 出现下面跨越问题
一种解决办法是下面这种这个是在GitHub里看的亲测可行:
还有一种是 一下方法 在https://juejin.im/post/5bec4a3051882551236e7b35 在这个博客看的 没试过应该可以:
最后当然启动都可以在后台启动服务
主要参考博客链接:
https://juejin.im/post/5bec4a3051882551236e7b35
https://blog.csdn.net/jwcqc/article/details/53156347
https://blog.csdn.net/china_jeffery/article/details/80092309
https://blog.csdn.net/danfengw/article/details/68485223