在公网部署PION-ION实时音视频通话(含腾讯免费云服务器申请使用教程)
騰訊云服務(wù)免費獲取
通過訪問https://cloud.tencent.com/act/free?from=12639的“輕量應(yīng)用服務(wù)器”,獲取免費服務(wù)器。
騰訊云提供了非常具體的一步步教你云開發(fā)的教程,詳細(xì)的可以查看各種實驗室https://cloud.tencent.com/developer/labs/gallery?from=10680
首次申請需要實名認(rèn)證,掃微信即可。稍等一段時間會建立好服務(wù)器,先進(jìn)入后臺重置一下密碼,這樣就可以遠(yuǎn)程登錄了。
遠(yuǎn)程登錄教程https://cloud.tencent.com/document/product/1207/44578
1元錢購域名+云解析+SSL證書活動
https://cloud.tencent.com/act/domainsales?from=dnspodqcloud&_ga=1.73497554.1575153990.1605548464
域名購買后要實名認(rèn)證等一陣子,域名網(wǎng)址在https://console.cloud.tencent.com/domain
不弄域名的話不能啟用https訪問的功能。
域名解析在https://console.cloud.tencent.com/cns,我們要在這里配置解析,具體見下面的圖片,輸入你的服務(wù)器ip即可
ssl證書在https://console.cloud.tencent.com/ssl
安裝方法https://cloud.tencent.com/document/product/400/4143
本項目使用caddy服務(wù)器,跟上面還不太一樣,對應(yīng)安裝方法見后面章節(jié)。
在訪問服務(wù)器之前設(shè)置一下騰訊云的防火墻規(guī)則,暴露全部端口方便調(diào)試(這里只是為了確保能訪問,這樣很危險,生產(chǎn)環(huán)境不要這樣)
調(diào)試結(jié)束后只保留默認(rèn)的端口即可,即tcp的80和443,udp的5300-5500(這是我的sfu暴露出來的端口,也是docker-compose.yml定義的)
云服務(wù)器安裝docker
參考https://www.cnblogs.com/feige1314/p/6958420.html
官方教程https://cloud.tencent.com/developer/labs/lab/10414/console
Docker 軟件包已經(jīng)包括在默認(rèn)的 CentOS-Extras 軟件源里。因此想要安裝 docker,只需要運行下面的 yum 命令(炒雞快啊啊啊):
yum install docker-io -y
直接yum安裝,安裝成功后查看版本
docker -v
啟動docker
systemctl enable docker service docker start
設(shè)置開機啟動
chkconfig docker on
因為Docker的默認(rèn)源不在國內(nèi),導(dǎo)致拉取鏡像時時常會很慢。于是,我們可以添加鏡像加速器。
編輯并覆蓋以下內(nèi)容到
/etc/docker/daemon.json,使用vim或者vi打開編輯這個文件就好啦
{
"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已經(jīng)安裝成功了,你可以輸入docker-compose -v試試
在云服務(wù)器運行PION-ION
官方教程是用git的。
下載ion相關(guān)代碼運行
a) 安裝服務(wù)端
1) git clone https://github.com/pion/ion.git
2) docker network create ionnet
3) cd ion && docker-compose up --build,啟動后log會輸出到當(dāng)前屏幕上,按ctrl+c停止,如果希望放到后臺運行,執(zhí)行 “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
當(dāng)然也可以本地先下載解壓后上傳,我就是使用docker的方式云部署的
a) 安裝服務(wù)端
1)下載 https://sf6-dycdn-tos.pstatp.com/obj/eden-cn/nuhpeuhdlo/class/ion_all.tar
2)建立一個空的文件夾,將上述文件下載到新文件夾中,解壓后,加載所有鏡像 docker load --input xxxx.tar,加載完所有鏡像后執(zhí)行docker-compose up,啟動應(yīng)用
b) 安裝客戶端web
1)下載 https://sf6-dycdn-tos.pstatp.com/obj/eden-cn/nuhpeuhdlo/class/ion_app_web.tar
2)建立一個空的文件夾,將上述文件下載到新文件夾中,解壓后,加載所有鏡像 docker load --input xxxx.tar,加載完所有鏡像后執(zhí)行docker-compose up,啟動應(yīng)用
解壓后通過scp命令上傳,本地cmd進(jìn)入放有ion_all和ion_app_web兩個文件夾的ion文件夾,然后把ion文件夾發(fā)送到服務(wù)器,下面的xx.xx.xx.xx就是你遠(yuǎn)端服務(wù)器的ip,第一個root是用戶名,第二個root是目錄
scp -r ion root@xx.xx.xx.xx:/root
上傳完了之后分別進(jìn)入對應(yīng)的文件夾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
如果出現(xiàn)報錯
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
應(yīng)該是沒有開啟docker服務(wù),需要service docker start
load了之后分別進(jìn)入兩個文件夾開啟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,在后臺運行。可以隨時在對應(yīng)的目錄輸入docker-compose logs返回查看log界面
如果出現(xiàn)了報錯
-bash: docker-compose: command not found
是docker-compose安裝失敗或者未建立鏈接,參照前面的步驟重新用pip3安裝,或者運行
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
開放默認(rèn)的端口即可訪問服務(wù)器的服務(wù)了,即tcp的80和443,udp的5300-5500(這是我的sfu暴露出來的端口,也是docker-compose.yml定義的)
caddy服務(wù)器的證書安裝
如何確定自己服務(wù)器類型?在終端輸入
curl -I https://localhost:9090 -k
其中的-k我也是根據(jù)提示改的,是關(guān)閉了curl的驗證機制。
會告訴你server是什么,本項目是caddy。
caddy從當(dāng)前目錄的Caddyfile(默認(rèn))文件中讀取配置,本項目中的位置在/root/ion/ion_app_web/configs/caddy/local.Caddyfile
由于在web的Dockerfile中有這么一句話COPY configs/certs/ /app/certs/表明把configs/certs/掛載到了docker中的/app/certs/目錄下
原本的local.Caddyfile關(guān)于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證書都準(zhǔn)備好后,我們只需要把Caddyfile里面的所有的localhost改成我們的域名,即可從外部訪問了!(https://xx.xx.xx.xx.top:9090)
關(guān)于ssl證書
完善網(wǎng)站部署
現(xiàn)在我們知道了,web鏡像的docker-compose.yml中規(guī)定了容器可以被訪問的端口,而local.Caddyfile規(guī)定了訪問每個端口具體會展示一些什么。
在前面我們都是通過端口訪問的,并且還只能是網(wǎng)址中帶有https的訪問,光這樣我們當(dāng)然不太滿意,我們可以使用redir將http訪問重定向為https訪問,并且把暴露的端口修改為80和443(http和https),這樣無論外部怎么訪問我們的域名,都會被重定向為https鏈接。
我們將帶有端口的localhost直接換為了域名,就是規(guī)定了訪問域名會展示什么樣的頁面,其中reverse_proxy為反向代理,反向代理到了我們的biz服務(wù)中,其端口在另一個ion_all的docker-compose.yml中規(guī)定了。
下面是我們的local.Caddyfile,對應(yīng)的網(wǎng)頁端的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的級聯(lián)SFU的功能
ION-SFU架構(gòu)https://zhuanlan.zhihu.com/p/256366999?utm_source=wechat_session
jitsi meet實現(xiàn)SFU級聯(lián)https://webrtc.org.cn/20181125-webrtc-sfu-video/
Licode實現(xiàn)SFU級聯(lián)方案https://www.pianshen.com/article/23471978231/
SFU是星形拓?fù)涞慕Y(jié)構(gòu),大家都通過SFU獲取其他推流的信息,但是不同地區(qū)的用戶距離SFU的距離不一樣,會有很大的體驗上的差異。
解決辦法就是用戶選擇從最近的SFU上傳和獲取內(nèi)容,SFU之間通過級聯(lián)的方式傳遞這些內(nèi)容。
關(guān)于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:創(chuàng)建@自己的域名結(jié)尾的郵箱賬戶
參考https://cloud.tencent.com/document/product/613/46023
企業(yè)郵箱不都是有自己的@后綴嘛,實際上可以通過騰訊云的域名解析實現(xiàn)。
訪問https://exmail.qq.com/cgi-bin/readtemplate?t=new_index/versionCmp開通基礎(chǔ)版企業(yè)郵箱,注冊企業(yè)微信。
綁定自己的微信賬號之后可以通過https://exmail.qq.com/login登陸你的管理員或者成員賬號。
登陸管理員賬號,可以修改自己成員賬號的名稱,只支持修改一次,我修改為了master。
打開右上角的“我的企業(yè)”,在“企業(yè)信息”中添加“企業(yè)域名”,添加自有域名,對于騰訊云購買的域名,可以通過方法1自動跳轉(zhuǎn)到驗證界面,如果不能可以通過下面的方法來進(jìn)行。
訪問https://console.cloud.tencent.com/cns查看你的域名,點擊解析,然后添加郵箱模板。
Bonus2:構(gòu)建可大規(guī)模擴(kuò)展的多方視頻應(yīng)用程序
Jitsi Meet - Secure, Simple and Scalable Video Conferences
https://github.com/jitsi/jitsi-meet
https://jitsi.org/jitsi-videobridge/
總結(jié)
以上是生活随笔為你收集整理的在公网部署PION-ION实时音视频通话(含腾讯免费云服务器申请使用教程)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: laravel 浏览器图标的设置方式
- 下一篇: opencv 中affine函数实现旋转