在公網部署PION-ION實時音視頻通話(含騰訊免費雲服務器申請使用教程)


騰訊雲服務免費獲取

通過訪問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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM