利用BT構建簡單的CDN網路
種子下載源需部署到公網伺服器上,部署在內網伺服器上沒見成功下載過。
一、 伺服器上部署tracker服務 tracker伺服器建議採用OpenTracker(據說可以在生產環境下使用)。OpenTracker/BitTorrent3.4.2/BitTorrent5.0.9/BitTornado任選其一,建議OpenTracker
系統環境:
python2.7
(一) 關閉防火牆或設定允許 systemctl status firewalld systemctl stop firewalld
(二) OpenTracker yum install epel-release yum -y groupinstall “Development Tools” yum -y install openssl-devel zlib-devel
先編譯libowfat: cd libowfat make
然後再編譯opentracker: cd … cd opentracker make
如果編譯中出現__builtin_bswap16相關的錯誤,則 vi libowfat/uint16.h 加入 static inline unsigned short __builtin_bswap16(unsigned short a) { return (a<<8)|(a>>8); }
完成之後,我們將二進位制檔案移動到/usr/bin: cp opentracker /usr/bin
/usr/bin/opentracker -p 1337 -P 1337
製作種子的時候,我們新增Tracker伺服器時,可以這麼寫: http://你的伺服器公網IP:1337/announce
或者: udp://你的伺服器公網IP:1337/announce
當然也可以同時新增http和udp,這個不受影響。注意:udp的相容性不好,舊的bt客戶端不支援,如BitTorrent3.4.2
OpenTracker還有一個自帶的統計功能: http://你的伺服器公網IP:1337/stats
更詳細的統計資訊訪問: http://你的伺服器公網IP:1337/statsmode=everything
(三) BitTorrent3.4.2 參考:https://blog.csdn.net/deccmtd/article/details/5432495
1、安裝bittorrent BitTorrentg下載 tar zxvf BitTorrent-3.4.2.tar.gz cd BitTorrent-3.4.2 python setup.py install
2、啟動Tracker服務 ./bttrack.py –port 6969 –dfile dstate >>/var/log/bttrack.log #表示開啟6969並記錄log
3、製作BT釋出檔案
(四) BitTorrent5.0.9
yum install python-devel python-crypto pyOpenSSL zope
安裝python-pip https://pypi.org/project/pip/#files
升級pyopenssl
pip install pyopenssl –user –upgrade 安裝python-setuptools yum install python-setuptools
https://pypi.org/project/setuptools/
python setup.py install 安裝python-twisted yum install python-twisted (在centos6.5上可以,在centos7上不行)
https://pypi.org/project/Twisted/#files
安裝BitTorrent5.0.9 python setup.py install
啟動tracker服務 /usr/bin/bittorrent-tracker –port 6969 –dfile dstate
(五) 伺服器上部署安裝BitTornado http://www.bittornado.com/官網,2004年3月釋出初始版本,2006年釋出0.3.18後未見更新。github上有別的持續更新,但測試中發現有問題 https://github.com/effigies/BitTornado
安裝python3 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
tar xvf Python-3.6.2.tar.xz cd Python-3.6.2 ./configure –prefix=/usr/local/python3 make && make install
ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 二、 製作種子檔案.torrent 簡單通過bitComet或uTorrent製作種子後,將種子提供給他人,並不能正常下載。通過在伺服器上啟動種子源下載,才見有下載進度。製作種子可以使用BitComet、btmakemetafile.py等均可。
(一) BitTorrent3.4.2 ./btmakemetafile.py /home/media/chaoshikongtongju.mp4 http://www.yourdomain.com:1337/announce #btmakemetafile.py 目錄或者檔案 track伺服器地址和埠 (二) BitTorrent-5.0.9 某個檔案: /usr/bin/maketorrent-console http://192.168.0.7:1337/announce /home/media/sample.mp4 某個目錄: /usr/bin/maketorrent-console http://192.168.0.7:1337/announce /home/media/sample
三、 在伺服器上啟動種子下載源
(一) BitTorrent3.4.2
啟動原始下載服務(seed) nohup ./btdownloadheadless.py –max_allow_in 20 –max_upload_rate 500 –minport 6888 –maxport 6888 /home/media/chaoshikongtongju.mp4.torrent –saveas /home/media/chaoshikongtongju.mp4 >/dev/null &
–saveas 後面是下載後儲存的檔名(同原始檔名路徑,這樣這個任務即等同完成了下載後的提供源資料的下載任務)
/data/www/client/myfile.exe.torrent 釋出檔案的位置 /data/www/client/myfile.exe 實際位置 –maxallow 20 指這個種子最多可以接受20個連線 –maxupload_rate 500 指這個種子最大的可以接受下載的頻寬 500 KB(byte)/s,這樣可以控制下載頻寬。 –minport 6888 –maxport 6888 最大最小監聽埠,這樣寫就是說種子只監聽6888埠,這樣方便在防火牆上開埠。
作為BT伺服器.目標是共享更多的檔案給使用者下載,如果對於每個“種子”都要啟動一個Downloader,不但非常煩瑣,可能還會大大影響伺服器效率。
為了解決這個問題,BitTorrent提供了另外兩個Downloader程式btlaunchmany.py和btlaunchmanycurses.py。這兩個程式會定時檢查指定目錄,對其中的所有“種子”啟動Downloader,並根據目錄內容增加和刪除Downloader。 btlaunchmanycurses.py是一個圖形控制檯介面,而btlaunchmany.py則更適合於後臺執行程式。 btlaunchmanycurses.py需要圖形介面.還需要給下載頻道負責人伺服器的許可權.所以我們使用btlaunchmany.py後臺執行程式. 用法如下:
#/usr/bin/btlaunchmany.py –data_dir /源目錄 –torrent_dir /種子目錄
啟動後.btlaunchmany.py使用6881埠.預設每隔120秒到種子目錄探測一次.
(二) BitTorrent-5.0.9 ./bittorrent-console.py /home/media/chaoshikongtongju.mp4.torrent –save_as /home/media/chaoshikongtongju.mp4
/usr/bin/launchmany-console /home/media
四、 在http上部署torrent檔案下載源 需要配置Web伺服器,將.torrent檔案和application/x-bittorrent相關聯。編輯Apache的配置檔案httpd.conf,新增如下內容:
AddType application/x-bittorrent .torrent
然後重新啟動Web伺服器,並將剛剛製作的“種子”放置在Web伺服器的提供下載的目錄中,讓使用者可以訪問
五、 linux上部署bt客戶端
yum install python-devel cmake
cd boost. ./bootstrap.sh ./b2 ./b2 install
cd /tmp/libtorrent-rasterbar-1.1.10 ./configure make && make install
cd examples cmake . make
./client_test 檔案.torrent
即可看到下載過程。
六、 Windows上的bt客戶端
BitComet會出現一直無法下載的問題,估計因為被官方詬病後,禁止其連線有關。 使用μTorrent正常。
七、 利用bt構建點播節目分發系統 節目分發伺服器採用centos、ubuntu等大規模應用安裝的系統,方便部署。 基於內網的伺服器採用iso封裝的形式,安裝系統更簡便。
(一) 節目分發服務 MovieSource 1. 上傳方式/節目入庫 一部電影一個目錄,目錄下包含海報圖片,一個或多個電影檔案(連續劇); 電影檔案上傳採用SFTP方式、上傳完畢後,通過http觸發一鍵入庫,入庫同時生成torrent檔案。入庫的電影預設以主檔名做為電影名,(電影名、入庫時間、電影檔名、torrent)其他資訊為空,需完善後才能上架。初期可通過phpMyAdmin來操作。 2. Bt Server 使用launchmany-console.py對某一目錄下所有torrent檔案進行監視,提供bt下載更新服務。
資料庫 電影資訊表 包含電影名、評分、上映日期、型別、導演、主演、片長、國家地區、簡介、檔名、入庫時間、torrent檔案下載地址、FTP下載地址、上架狀態、海報圖等資訊; 客戶端點播次數和付費次數應能更新進電影資訊資料庫,以用於優化分發; vod伺服器資訊表 數字id,機器碼,是否分發,
Http Server 提供電影資訊查詢介面,用於更新電影
為避免電影資源被非法盜用,此查詢介面需要加認證,避免非法使用者和同一帳號同時登陸,應保證一個帳號只能在一臺機器上使用。 電影優先更新熱播電影Top100、付費率高電影、新入庫電影,以加快分發效率;
(二) 管理伺服器 VodManager 對所有內網點播伺服器進行管理 設定點播伺服器在雲朵上對應的組織號 接收訂單回撥
(三) 內網點播伺服器 VodServer MovieUpdate 連線MovieSource,執行Login,認證通過則獲取到待更新的節目列表,將節目資料儲存到本地資料庫中。
MovieDownload 讀取本地資料庫中的待更新節目資料,啟動下載任務,將電影下載到本地硬碟中,下載完成後,將相應的節目記錄上架。 電影更新程式,預設設定2臺“節目分發伺服器”地址 可指定將電影更新到哪個目錄下。
HTTP服務:給點播終端apk提供電影點播服務、及節目清單查詢介面。 供apk查詢電影節目列表的資料介面 最簡的登陸管理後臺,可控制下架哪個節目;(可選)
BT分發服務 是否開啟種子下載源服務,在雲端可開關。 使用launchmany-console.py對某一目錄下所有torrent檔案進行監視,提供bt下載更新服務。
FRP服務 連線管理伺服器VodManager
八、 為BT增加認證 由於bt客戶端在下載torrent檔案後,會連線tracker伺服器獲取相關資訊,因此可通過修改libtorrent客戶端和opentracker程式碼,在http的url中加入相關認證
對libtorrent客戶端的修改主要在src\http_tracker_connection.cpp中, 對opentracker的修改應該在ot_http.c中http_handle_announce方法
對BitTorrent-5.0.9的種子源服務(也是opentracker的客戶端之一)的BitTorrent\Rerequester.py的def _announce方法進行修改。
相關文章
- 利用網際網路找工作簡單麼
- 用Keras框架構建一個簡單的卷積神經網路!Keras框架架構卷積神經網路
- 利用OpenVSwitch構建多主機Docker網路Docker
- Jina:在雲上構建神經網路搜尋的更簡單方法神經網路
- 利用 Docker 構建一個簡單的 java 開發編譯環境DockerJava編譯
- 利用 DynamicLinq 實現簡單的動態表示式構建查詢
- 利用angular4和nodejs-express構建一個簡單的網站(十)—好友模組AngularNodeJSExpress網站
- 利用github pages建立簡單的網站Github網站
- 構建最簡單陣列陣列
- 負載均衡-構建CDN服務負載
- 構建自己的簡單微服務架構(開源)微服務架構
- 利用angular4和nodejs-express構建一個簡單的網站(九)—使用者登入AngularNodeJSExpress網站
- 利用Python Flask構建Web網站PythonFlaskWeb網站
- 兩種簡單的方法Docker構建LANMPDocker
- 用 Java 構建簡單的規則引擎Java
- 如何簡單方便的建個人網站網站
- 網站怎麼開啟CDN加速?最簡單的步驟分享!網站
- caffe 網路結構幾個部分簡單介紹
- 一個簡單的構建React元件動畫方案React元件動畫
- [轉]:如何快速構建一個簡單的程式
- 簡單明瞭的體會構建者模式模式
- 零信任安全網路構建
- keras構建神經網路Keras神經網路
- Mybatis原始碼簡單解讀----構建MyBatis原始碼
- jQuery建構函式簡單介紹jQuery函式
- 社交網路不簡單:網路社交中的五“不要”
- 簡單的神經網路測試神經網路
- [ kvm ] 四種簡單的網路模型模型
- 程式碼來構建一個簡單的compilerCompile
- 從零構建一個簡單的 Python 框架Python框架
- 構建一個簡單的react-typescript專案ReactTypeScript
- javascript建構函式的繼承簡單介紹JavaScript函式繼承
- 使用JDBC構建簡單的資料訪問層JDBC
- 使用 Python 構建一個簡單的 RESTful APIPythonRESTAPI
- Maven簡單介紹——必要的Java管理與構建MavenJava
- 利用angular4和nodejs-express構建一個簡單的網站(二)——設定跨域訪問和安裝基本依賴構建資料庫AngularNodeJSExpress網站跨域資料庫
- ZZFLEX-介面構建從未如此簡單Flex
- js Date()建構函式簡單介紹JS函式