WordPress 搬家 Linode 全記錄

在 Linode 上自架 Wordpress 網站全記錄,使用 NGINX+PHP-FPM+MySQL 的組合,網頁新手慎入。

用了 6 年的 Sakura Server,由於發生一些問題只好為網站找新家,看來看去套裝的 Web Server 都價格不菲,只好花時間自己安裝及配置網頁環境,再移轉 WordPress 到新的 Server。

Web Server

至於為何選用 Linode 則是因為他有最划算的入門方案:Nanode 1GB,配置如下。

月費RAMCPUsStorage
$5美金1GB125GB

Image 的部分多年前開過一個 CentOS 7 感覺頗穩定,於是沒想太多就選了新版的 CentOS 8(簡直挖坑自己跳)。

Region 地區就選離台灣最近的日本伺服器 Tokyo 2。

Installation of Web Server

伺服器跑起來之後就SSH進去開始安裝網站環境啦~我選用的是:NGINX + PHP-FPM + MySQL 組合,想當初開始學網頁的時候自己電腦裝的是 Apache + PHP + MySQL 的組合,但因為 Apache 設定檔太複雜,之後都改用 NGINX。

裝都很簡單,就是跟著文章敲敲指令。但這邊先名詞解釋一下

第一個雷:SELinux,這好像是新版 Linux 新增的功能,提供「更」安全的伺服器機制,其實我還沒搞懂但總之看到這個詞要特別注意,一定要安裝所需相關 Package。

第二個名詞:dnf,就把他當成 yum 即可,相當於 Debian 中的 apt-get,相當於 Python 中的 pip,即 Package 管理程式。

好了,可以開始安裝網站環境了。

1. NGINX

How to Install NGINX on CentOS 8 (希望這篇文章可以長長久久)

安裝完要記得看一下 /etc/nginx/nginx.conf 中設定的 user 名稱,後面在設定 PHP 的時候記得寫同個人才不會遇到一些權限 Permission 的問題。

為了之後串接 PHP-FPM,需要確保你 NGINX 的 conf 設定中包含:

location ~* \.php$ {
    #...
    fastcgi_pass unix:/run/php-fpm/www.sock;
}

防火牆那個步驟一定要啟用 http 和 https,否則 NGINX 啟動之後使用者(沒錯就是你)也連不進去。

其他問題:

2. PHP-FPM

How to Install and Configure FastCGI and PHP-FPM on CentOS 8

本次使用 NGINX 所以《Configure Apache with PHP-FPM》這段可以跳過不用看,最後一段《Configuring PHP Pools》中遇到設定檔時 user 和 group 都請寫步驟 1 中 NGINX 的設定值。

3. MySQL

How to Install MySQL on CentOS 7

《Harden MySQL Server》那段在執行 sudo mysql_secure_installation 時建議選擇 MySQL Password Policy=LOW 選項,否則你設定的密碼很容易被視為不安全就無法下一步。如果不幸選錯了,就只能先設定困難密碼之後再修改

Adminer – Database管理工具

應該比較有名的是 PhpMyAdmin,但他太肥了所以我都用 Adminer,下載完2個檔案(adminer.php + admirer.css)就 OK,功能幾乎一樣,上傳到網頁根目錄就可以用了。

如果遇到「缺少 mysqli⋯擴充套件」的問題:

$ yum install php-mysqli

如果重複遇到「您的 Session 過期問題:

$ chown -R nginx:nginx /var/lib/php

為求迅速及方便,可以先用 root 登入之後再慢慢新增使用者就好~

SFTP

你不會想要用 vim(Linux 內建的文字編輯器)敲完整個網站,所以需要安裝 SFTP,這樣就可以快樂的用 FileZilla 上傳/下載檔案。這邊提供 2 個安裝流程:

最後別忘記防火牆一定要設定允許 22/tcp 這個 SFTP 用的 Port!

Installation of WordPress

歡呼,我們的主角終於來了,這邊我就不再贅述 WordPress 的安裝方法,相信對於能夠走到這裡的人不過是裝個 WordPress 簡直小菜一碟、一塊蛋糕。

不過這次 MySQL 的 Host 欄位,localhost 似乎在前面步驟被鎖了,只好改填 /var/lib/mysql/mysql.sock 即可。

我因為是搬家所以有用到 WordPress 的外掛 Duplicator,搬家過程相當輕鬆愉快⋯⋯才有鬼。

Error Handle

如果遇到 In PHP 7.0 Fatal error: Uncaught Error: Call to undefined function json_encode()

$ yum install php-json

如果遇到 Fatal error: Call to undefined function mb_strtolower()

$ yum install php-mbstring

如果遇到PHP Short Tag語法<??>問題,開啟 /etc/php.ini,找到 short_open_tag 並改成 On

short_open_tag = On

改完要記得重啓 PHP-FPM:

$ sudo systemctl restart php-fpm

遇到 WordPress 媒體庫當掉,安裝了外掛 Media Library Recovery 修復。

遇到缺乏 imagick 或 gd 無法生成圖片縮圖之類的問題:

$ dnf install php-gd

請勿安裝不支援 CentOS 8 的 imagick,絕對是自找麻煩。

如果還有其他PHP-FPM相關問題,可以參考CentOS 8 安裝與設定 LEMP (NGINX、MariaDB、PHP) 和 phpMyAdmin《故障排除》段落。

Finally…

寫到這邊,網站搬家也總算是告一個段落,能夠重新看到後台的登入畫面頗感動。對於那些有需要自幹伺服器的人,希望本篇對你、對未來的我都有些小小的幫助,不要再踩自己踩過的雷。

搞定!