前言
距離上次系統更新(2021年二月)已經快兩年了
從CentOS 7系統改成Ubuntu 20.04 LTS 運作良好一切如昔
今天要來做系統更新主要的原因是系統用的PHP版本已經快終止安全性維護
需要把PHP 7.4升級到 PHP8.1,因為升級過程中出了點小意外
所以乾脆也把系統整個重灌&升級到Ubuntu 22.04 LTS
以下是這次系統升級的操作流程記錄
有95% 跟之前寫的[筆記] Ubuntu20.04 安裝LEMP +SSL 重覆
差別是在PHP的版本從7.4 改成 8.1
另外會附上wordpress 升級後網站無法瀏覽的解決方式
開始施工:
Step1
安裝Ubuntu 22.04 LTS 我的server在Linode 系統裝好後就直接SSH連線
#更新系統
sudo apt-get update
#安裝Nginx
sudo apt install nginx
#安裝 MariaDB
sudo apt-get install mariadb-server mariadb-client
#啟動 Nginx & MariaDB
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
#安裝 PHP8.1
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt-get install php8.1
#安裝 PHP 8.1相關套件
sudo apt install php8.1-fpm php8.1-common php8.1-mysql php8.1-gmp php8.1-curl php8.1-intl php8.1-mbstring php8.1-xmlrpc php8.1-gd php8.1-xml php8.1-cli php8.1-zip php8.1-imagick
Step2
Nginx、MariaDB、PHP相關設定
資料庫設定
#資料庫初始設定 (設定資料庫root密碼)
sudo mysql_secure_installation
#新增資料庫跟使用者 (給WordPress用)
#下面的帳號密碼資料庫名稱請自行替換
sudo mysql -u root -p
CREATE DATABASE 資料庫名稱;
CREATE USER '使用者名稱'@'localhost' IDENTIFIED BY '密碼';
GRANT ALL ON 資料庫名稱.* TO '使用者'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
sudo systemctl restart mariadb.service
PHP設定
#編輯php.ini內容 主要是把上傳檔案限制開大
sudo nano /etc/php/8.1/fpm/php.ini
#以下是php.ini要改的部分
short_open_tag = On
memory_limit = 512M
cgi.fix_pathinfo = 0
#上傳檔案大小上限(單一檔案大小)
upload_max_filesize = 20M
#POST 大小上限(所有檔案大小加總)
post_max_size = 50M
max_execution_time = 360
2023/01/01 新增: 在WP後台上傳檔案發生 413 Request entity too large 解決方式
#編輯nginx.con內容
sudo nano /etc/nginx/nginx.con
修改 http{} 裡面的 upload_max_filesize 30M;
數字改成跟php.ini 裡面的 upload_max_filesize 一樣大小)
如果在 http{} 沒看到 upload_max_filesize 就自行加上去
改完存檔
下載WordPress
#先下載wordpress
cd /tmp
wget https://tw.wordpress.org/latest-zh_TW.tar.gz
tar -xvzf latest-zh_TW.tar.gz
sudo chown -R www-data:www-data wordpress/
sudo chmod -R 755 wordpress/
sudo mv wordpress/ /var/www/html/
Nginx 網站相關設定
#編輯 Nginx設定檔
sudo nano /etc/nginx/sites-available/wordpress
#以下是設定檔的內容(直接貼上..server_name要改成自己的網址)
server {
listen 80;
listen [::]:80;
root /var/www/html/wordpress;
index index.php index.html index.htm;
server_name example.com www.example.com;
client_max_body_size 100M;
autoindex off;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
#存檔離開後
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo systemctl restart nginx.service
#php 重新啟動(2022-1213 新增)
sudo service php8.1-fpm restart
完成以上步驟,打開瀏覽器,輸入網址,應該就可以看到WordPress安裝畫面,這邊有個小坑...如果是用Chrome會看不到網頁...要用IP
因為Chrome預設只能開啟https的網址,SSL目前還沒裝...
用其他瀏覽器就可以看到畫面~如IE (Edge ...我還是習慣叫它IE) 或Firefox
接下來最後的步驟把SSL裝上
Step3
SSL 安裝&設定
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
#讓certbot 自動修改Nginx設定
sudo certbot --nginx
#自動更新設定
sudo crontab -e
0 1 * * * /usr/bin/certbot renew >> /var/log/letsencrypt/renew.log
Step4
既然系統都升級了(還有PHP)那麼原本的WordPress也順便升級到6.1
就當一切都很順利的時候,把原本舊有的WP資料匯入時就炸了
出現下面那個熟悉的畫面
在網路上的教學文章,很多都是要你去裝一個外掛
but這招僅限於WP的後台還能登入的情況下
而我的站台前後台都掛了無法正常顯示,所以網路的教學文無法適用我的情況
要解決問題首先要了解問題發生的原因!
這邊只提我的經驗:這問題發生的原因 94.87%是升級WP時
跟原本安裝的外掛產生衝突而導致的,所以要解決這個問題
通常停用外掛可以讓網站恢復正常
而網站跳出的警告訊息"這個網站發生重大問題..."
下面一行進一步了解WorddPress中的移難排解方式
How to deactivate all plugins when not able to access the administrative menus?
其實WordPress的警告訊息中給的連結,已經"明確"的告知使用者如何處理這個重大問題
在WP的資料庫裡的
資料表:wp_options
欄位:active_plugins
欄位值:optionvalue field 的值改為a:0:{}
上面的意思就把開啟的外掛全部關閉
做完這一步,網站就可以正常顯示,接著登入後台
去更新外掛,再一個一個把原本的外掛啟用即可
以上是這次系統升級的操作流程記錄 🙂
補充
把舊有的網站復原後發現一個小問題:無法安裝外掛
(但上傳圖片是正常)
大概是目錄的權限設定 跑掉了...
sudo chown -R www-data:www-data wordpress/
sudo chmod -R 755 wordpress/
打完收工
Reference:
- How to Upgrade from PHP 7.x to PHP 8 on Ubuntu
- PHP 7.4 End of Life Date
- WordPress : FAQ Troubleshooting