一開始原本打算以 nginx + wp-fpm 的形式建立起 wordpress,但由於對於 nginx 各種設定還是一知半解,雖然可以成功建立起來,但是後續要架起多站點使用的時候,會因為導向問題而無法正確進入多站點的網站。並且因為結構上多了一層 proxy 讓狀況變得更複雜,然後我就失敗了 XD。細節就不寫太多了,免得有人搜尋到相關資訊卻得不到答案。
wordpress 蠻常會有一些設定問題,雖然也算是老生常談了,但還是留個紀錄以供之後參考。
1. mySQL 8 遇到密碼驗證問題
進到機器中增加驗證方式:
docker exec -it db bash mysql -u root -p use mysql; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
2. 上傳檔案大小以及連線時間限制
在 wordpress 的 /var/www/html 目錄下增加 php.ini,記憶體限制建議不要開太大,不然可能傳檔案傳到死機:
file_uploads = On memory_limit = 128M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 600
因為還會先經過首頁才 proxy 過來,首頁的 nginx default.conf 也需要加上以下設定:
client_max_body_size 128M; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300;
3. 啟用多站點
編輯 wordpress 根目錄下的 wp-config.php,加入以下設定開啟多站點功能:
define('WP_ALLOW_MULTISITE', true);
進入 wordpress 的管理後台,就會看到選單設定中多了多站點可以選,系統會告訴你要如何增加設定。
(1) 在 wp-config.php 加入以下設定:
define('MULTISITE', true); define('SUBDOMAIN_INSTALL', false); define('DOMAIN_CURRENT_SITE', 'wp.winter-weng.cc'); define('PATH_CURRENT_SITE', '/'); define('SITE_ID_CURRENT_SITE', 1); define('BLOG_ID_CURRENT_SITE', 1);
(2) 修改 /var/www/html/.htaccess
RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] # add a trailing slash to /wp-admin RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] RewriteRule . index.php [L]
4. 將資源移動到 S3
當 wordpress 使用久了,wp-content 會變得相當肥大,因此我想將資源檔改為上傳至 AWS S3。
(1) 首先先至 AWS 的 IAM 依照以下步驟建立使用者:
完成之後,在這一步切記要將金鑰儲存起來,如果錯過就只能重新再生成了。
(2) 至 S3 開啟新的儲存貯體
照著步驟設定就可以了,儲存貯體的「封鎖公開存取」設定記得要設定為公開。
新增好之後,建立資料夾 wp-content 以及下層的 uploads。
5. 修正資料
此次主機的更新,也讓原本備份資料出現 domain 對不上的問題,包含圖片資源要換成 S3 的網址都可以透過以下方式修正資料。
當然修正資料有很多種方式,如果不熟悉指令也可以直接編輯備份資料檔案,或是透過 Sequel Pro 等工具輔助。
進入資料庫:
docker exec -it db bash mysql -u root -p
將舊網址更新為新網址:
UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldurl', 'http://www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl'; UPDATE wp_posts SET guid = replace(guid, 'http://www.oldurl','http://www.newurl'); UPDATE wp_posts SET post_content = replace(post_content, 'http://www.oldurl', 'http://www.newurl'); UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.oldurl','http://www.newurl');
因為資源已經放置在 S3,本地不會有留檔,如果資料沒有清乾淨,進到媒體庫會看到破圖,可執行以下指令刪除媒體庫的資料:
DELETE FROM `wp_posts` WHERE `post_type` = "attachment"; DELETE FROM `wp_postmeta` WHERE `meta_key` = "_wp_attached_file"; DELETE FROM `wp_postmeta` WHERE `meta_key` = "_wp_attachment_metadata";
設定完成後終於可以開心寫作啦~
參考資料:
- Increase Media File Maximum Upload Size in WordPress Step by Step Guide
https://www.cloudways.com/blog/increase-media-file-maximum-upload-size-in-wordpress/ - WORDPRESS 上傳圖片時出現錯誤 「由於伺服器繁忙或沒有足夠的資源,因此無法完成圖片後期處理。上傳較小尺寸的圖片會有所改善」解決方法
https://www.tedlin.tw/2021/02/5940 - WP Offload S3 Lite 外掛來儲存 WordPress 媒體庫
https://yungke.me/wp-offload-s3-lite-wordpress-media-library/