腾讯云服务免费获取
通过访问https://cloud.tencent.com/act/free?from=12639的“轻量应用服务器”,获取免费服务器。
腾讯云提供了非常具体的一步步教你云开发的教程,详细的可以查看各种实验室https://cloud.tencent.com/developer/labs/gallery?from=10680
首次申请需要实名认证,扫微信即可。稍等一段时间会建立好服务器,先进入后台重置一下密码,这样就可以远程登录了。
远程登录教程https://cloud.tencent.com/document/product/1207/44578
1元钱购域名+云解析+SSL证书活动
https://cloud.tencent.com/act/domainsales?from=dnspodqcloud&_ga=1.73497554.1575153990.1605548464
域名购买后要实名认证等一阵子,域名网址在https://console.cloud.tencent.com/domain
不弄域名的话不能启用https访问的功能。
域名解析在https://console.cloud.tencent.com/cns,我们要在这里配置解析,具体见下面的图片,输入你的服务器ip即可
ssl证书在https://console.cloud.tencent.com/ssl
安装方法https://cloud.tencent.com/document/product/400/4143
本项目使用caddy服务器,跟上面还不太一样,对应安装方法见后面章节。
在访问服务器之前设置一下腾讯云的防火墙规则,暴露全部端口方便调试(这里只是为了确保能访问,这样很危险,生产环境不要这样)
调试结束后只保留默认的端口即可,即tcp的80和443,udp的5300-5500(这是我的sfu暴露出来的端口,也是docker-compose.yml定义的)
云服务器安装docker
参考https://www.cnblogs.com/feige1314/p/6958420.html
官方教程https://cloud.tencent.com/developer/labs/lab/10414/console
Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令(炒鸡快啊啊啊):
yum install docker-io -y
直接yum安装,安装成功后查看版本
docker -v
启动docker
systemctl enable docker
service docker start
设置开机启动
chkconfig docker on
Docker
的默认源不在国内,导致拉取镜像时时常会很慢。于是,我们可以添加镜像加速器。{ "registry-mirrors": ["https://registry.docker-cn.com"] }
(x) 我也是后来才知道的,之前是这么操作的(贼慢):https://docs.docker.com/engine/install/centos/
安装docker-compose
(官方的这个教程有问题)首先我们需要先安装并升级 pip
yum install python-pip -y pip install --upgrade pip
pip
安装 Docker Compose
pip install docker-compose --ignore-installed
Docker Compose
是否安装正确docker-compose -v
反正我会报错SyntaxError: invalid syntax,如果你也是,那就用使用pip3安装:
yum install -y python3 python3-pip sudo pip3 install -U pip sudo pip3 install docker-compose
如果你还是报错SyntaxError: invalid syntax,请卸载掉之前python2.7版本的pip安装的docker-compose
pip uninstall docker-compose
到这里docker-compose已经安装成功了,你可以输入docker-compose -v试试
在云服务器运行PION-ION
官方教程是用git的。
下载ion相关代码运行
a) 安装服务端
1) git clone https://github.com/pion/ion.git
2) docker network create ionnet
3) cd ion && docker-compose up --build,启动后log会输出到当前屏幕上,按ctrl+c停止,如果希望放到后台运行,执行 “docker-compose up --build -d ”
b) 安装客户端web
1)git clone https://github.com/pion/ion-app-web.git
2)cd ion-app-web && docker-compose up --build
如果git clone下载太慢,参考这个解决方法https://www.cnblogs.com/rxbook/p/11869835.html
当然也可以本地先下载解压后上传,我就是使用docker的方式云部署的
a) 安装服务端
1)下载 https://sf6-dycdn-tos.pstatp.com/obj/eden-cn/nuhpeuhdlo/class/ion_all.tar
2)建立一个空的文件夹,将上述文件下载到新文件夹中,解压后,加载所有镜像 docker load --input xxxx.tar,加载完所有镜像后执行docker-compose up,启动应用
b) 安装客户端web
1)下载 https://sf6-dycdn-tos.pstatp.com/obj/eden-cn/nuhpeuhdlo/class/ion_app_web.tar
2)建立一个空的文件夹,将上述文件下载到新文件夹中,解压后,加载所有镜像 docker load --input xxxx.tar,加载完所有镜像后执行docker-compose up,启动应用
解压后通过scp命令上传,本地cmd进入放有ion_all和ion_app_web两个文件夹的ion文件夹,然后把ion文件夹发送到服务器,下面的xx.xx.xx.xx就是你远端服务器的ip,第一个root是用户名,第二个root是目录
scp -r ion root@xx.xx.xx.xx:/root
上传完了之后分别进入对应的文件夹load一下
cd /root/ion/ion_all docker load --input gcr.io_etcd-development_etcd_v3.4.9.tar docker load --input nats_latest.tar docker load --input pionwebrtc_ion-avp_latest.tar docker load --input pionwebrtc_ion-biz_latest.tar docker load --input pionwebrtc_ion-islb_latest.tar docker load --input pionwebrtc_ion-sfu_latest.tar docker load --input redis_5.0.9.tar
cd /root/ion/ion_app_web docker load --input ion-app-web_web_latest.tar
如果出现报错
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
应该是没有开启docker服务,需要 service docker start
load了之后分别进入两个文件夹开启docker-compose,需要注意的是每一次up开启后不会接收之后的指令,所以需要开两个终端,分别up
cd /root/ion/ion_all sudo docker-compose up -d cd /root/ion/ion_app_web sudo docker-compose up -d
加-d是detach,在后台运行。可以随时在对应的目录输入 docker-compose logs 返回查看log界面
如果出现了报错
-bash: docker-compose: command not found
是docker-compose安装失败或者未建立链接,参照前面的步骤重新用pip3安装,或者运行
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
开放默认的端口即可访问服务器的服务了,即tcp的80和443,udp的5300-5500(这是我的sfu暴露出来的端口,也是docker-compose.yml定义的)
caddy服务器的证书安装
如何确定自己服务器类型?在终端输入
curl -I https://localhost:9090 -k
其中的-k我也是根据提示改的,是关闭了curl的验证机制。
会告诉你server是什么,本项目是caddy。
caddy从当前目录的Caddyfile(默认)文件中读取配置,本项目中的位置在/root/ion/ion_app_web/configs/caddy/local.Caddyfile
由于在web的Dockerfile中有这么一句话 COPY configs/certs/ /app/certs/ 表明把configs/certs/挂载到了docker中的/app/certs/目录下
原本的local.Caddyfile关于tls的位置是这么写的
tls /app/certs/cert.pem /app/certs/key.pem
所以我们只需要把证书放到/root/ion/ion_app_web/configs/certs/文件夹中,然后把Caddyfile改成,crt和key文件是你的Apache版本的ssl证书
tls /app/certs/2_xxx.top.crt /app/certs/3_xxx.top.key
同时还需要在/root/ion/ion_app_web/docker-compose.yml文件中挂载一下certs目录(好像主要是这个操作起作用)
volumes: - "./configs/certs/:/app/certs/"
这时候再返回/root/ion/ion_app_web/目录就可以运行容器了,打开浏览器访问https://xx.xx.xx.xx.top:9090不会再提示证书不可信了,变成了小绿锁。
等到DNS解析和SSL证书都准备好后,我们只需要把Caddyfile里面的所有的localhost改成我们的域名,即可从外部访问了!(https://xx.xx.xx.xx.top:9090)
关于ssl证书
完善网站部署
现在我们知道了,web镜像的docker-compose.yml中规定了容器可以被访问的端口,而local.Caddyfile规定了访问每个端口具体会展示一些什么。
在前面我们都是通过端口访问的,并且还只能是网址中带有https的访问,光这样我们当然不太满意,我们可以使用redir将http访问重定向为https访问,并且把暴露的端口修改为80和443(http和https),这样无论外部怎么访问我们的域名,都会被重定向为https链接。
我们将带有端口的localhost直接换为了域名,就是规定了访问域名会展示什么样的页面,其中reverse_proxy为反向代理,反向代理到了我们的biz服务中,其端口在另一个ion_all的docker-compose.yml中规定了。
下面是我们的local.Caddyfile,对应的网页端的docker-compose.yml中只暴露了80和443端口。
1 www.你的域名 { 2 redir https://你的域名{url} 3 } 4 5 你的域名 { 6 root * /app/dist 7 file_server 8 9 tls /app/certs/2_你的域名.crt /app/certs/3_你的域名.key 10 11 reverse_proxy /ws biz:8443 { 12 header_up Sec-WebSocket-Protocol {>Sec-WebSocket-Protocol} 13 } 14 }
ION的级联SFU的功能
ION-SFU架构https://zhuanlan.zhihu.com/p/256366999?utm_source=wechat_session
jitsi meet实现SFU级联https://webrtc.org.cn/20181125-webrtc-sfu-video/
Licode实现SFU级联方案https://www.pianshen.com/article/23471978231/
SFU是星形拓扑的结构,大家都通过SFU获取其他推流的信息,但是不同地区的用户距离SFU的距离不一样,会有很大的体验上的差异。
解决办法就是用户选择从最近的SFU上传和获取内容,SFU之间通过级联的方式传递这些内容。
关于sfu<->sfu relay,可以查看这些issue下的讨论
https://github.com/pion/ion/pull/344
https://github.com/pion/ion/pull/350
在源码中写了目前还不支持此功能
# islb relay isn\'t finished yet, so only 1 sfu is supported
# when relay is ready, we\'ll switch to DaemonSet (1 pod per node)
# so the connections will be spread across the cluster
+ Only 1 SFU is currently supported (pending ISLB Relay Feature)
+ SFU is currently configured as a Deployment(scale=1); this will be changed to a DaemonSet (1 pod per node) once Relay is supported
Bonus:创建@自己的域名结尾的邮箱账户
参考https://cloud.tencent.com/document/product/613/46023
企业邮箱不都是有自己的@后缀嘛,实际上可以通过腾讯云的域名解析实现。
访问https://exmail.qq.com/cgi-bin/readtemplate?t=new_index/versionCmp开通基础版企业邮箱,注册企业微信。
绑定自己的微信账号之后可以通过https://exmail.qq.com/login登陆你的管理员或者成员账号。
登陆管理员账号,可以修改自己成员账号的名称,只支持修改一次,我修改为了master。
打开右上角的“我的企业”,在“企业信息”中添加“企业域名”,添加自有域名,对于腾讯云购买的域名,可以通过方法1自动跳转到验证界面,如果不能可以通过下面的方法来进行。
访问https://console.cloud.tencent.com/cns查看你的域名,点击解析,然后添加邮箱模板。
Bonus2:构建可大规模扩展的多方视频应用程序
Jitsi Meet - Secure, Simple and Scalable Video Conferences
https://github.com/jitsi/jitsi-meet
https://jitsi.org/jitsi-videobridge/