Asper 文字藝術師

Azure Linux VM 建置 WordPress 完全攻略

Published (updated: ) in 架站教學. 標籤: , , , , , .

Azure Linux VM 建置 WordPress 完全攻略

建立 Azure Linux VM – 以 CentOS 8 為例

如果有看過 Azure App Service 建置 WordPress 完全攻略的話,有經驗的網站建置或管理人員,可以發現 Azure App Service 幫我們做掉很多事情,只要透過滑鼠點一點,一套乾淨的 WordPress 網站就這樣架好了。接下來要實作的,是更進階的 Azure VM 建置 WordPress 教學,此外,再次說明,本教學尚不包含效能調校與 https 功能,本篇目的為體驗徒手打造 WordPress 網站,至於效能調校將是另一個領域了。

這邊將使用 Azure Linux VM 進行建置,為什麼要用 Linux 呢?前面有提過一些因素,其實最主要原因只有一個,省錢。使用 Windows 的 VM 環境,會需要額外支付一筆授權費用,因此這邊選擇使用 Linux 中的 CentOS 8 作為 WordPress 的家。

Azure 平台選擇 CentOS 8 VM image

登入 Azure 後一樣也是選擇 “Create a resource”

選擇 "Create a resource"示意圖
選擇 “Create a resource”

在搜尋列中輸入”CentOS-based”後 enter 搜尋

搜尋 CentOS 8 的系統 image 示意圖
搜尋 CentOS 8 的系統 image

找到之後,確認一下是最新的 CentOS 8.2 版,接著點選”Create”即可,這個版本可能隨著時間推進,可能會變成 8.3、8.4…依此類推,只要選最新版就對了。

確認 CentOS 8 的 Plan 是最新版的以後,再 Create 示意圖
確認 CentOS 8 的 Plan 是最新版的以後,再 Create

設定 Azure Linux VM 的基本環境

選完 Create 後,映入眼簾的是一連串 Azure VM 的相關設定,本頁面需進行以下設定:

  • 建立新的 Resource group 名稱
  • VM名稱(Virtual Machine name)
  • 選擇區域(Region)
  • 選擇大小(Size)
  • 設定管理帳號(Administrator account)
建立 VM 基本設定 1 圖示
建立 Azure Linux VM 基本設定 1

點選”Create new”後,接著輸入名稱(Name),這邊以asper-rg為例,可輸入自己方便識別的名字,完成後點選”OK”。

建立 Resource group 並取名示意圖
建立 Resource group 並取名
  • 確認 Resource group 出現的名稱是否正確
  • 輸入 Virtual machine name,這邊輸入 asper-wordpress 做為示範,一樣也是挑選自己方便識別的名稱即可
  • Region 選擇 Southeast Asia (新加坡機房),如果要更省錢,可以選 East US 機房,只是連線可能就會因距離關係,會比較慢一些
  • 確認 image 是否為 CentOS-based 8.2 (如有新版,請選最新版本)
  • Size 部分,選擇 Standard_B1ms 即可,想要小一點,或大一點,都可以嘗試看看
  • 管理帳號驗證方式,這邊使用 Password 即可,再輸入帳號密碼
  • Public inbound port 先選擇 None,等後面再設定

以上都沒問題後,點選”Next:Disks”

建立 VM 基本設定 2 示意圖
建立 Azure Linux VM 基本設定 2

設定 Azure Linux VM 的磁碟

Azure Linux VM 預設會給 30G 的磁碟空間,這邊先使用預設值,不額外增加資料碟,點選”Next:Networking”進行下一步,如果有需要,價格與規格可以參考這邊,如何掛載可以參考這邊。當然額外使用資料碟,會是比較有保障與彈性的作法。

Azure Linux VM 磁碟設定示意圖
Azure Linux VM 磁碟設定

設定 Azure Linux VM 的網路

這邊預設值都不改動,只改”NIC network security group”,選擇”Advanced”後,再點選”Create new”即可。可以想成這是在修改防火牆的規則設定。

Azure Linux VM 網路設定示意圖
Azure Linux VM 網路設定

Network security group (NSG) 可以想成防火牆的規則,這邊要修改 ssh 的規則,與新增一條規則,先點選 “1000:default-allow-ssh”進行設定,ssh 是連接 Linux VM 重要的協定,原則上不可以給除了自己以外的電腦連接,不然被拿去做壞事可就不好玩了。

修改 Network security group 的 ssh 規則示意圖
修改 Network security group 的 ssh 規則

設定 SSH 連入規則

  1. Source 先選擇成”IP Addresses”後
  2. 再輸入你電腦連出去上網的 IP 位址,要查詢可以點我取得,將查到的 IP 位址輸入到”Source IP addresses/CIDR ranges”內,並於最後面加上”/32″,表示僅這個 IP 位址可以連線,有多組可以使用”,”隔開
    e.g.:1.2.3.4/32, 2.3.4.5/32
  3. 修改”Priority”數字,可改為”1001″,否則會因衝突而無法儲存
  4. 點選”Save”儲存修改
