WP Offload S3 Lite 外掛來儲存 WordPress 媒體庫

Written by

Photo by Fahrul Azmi on Unsplash

WP Offload S3 Lite 外掛可以自動將 WordPress 媒體庫圖片、視頻、文檔通過 WordPress 上傳置 Amazon S3 Bucket 中。然後,它會自動將每個媒體文件的 URL 替換為各自的 Amazon S3 URL,或者如果您已經配置了 Amazon CloudFront,則會顯示相應的 CloudFront URL。

一個 WordPress 網站剛開始時,大部分的站長都沒有想過媒體庫圖片存放的問題,經年累月用下來後,開始發現媒體庫圖片數量越來越龐大,網站備份越來越困難,這時會開始思考該不該將媒體庫圖片分離出來另外做管理及備份。

手上剛好有一個案例:一個多年 WordPress 網站,媒體庫圖片容量為 15GB 時,該如何做管理及備份。

九成的網站安裝備份外掛,都可以輕易完成備份的工作,但時間越來越長,文章及圖片越來越多後,尤其 WordPress 對上傳一張圖片的處理,因佈景主題複雜度的不同,又會產生 5 – 10 張的縮圖,這時,網站備份對主機的壓力,就會越來越大。

內容目錄:

  • UpdraftPlus 備份外掛
  • WP Offload S3 Lite
  • 註冊一個 AWS 帳號
  • IAM 新增使用者帳號
  • Amazon S3 新增一個儲存桶
  • 更改 WordPress 媒體庫圖片路徑
  • 安裝 WP Offload S3 Lite 免費外掛
  • Offload S3 Lite 外掛設置

以目前我最常用的 UpdraftPlus 備份外掛來說,備份程序先進行 db / Themes / Plugin / Other / Upload 資料夾壓縮,然後將壓縮好的檔案存放在 /wp-content/updraft 資料夾裡,接著再上傳到你的備份空間,整個上傳完畢後,再將壓縮檔刪除。

UpdraftPlus 備份外掛

https://wordpress.org/plugins/updraftplus/

當 Upload 檔案大小超過 400MB 時,UpdraftPlus 會自動切割檔案,可以想像一個 15GB 的 Upload 資料夾,切割 / 壓縮 / 上傳 這 3 個步驟,主機可能以經進入半癱瘓的階段。

以下面這張監視圖可以看出,當 UpdraftPlus 外掛程序於 12:00 啟動後,主機系統的使用量常常會超過 100%。

CPU backup load time

如果把 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 美金這個方案,這就成本效益來看,好像不太划算。

https://wordpress.org/plugins/amazon-s3-and-cloudfront/

WP Offload S3 已經改名稱為 WP Offload Media Lite for Amazon S3, DigitalOcean Spaces, and Google Cloud Storage.

WP Offload S3 官方網頁

https://deliciousbrains.com/wp-offload-media/

WP Offload S3 Pricing & Purchase

所以,我使用 WP Offload S3 Lite 免費外掛 + 修改資料庫的媒體庫圖片路徑方式來處理。

作法如下:

註冊一個 AWS 帳號

Amazon 台灣官網

https://aws.amazon.com/tw/

關於 Amazon 註冊的細節,不在這邊贅述,請自行上網查詢。

IAM 新增使用者帳號

進入 IAM 管理台,新增一位使用者,專門給 S3 Bucket 使用

IAM add users

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

IAM add users

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

AmazonS3FullAccess

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

access key ID 和 secret access key

Amazon S3 新增一個儲存桶

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

S3 Bucket

儲存桶 (bucket) 新增好之後,建立資料夾,設置為 (儲存桶名稱) / wp-content / uploads

更改 WordPress 媒體庫圖片路徑

如果是一個全新的網站,不需要更改資料庫媒體庫的路徑,請跳下一個步驟,安裝 WP Offload S3 Lite 外掛,直接上傳圖片至媒體庫就可以了。


最新的做法,不建議去更動 WordPress 的資料庫圖片的路徑,請安裝 Regenerate Thumbnails 外掛,重新執行一次縮圖,利用縮圖去觸動 WP Offload S3 Lite 將舊圖也上傳到 S3 桶。

Regenerate Thumbnails

在安裝 WP Offload S3 Lite 外掛之前,先將原本媒體庫的圖片上傳至 S3 bucket,以及修改原本的媒體庫圖片路徑。

注意:先備份你的資料庫,很重要 !!

利用 phpMyadmin 進入資料庫,點選你的該網站資料庫名稱,再點選右邊的 SQL,下方的空白處,寫入下方 2 行的 SQL 語法。

SQL post guid
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');

成功修改後,如下圖:

SQL post guid

修改好後,回到 Wordpress 後台媒體庫及文章檢查看看圖片是否都有顯示出來。

線上 SQL 語法生成器:

https://codepen.io/EightArmsHQ/full/kaZyJd

安裝 WP Offload S3 Lite 免費外掛

安裝 WP Offload S3 Lite 後,會提示你需要再安裝 Amazon Web Services 外掛。

https://wordpress.org/plugins/amazon-s3-and-cloudfront/

amazon web services plugin

https://tw.wordpress.org/plugins/amazon-web-services/

修改 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 桶名稱
WP Offload S3 Plugin

將 Remove Files From Server 設置為 ON,圖片上傳至 S3 bucket 後,刪除本機媒體庫的圖片。
WP Offload S3 Plugin

回到媒體庫上傳一張圖片,試試有沒有成功上傳到 S3 bucket。

結語

這一篇最主要是以備份的觀點來看,當圖片數量到達上 GB 大小後,備份網站變成一份吃力的工作 (備份的時間越長,失敗率就會增加)。

我們都知道網站備份的重要性,但也不希望因備份程序而拖垮主機。

不管使用 2 台 VPS 還是 Amazon S3 Bucket 空間,都會再增加成本支出,但對網站的保障,絕對是值得的。

WordPress Media 媒體庫教學系列文章:

1. WordPress + Chevereto 圖床軟體來管理媒體庫

https://yungke.me/wordpress-chevereto-media-library/

2. 如何優化 WordPress 媒體庫圖片

https://yungke.me/how-optimize-wordpress-images/

3. 使用子網域儲存 WordPress Media 媒體庫

https://yungke.me/subdomain-wordpress-media-library/

hosted by kinsta

〈WP Offload S3 Lite 外掛來儲存 WordPress 媒體庫〉的留言

  1. 大大來點更進階用法麻,像是到S3之後觸發AWS Lambda呼叫Amazon Elastic Transcoder或是其他服務優化檔案
    另外還有防止HotLink的基本權限設定
    再套上LB與CDN強化內容遞送與SSL

  2. 「xharkie@gmail.com」的個人頭像
    xharkie@gmail.com

    請教一下,啟用這個 plugin 後,用 gutenburg 貼上的圖片,也會自動存在外站嗎?

    1. 會的。
      一樣會自動將圖片上傳到你所設定圖床空間。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Your Mastodon Instance