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 備份外掛
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 語法生成器:
Wordpress 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