設定 SSH 連入規則示意圖
設定 SSH 連入規則

設定 HTTP 與 HTTPS 連入規則

儲存後,可以發現上面的規則變了,接著再點選”Add an inbound rule”

新增 NSG 規則示意圖
新增 NSG 規則

依照下圖輸入相關資訊後,點選”add”即可
80 為 http 的 port,而 443 則是 https 的 port
簡單說,就是要讓你家的警衛室放人,不然大家都連不到你的網站

設定 web server 規則示意圖
設定 web server 規則

儲存 Azure Linux vm 的 NSG 設定

確認設定都沒問題後,點選”OK”

儲存 NSG 的設定示意圖
儲存 NSG 的設定

確認並建立 Azure Linux VM

剩下的設定使用預設值即可,接著點選”Review + create”即可

選擇" Review + create" 示意圖
選擇” Review + create”

確認都沒問題,再點選”Create”

建立 VM 確認圖示
建立 VM 確認

開始建立 VM ,可以先休息一下,等個五分鐘回來。

Azure VM 部署中示意圖
Azure VM 部署中

Azure Linux VM 部署完成可點選 Resource group 後面的名稱直接轉跳過去。

Azure Linux VM 部署完成示意圖
Azure Linux VM 部署完成

設定 Azure Linux VM DNS

Azure 有提供它內建免費自訂 DNS 名稱,先於 Resource group 中選擇”Public IP address”這個資源

選擇 resource group public IP address 資源示意圖
選擇 resource group public IP address 資源

Azure 提供的 public 服務,可使用其 DNS 標籤服務,依照下圖設定,可使用以”southeastasia.cloudapp.azure.com”作結尾的 Azure 內建網域名稱,點選”Configuration”後,這邊使用”asper”,如果沒有人跟你使用到重複的名稱,請點選”Save”存檔

設定 Azure DNS示意圖
設定 Azure DNS

設重後,點選”Overview”,再檢查”DNS name”欄位,便可使用”asper.southeastasia.cloudapp.azure.com”進行連線

確認 DNS 設定成功示意圖
確認 DNS 設定成功

連線到建立好的 Azure Linux VM

與 Windows 系統不太一樣,要連線到建立好的 Azure Linux VM 需透過 ssh 的通信協定連入,這邊使用一套叫做 putty 的工具來連線。先點我進到 putty 下載頁面,依自身電腦版本選擇 64-bit 或 32-bit 版,或直接點我下載 64 位元版即可。

putty 下載頁面示意圖
putty 下載頁面

下載完成後,打開出現如下畫面,輸入剛剛的連線資訊,再點選”Open”

putty 連線示意圖
putty 連線

第一次連線會出現提示視窗,這邊點選”是”即可,會將相關連線資訊存放至電腦中的登錄檔

putty 第一次連線告警示意圖
putty 第一次連線告警

接著輸入帳號密碼,登入終端介面

Azure Linux VM 系統初始化

登入後,先切換到 root 最高權限使用者,使用以下 init.sh 腳本,安裝必要套件,執行完後會自動重開機,這邊安裝的是一些個人常用的套件工具

切換至 root 需輸入以下指令即可,之後登入後,均需輸入下面指令後按 enter

sudo su -

輸入完指令後,別忘了記得 enter 確保順利執行

cat  >> init.sh << EOF
#!/bin/bash
# Install essential package & update
yum install epel-release -y
yum install mailx postfix openssh-clients rsync xinetd ftp man vim-enhanced screen telnet net-tools wget mlocate bind-utils glances lsof tmux zip unzip p7zip nload iotop yum-utils -y
yum update -y
chmod +x /etc/rc.d/rc.local
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl disable firewalld
timedatectl set-timezone Asia/Taipei
reboot
EOF

sh init.sh

執行之後,會重開機斷線,斷線後等候 5 分鐘後重新連線即可

安裝 Nginx 網頁伺服器

這邊我們要安裝最新版的 Nginx 網頁伺服器,請輸入以下指令

cat >> /etc/yum.repos.d/nginx.repo << EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=0
enabled=1
module_hotfixes=true
EOF

yum-config-manager --enable nginx-stable
dnf install -y nginx

Nginx 安裝成功後會出現以下畫面

Nginx 安裝成功示意圖
Nginx 安裝成功

設定 Nginx

cd /etc/nginx/conf.d/
mv default.conf default.conf.bak

在執行之前,如果不知道 vi 這個指令如何使用,請點我參考。
簡單說明作法,輸入 vi /etc/nginx/conf.d/wordpress.conf 後,要按一下鍵盤上的 i 進入輸入模式,再把下面那一段設定貼上後,再按 esc 鍵,再按住 shift 後,按兩次 z 鍵存檔離開。
還是不懂的話,可以參考這個 youtube 影片教學。

