banner
moeyy

moeyy

一条有远大理想的咸鱼。
github
mastodon
email

使用cdn-manager自建CDN伺服器,支持處理圖片/快取視頻等資源

說明:cdn-manager是雲轉碼express-ffmpeg的作者quazero根據@dadi/cdn製作的腳手架,該原理貌似是一個API服務,搭建好的CDN伺服器第一次訪問你設定的網站後,會將原站一些資源快取到伺服器,而且不僅僅可以快取jpgcssjs等,就連tsm3u8mp4也可以快取,默認是快取一個小時,但可以設置永久快取。並且當你的並發很高,硬碟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.jsonconfig.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文檔。

設置完成之後,比如recipeposter,則訪問鏈接為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地址即可
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。