幫朋友架設 Wordpress 透過 Caddy 經過穩定的運行一段時間
由於 Caddy 的設定非常精簡方便,又可以自動從 Let's Encrypt 申請憑證
可以使用 Caddy 進行反向代理和一些詳細設定,對我來說比較方便
規格
- OS: CentOS Linux release 7.7.1908
- RAM: 2 GB
- CPU: 2 Core
- Wordpress: 5.4
前置作業
首先安裝 yum-utils
,用來管理 yum repo 及 package 的工具
1
|
yum install -y wget yum-utils
|
建立稍候會使用到的使用者 caddy,並設定不能登入的用戶 /sbin/nologin
並將擺放網頁的資料夾擁有者設定給建立好的 cadyy
1
2
|
useradd -r -d /var/www -M -s /sbin/nologin caddy
chown -R caddy:caddy /var/www
|
PHP7
CentOS 不會有太多新的套件可以供安裝,但是可以透過手動的方式安裝一些較新的套件
1
2
3
4
|
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh epel-release-latest-7.noarch.rpm
rpm -Uvh remi-release-7.rpm
|
Step 1. 指定安裝 PHP 版本
這裡提供 PHP 7、7.1、7.2 三個版本可供安裝
1
2
3
4
5
6
7
8
|
## php70
yum-config-manager --enable remi-php70
## php71
yum-config-manager --enable remi-php71
## php72
yum-config-manager --enable remi-php72
|
Step 2. 安裝 Wordpress 相關 PHP 套件
安裝 PHP 相關套件,稍候才能運行起 Wordpress
1
|
yum install -y php php-fpm php-mysqlnd php-pdo php-xml php-pear php-devel php-mbstring re2c gcc gcc-c++
|
Step 3. 確認 PHP 版本
若沒有安裝成功或是有相關錯誤,是沒有辦法顯示出 PHP 資訊
若安裝成功,則可以看到是否為自己想要安裝的版本
1
2
3
4
5
6
|
php -v
PHP 7.2.30 (cli) (built: Apr 15 2020 07:23:04) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
|
Step 4. 設定 php-fpm
PHP-FPM 是用來管理 PHP FastCGI
這邊設定 PHP-FPM,將 listen 設定成 Unix Socket /var/run/php-fpm/php-fpm.sock
當然也可以使用 TCP Socket,這邊依個人偏好選擇,Caddy 都可以支援
這邊 listen 我設定成 unix,並且使用者更改成 caddy,並將權限更改成 0660
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
vim /etc/php-fpm.d/www.conf
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /var/run/php-fpm/php-fpm.sock
...
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
; mode is set to 0660
listen.owner = caddy
listen.group = caddy
listen.mode = 0660
|
然後重新啟動 PHP-FPM 以便載入設定
1
|
systemctl restart php-fpm
|
MYSQL8
CentOS 原本可以安裝套件都是穩定的版本,所以不太會有很新的套件可供安裝
一樣需要新增 MYSQL8 的安裝來源
1
|
rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
|
然後要關閉其他版本的 mysql 的安裝來源
只啟動 mysql8 版本的安裝來源,並進行安裝
1
2
3
|
sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/mysql-community.repo
yum --enablerepo=mysql80-community install mysql-community-server
|
取得預設 MYSQL 密碼
安裝好 MYSQL 後,內建已經產生高複雜的密碼
1
2
3
4
|
grep "A temporary password" /var/log/mysqld.log
2020-04-23T14:05:54.162979Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Uad4ej2dIh)t
|
初始設定 MYSQL
安裝好 MYSQL ,需要行一些基本的安全相關設定
可以透過 mysql_secure_installation
進行設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mysql_secure_installation
# 刪除匿名使用者
Remove anonymous users? [Y/n] y
# 關閉 root 帳戶遠端登入
Disallow root login remotely? [Y/n] y
# 刪除 test 資料庫
Remove test database and access to it? [Y/n] y
# 重新載入
Reload privilege tables now? [Y/n] y
|
建立資料庫
登入資料庫,並輸入預設高複雜度密碼或者剛剛有更改成自己熟悉的密碼
並建立資料庫,稍候 Wordpress 需要使用此資料庫
1
2
3
4
5
|
mysql -u root -p
mysql> CREATE DATABASE wordpress;
mysql> exit;
|
Caddy 1 (Options)
安裝
可以從 Caddy 官方確認,不過快出 Caddy 2 了,所以等之後 Caddy 2 出來之後會補上 Caddy 2 的設定
1
|
curl https://getcaddy.com | bash -s personal
|
Caddy 1 Systemd 設定
將 caddy1.service 設定至 /etc/systemd/system/caddy.service
才能透過 systemctl
使用以下指令操控 Caddy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 重新載入設定
systemctl daemon-reload
# 開機自動執行 Caddy
systemctl enable caddy
# 啟動 Caddy
systemctl start caddy
# 重啟 Caddy
systemctl restart caddy
# 關閉 Caddy
systemctl stop caddy
|
設定檔
創建 Caddy 的設定檔資料夾及設定檔
1
2
3
|
mkdir /etc/caddy
touch /etc/caddy/Caddyfile
|
設定 Caddy 給 Wordpress 使用的設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
:80 {
root /var/www/html/wordpress
gzip
fastcgi / /var/run/php-fpm/php-fpm.sock php
# 防止 php 檔案上傳,以免被植入後門
rewrite {
r /uploads\/(.*)\.php
to /
}
rewrite {
if {path} not_match ^\/wp-admin
to {path} {path}/ /index.php?{query}
}
}
|
進行重啟 Caddy 讓設定生效
1
|
systemctl restart caddy
|
Caddy 2 (Options)
安裝
可以從 Github Caddy Release 下載,選擇對應的系統版本
這裡我是 Linux 64Bit ,所以選擇 caddy_2.0.0_linux_amd64.tar.gz
1
|
wget https://github.com/caddyserver/caddy/releases/download/v2.0.0/caddy_2.0.0_linux_amd64.tar.gz
|
下載好之後進行解壓縮,並移入 /usr/bin/
1
2
|
tar zxvf caddy_2.0.0_linux_amd64.tar.gz
mv caddy /usr/bin/
|
Caddy 2 Systemd 設定
將 caddy2.service 設定至 /etc/systemd/system/caddy.service
才能透過 systemctl
使用以下指令操控 Caddy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 重新載入設定
systemctl daemon-reload
# 開機自動執行 Caddy
systemctl enable caddy
# 啟動 Caddy
systemctl start caddy
# 重啟 Caddy
systemctl restart caddy
# 關閉 Caddy
systemctl stop caddy
|
設定檔
與 Caddy 1 有所不同,雖然很像,但是還是有些差異
而 rewrite
的部分,會在近期驗證補上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
:80 {
# root /var/www/html/wordpress
root * /var/www/html/wordpress
# gzip
encode gzip
#fastcgi / /var/run/php-fpm/php-fpm.sock php
php_fastcgi unix//var/run/php-fpm/php-fpm.sock
# 防止 php 檔案上傳,以免被植入後門
respond /uploads/*.php 404
@wp-admin {
path not ^\/wp-admin/*
}
rewrite @wp-admin {path}/index.php?{query}
# 靜態文件伺服器
file_server
}
|
設定好之後,以指令的方式啟動 Caddy2
1
|
caddy run --config=/etc/caddy/Caddyfile
|
Wordpress
下載
這裡最重要的就是安裝 Wordpress
從官方下載最新的版本 Wordpress 5.4
1
2
3
4
5
|
cd /var/www/html/
wget https://tw.wordpress.org/latest-zh_TW.tar.gz
tar zxvf wordpress-5.4-zh_TW.tar.gz
|
安裝
每個人的機器 IP 位址不一定相同,請確認好自己的 IP
接下來透過瀏覽器安裝 Wordpress 系統,登入至 http://{Wordpress IP}
Step 1
沒有權限或資料錯誤等等異常,便會順利看到 Wordpress 的安裝畫面
Step 2
設定好剛剛在 MYSQL 建立的資料庫名稱和資料庫的帳號密碼
Step 3
沒有遇到資料庫打錯會無法連線的問題,就能開始執行安裝程式
Step 4
安裝程式執行完畢之後,就可以開始設定 Wordpress 的網站名稱、管理者帳號密
Step 5
設定完畢之後就能登入 Wordpress 後台
輸入設定好的帳號密碼,登入至 Wordpress 後台
Step 6
成功進入 Wordpress 後台,沒有任何問題
前台也是沒有任何問題
結論
自己在寫網站都是透過 Golang 之後,有一小段時間沒有碰 PHP
不過 Wordpress 真的是一個很成熟的 CMS 平台,將來希望可以自己試著開發一套自己的 CMS
看看自己能開發到什麼程度,也可以對架構和功能的設計有一個練習
Ref
- yum-utils(1) - Linux man page
- Caddy 1
- Caddy 2
- Wordpress
- Caddy 2 - Download