使用 vi /etc/nginx/conf.d/wordpress.conf 編輯設定

server {
    listen 80;
    listen [::]:80;
    server_name _;
    root /var/www/wordpress;
    index index.php;

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_intercept_errors on;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_pass   php-fpm;

    }

}

安裝 MariaDB 資料庫

這邊我們要安裝最新版的 MariaDB 資料庫,請輸入以下指令

cat >> /etc/yum.repos.d/mariadb.repo << EOF
# MariaDB 10.5 CentOS repository list - created 2020-07-24 13:32 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos8-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

dnf install -y MariaDB-server MariaDB-client
systemctl stop mariadb

MariaDB 安裝成功後會出現以下畫面

MariaDB 安裝成功示意圖
MariaDB 安裝成功

設定 MariaDB 資料庫使用字元(character set)

輸入以下指令進行設定使用 utf8mb4 編碼,為什麼要這樣設定呢?使用這個資料庫編碼,便可使用特殊字而不容易出現亂碼。
參考資料1參考資料2

cat >> /etc/my.cnf.d/utf8mb4.cnf << EOF
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
character-set-client-handshake = false
EOF

systemctl restart mariadb
mysql -uroot -e 'status'

MariaDB 資料庫設定成功會出現 utf8mb4 如下

MariaDB 資料庫設定成功示意圖
MariaDB 資料庫設定成功

設定 MariaDB 資料庫連線權限

編輯設定腳本cd ~ && vi db_config.sh ,可以修改 DB_PASSWPRD 中的密碼成為自己的密碼

#!/bin/sh
HOSTNAME=`hostname`
# enter your root password here
DB_PASSWORD=root

systemctl start mariadb
# delete unuse User
mysql -uroot -e "DROP USER 'root'@'${HOSTNAME}';"
mysql -uroot -e "DROP USER ''@'${HOSTNAME}';"
mysql -uroot -e "DROP USER ''@'localhost';"
mysql -uroot -e "DROP USER 'root'@'::1';"

# create WordPress DB
mysql -uroot -e "CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"

# create remote user
mysql -uroot -e "CREATE USER 'root'@'%' IDENTIFIED BY '${DB_PASSWORD}';"
mysql -uroot -e "GRANT ALL privileges ON *.* TO 'root'@'%';"

# create password for root
mysql -uroot -e "FLUSH PRIVILEGES;"
mysql -uroot -e "SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('${DB_PASSWORD}');"
mysql -uroot -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${DB_PASSWORD}');"

執行腳本,輸入sh db_config.sh,接著再輸入以下指令啟動服務

systemctl restart mariadb.service
systemctl enable mariadb.service

安裝 PHP 套件

輸入以下指令進行安裝最新版之 php 套件

dnf install -y dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf module reset php
dnf module enable -y php:remi-7.4
dnf install -y php php-mysqlnd php-mbstring php-json php-pecl-zip php-json php-gd

設定 php-fpm 相關設定

備份原始設定

cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.bak

修改 php-fpm 使用者為 nginx vi /etc/php-fpm.d/www.conf 將原本的 apache 改為 nginx

; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

設定 php 時區

修改設定檔,調整 date.timezone"Asia/Taipei"

vi /etc/php.ini
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Asia/Taipei"

完成後輸入以下指令重啟服務

systemctl restart php-fpm nginx

下載 WordPress 並設定安裝

wget https://wordpress.org/latest.tar.gz
tar zxvf latest.tar.gz
mv wordpress /var/www/
find /var/www/ -type d -exec chmod 2775 {} \;
find /var/www/ -type f -exec chmod 664 {} \;
chown nginx. -R /var/www/wordpress

接著就可以開啟瀏覽器,輸入http://OOO.southeastasia.cloudapp.azure.com
網址便可開始安裝 WordPress 了,這邊輸入之前腳本中設定的資料庫密碼(DB_PASSWPRD),接著點選”傳送”

WordPress 資料庫設定示意圖
WordPress 資料庫設定

接著會檢查填寫的設定有無錯誤,如無錯誤,便可點選”執行安裝程式”

WordPress 確認安裝示意圖
WordPress 確認安裝

這樣便已經都安裝完成了,趕緊來測試一下 Page Speed 看看結果如何,在無任何優化的情況下,還有 93 分

Page Speed 測試結果示意圖
Page Speed 測試結果

再次回顧,本次建置尚未包含以下內容:

  • 性能優化
  • https 加密連線設置
  • 高可用性(商用建議,但成本會增加)

不過已經可以發現,使用 Azure Linux VM 建置 WordPress 的話,只要花約莫每月五百快六百元,便可擁有如此不錯的效能,當然跟 Linode 同規格費用相較,費用多上不少,但能直接擁有高度擴充彈性的使用環境,勢必得多付出一點代價,對於公司行號應用上,相對比較適合。

頁次: 1 2