WP Offload S3 Lite 外掛可以自動將 WordPress 媒體庫圖片、視頻、文檔通過 WordPress 上傳置 Amazon S3 Bucket 中。然後,它會自動將每個媒體文件的 URL 替換為各自的 Amazon S3 URL,或者如果您已經配置了 Amazon CloudFront,則會顯示相應的 CloudFront URL。
手上剛好有一個案例:一個多年 WordPress 網站,媒體庫圖片容量為 15GB 時,該如何做管理及備份。
九成的網站安裝備份外掛,都可以輕易完成備份的工作,但時間越來越長,文章及圖片越來越多後,尤其 WordPress 對上傳一張圖片的處理,因佈景主題複雜度的不同,又會產生 5 – 10 張的縮圖,這時,網站備份對主機的壓力,就會越來越大。
內容目錄:
以目前我最常用的 UpdraftPlus 備份外掛來說,備份程序先進行 db / Themes / Plugin / Other / Upload 資料夾壓縮,然後將壓縮好的檔案存放在 /wp-content/updraft 資料夾裡,接著再上傳到你的備份空間,整個上傳完畢後,再將壓縮檔刪除。
UpdraftPlus 備份外掛
當 Upload 檔案大小超過 400MB 時,UpdraftPlus 會自動切割檔案,可以想像一個 15GB 的 Upload 資料夾,切割 / 壓縮 / 上傳 這 3 個步驟,主機可能以經進入半癱瘓的階段。
以下面這張監視圖可以看出,當 UpdraftPlus 外掛程序於 12:00 啟動後,主機系統的使用量常常會超過 100%。

如果把 VPS 升級到 8GB RAM 4 CPU Cores 時,可以忽視這問題,反正 VPS 資源夠,只有上傳備份空間的時間會拉的很長。
但是,只有一個網站,流量又沒這麼大時,2GB VPS 可以做的到的事情,也沒有必要去多花錢升級到 8GB VPS 的方案。
這時,我們就需要把 WordPress 媒體庫圖片分離出來到另一台 VPS 或其他備份空間,做另外的備份,不要去影響網站主機的效能。
方法有好幾種:
- 多加一台 VPS 主機,使用 FTP 方式。
- 從 VPS 主機後端,使用 fuse + s3fs 上傳到 Amazon S3 Bucket。
- 使用 WP Offload S3 付費外掛,直接上傳到 Amazon S3 Bucket。
WP Offload S3 Lite
而我是使用 WP Offload S3 Lite 免費外掛,使用之前,我們先了解 WP Offload S3 外掛的區別:
- WP Offload S3 Lite:免費,使用之前的圖片無法上傳。
- WP Offload S3:每年付費 ( 59 – 1199 美金 ),可以上傳使用之前媒體庫圖片,方案不同,限制上傳的檔案數也不同。
依這個網站圖片數量計算來看,早已超過 10 萬個檔案數量,會用 WP Offload S3 $1199 美金這個方案,這就成本效益來看,好像不太划算。
WP Offload S3 官方網頁
WP Offload S3 官方網頁


作法如下:
註冊一個 AWS 帳號
Amazon 台灣官網
Amazon 台灣官網

關於 Amazon 註冊的細節,不在這邊贅述,請自行上網查詢。
IAM 新增使用者帳號
進入 IAM 管理台,新增一位使用者,專門給 S3 Bucket 使用

主要是取得 access key ID 和 secret access key,不需要啟用登入到 AWS 管理控制台。

設置使用者的權限,我們需要 AmazonS3FullAccess

最後,要記得把 access key ID 和 secret access key 這 2 組 key 抄下來

Amazon S3 新增一個儲存桶
回到 S3 新增一個儲存桶 (bucket),把 bucket 權限設置為公開 (Manage public permissions) 如下圖:

儲存桶 (bucket) 新增好之後,建立資料夾,設置為 (儲存桶名稱) / wp-content / uploads
更改 WordPress 媒體庫圖片路徑
在安裝 WP Offload S3 Lite 外掛之前,先將原本媒體庫的圖片上傳至 S3 bucket,以及修改原本的媒體庫圖片路徑。
利用 phpMyadmin 進入資料庫,點選你的該網站資料庫名稱,再點選右邊的 SQL,下方的空白處,寫入下方 2 行的 SQL 語法。

UPDATE wp_posts SET guid = replace(guid, 'http:// 原本網址/wp-content/uploads','https://s3-us-west-2.amazonaws.com/ S3 bucket 名稱 /wp-content/uploads');
UPDATE wp_posts SET post_content = replace(post_content, 'http:// 原本網址 /wp-content/uploads', 'https://s3-us-west-2.amazonaws.com/ S3 bucket 名稱 /wp-content/uploads');
成功修改後,如下圖:

修改好後,回到 Wordpress 後台媒體庫及文章檢查看看圖片是否都有顯示出來。
線上 SQL 語法生成器:
線上 SQL 語法生成器

安裝 WP Offload S3 Lite 免費外掛
安裝 WP Offload S3 Lite 後,會提示你需要再安裝 Amazon Web Services 外掛。
amazon web services plugin
修改 wp-config.php 文件,加入以下代碼。先前在申請 IAM 使用者的 access key ID 和 secret access key
define(‘WP_DEBUG’, false); 下方加入
define( 'DBI_AWS_ACCESS_KEY_ID', 'AKIAICLYU6QQQQQQQQQQ' );
define( 'DBI_AWS_SECRET_ACCESS_KEY', 'fuh++vXsXZiqW+wzpmBw/+Kkkkkkkkkkkk' );
Offload S3 Lite 外掛設置
填入 S3 bucket 桶名稱
將 Remove Files From Server 設置為 ON,圖片上傳至 S3 bucket 後,刪除本機媒體庫的圖片。
回到媒體庫上傳一張圖片,試試有沒有成功上傳到 S3 bucket。
結語
這一篇最主要是以備份的觀點來看,當圖片數量到達上 GB 大小後,備份網站變成一份吃力的工作 (備份的時間越長,失敗率就會增加)。
我們都知道網站備份的重要性,但也不希望因備份程序而拖垮主機。
不管使用 2 台 VPS 還是 Amazon S3 Bucket 空間,都會再增加成本支出,但對網站的保障,絕對是值得的。
WordPress Media 媒體庫教學系列文章:
1. WordPress + Chevereto 圖床軟體來管理媒體庫
2. 如何優化 WordPress 媒體庫圖片
3. 使用子網域儲存 WordPress Media 媒體庫
Featured Photo by Dan Gold on Unsplash
大大來點更進階用法麻,像是到S3之後觸發AWS Lambda呼叫Amazon Elastic Transcoder或是其他服務優化檔案
另外還有防止HotLink的基本權限設定
再套上LB與CDN強化內容遞送與SSL
請教一下,啟用這個 plugin 後,用 gutenburg 貼上的圖片,也會自動存在外站嗎?
會的。
一樣會自動將圖片上傳到你所設定圖床空間。