說明:cdn-manager
是雲轉碼express-ffmpeg的作者quazero
根據@dadi/cdn製作的腳手架,該原理貌似是一個API
服務,搭建好的CDN
伺服器第一次訪問你設定的網站後,會將原站一些資源快取到伺服器,而且不僅僅可以快取jpg
、css
、js
等,就連ts
、m3u8
、mp4
也可以快取,默認是快取一個小時,但可以設置永久快取。並且當你的並發很高,硬碟IO
跟不上的時候,就把圖片轉換成二進制存內存裡邊。更強的就是還可以給圖片加參數,如高寬、格式、濾鏡、比例、旋轉等,然後拉取圖片後按要求處理,再即時返回你需要的圖片並快取到伺服器。有需求的可以使用延遲比較低的伺服器搭建下,可以減輕我們源站壓力,特別是並發比較高的網站。
安裝#
cdn-manager:https://gitee.com/quazero/cdn-manager
dadi/cdn:https://github.com/dadi/cdn
本教程適用於CentOS
,建議使用CentOS 7
系統。
1、安裝依賴
#升級系統
yum update -y
#安裝開發者工具包
yum -y groupinstall "Development Tools"
#安裝nodejs
curl -sL https://rpm.nodesource.com/setup_10.x bash -
yum install nodejs -y
#安裝pm2
npm install pm2 -g
2、安裝程序
#拉取源碼
git clone https://gitee.com/quazero/cdn-manager.git
cd cdn-manager
#安裝
npm install
#設置環境
export NODE_ENV=production
3、配置參數
注意:本步驟講的默認配置只快取圖片,所以我們要了解下基本配置,然後再去參考文章最後面的更多設置,再使用4步驟運行程序。
本程序主要涉及到2
個配置文件poster.json
和config.production.json
,前者是圖片處理的配置文件,後者是運行環境配置文件。
圖片配置路徑workspace/recipes/poster.json
,默認參數如下:
{
"recipe": "poster",
"settings": {
"format": "jpg",
"quality": "90",
"height": "240",
"ratio": "16-9",
"resizeStyle": "entropy"
}
}
意思是將圖片處理成16:9
的比例,高度240PX
,並且格式為jpg
,質量為90%
的格式。
運行環境配置路徑config/config.production.json
,默認參數如下:
{
"server": {
"host": "127.0.0.1",
"port": 8001
},
"images": {
"remote": {
"enabled": true,
"path": "#"
}
}
}
意思是運行端口為8001
,設置遠程連接path
,比如我的域名是https://www.moerats.com
,就在參數後面填該域名。
4、運行程序
#進入源碼的文件夾
cd /root/cdn-manager
#這裡避免出錯,建議安裝一些模塊
npm install sharp farmhash
#運行
pm2 start index.js
運行環境配置#
1、快取設置
"caching": {
"ttl": 3600,
"expireAt": "0 5 0 * * *"
}
expireAt
配置解釋:
"0 5 0 * * _" 每天凌晨12點5分刷新快取
"0 30 11 _ _ 1-5" 每週星期一到星期五 早上11點30刷新快取
"0 15 14 1 _ _" 每個月一號下午2點15刷新快取
"0 22 _ _ 1-5" 週一到週五晚上10點刷新快取
"_ 5 4 * * 0" 每週日凌晨4點5分刷新快取
ttl
配置解釋:
單位秒,默認3600秒,一個小時快取失效,可以自行設置時長。
/api/flush可以通過這個API手動刷新快取文件。
2、image 配置
"images": {
"directory": {
"enabled": true,
"path": "relative/path/to/your/images"
},
"remote": {
"enabled": true,
"path": "https://www.moerats.com/images"
},
"s3": {
"enabled": true,
"accessKey": "your-access-key",
"secretKey": "your-secret",
"bucketName": "your-bucket",
"region": "your-region",
"endpoint": "ams3.digitaloceanspaces.com"
}
}
images
配置項 一共有三種用法,一種是直接服務同主機圖片,服務本地圖片,一種是服務遠程圖片,最後一種是亞馬遜和Digital Ocean Space
雲儲存。
directory
服務本地文件,直接指定path
為文件夾地址即可直接處理本地圖片。例如/www/moerats.com/picture
,然後將圖片地址host
更改為CDN
地址即可。
remote
服務遠程文件,直接設置path
為遠程url
,例如https://www.moerats.com
,最後把地址替換成 cdn
地址即可。
s3
雲儲存可擴展的雲儲存,可以直接快取各種雲儲存上邊的圖片。
3、assets 配置
"assets": {
"directory": {
"enabled": true,
"path": "/Users/absolute/path/to/your/assets"
}
}
該配置方法參考image
配置,除了把images
換成assets
,其他用法一樣,設置之後會快取除了jpg
的各種文件,包括視頻文件。
圖片處理配置#
{
"recipe": "poster",
"settings": {
"format": "jpg",
"quality": "90",
"height": "240",
"ratio": "16-9",
"resizeStyle": "entropy"
}
}
recipe
文件是預配置格式處理文件,在workspace/recipes
文件夾中建立。
"recipe"
參數設置必須和文件名一致。settings
中可以設置的選項:
blur 模糊
filter 設置裁剪處理算法
flip 翻動
format 格式
gravity 設置裁剪區域
ratio 比例
rotate 旋轉
width 寬度
height 高度
resizeStyle
裁剪模式 推薦entropy
等,詳見dadi/cdn文檔。
設置完成之後,比如recipe
為poster
,則訪問鏈接為cdnhost/poster/yourpath/1.jpg
。
域名反代#
要想正常訪問就需要使用域名反代,這裡說下寶塔反代和Caddy
反代。如果你網站有寶塔,就可以使用寶塔進行反代,如果沒有,建議使用第2
種的Caddy
反代,配置很快。
1、寶塔反代
先進入寶塔面板,然後點擊左側網站,添加站點,然後再點擊添加好了的域名名稱,這時候就進入了站點配置,點擊反向代理,目標URL
填入http://127.0.0.1:8001
,再啟用反向代理即可。至於啟用SSL
就不說了,直接在站點配置就可以看到。
2、Caddy 反代
安裝Caddy
:
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
#備用地址
wget -N --no-check-certificate https://www.moerats.com/usr/shell/Caddy/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
配置Caddy
:
#以下全部內容是一個整體,請修改域名後一起複製到SSH運行!
#http訪問,該配置不會自動簽發SSL
echo "xx.com {
gzip
proxy / http://127.0.0.1:8001
}" > /usr/local/caddy/Caddyfile
#https訪問,該配置會自動簽發SSL,請提前解析域名到VPS伺服器
echo "xx.com {
gzip
tls [email protected]
proxy / http://127.0.0.1:8001
}" > /usr/local/caddy/Caddyfile
tls
參數會自動幫你簽發ssl
證書,如果你要使用自己的ssl
,改為tls /root/xx.crt /root/xx.key
即可。後面為ssl
證書路徑。
啟動Caddy
:
/etc/init.d/caddy start
最後我們都配置好了後,只需要在原網站將資源鏈接域名替換成CDN
的地址即可。大概使用如下:
原圖片地址為:https://www.moerats.com/rats.jpg
CDN中地址為:https://cdn.moerats.com/poster/rats.jpg,該鏈接會自動處理圖片
#如果你不想對圖片進行處理,直接代替原域名就可以了,如:
https://cdn.moerats.com/rats.jpg
#其他資源就直接替換域名為CDN地址即可