Server ,Networking ,Photography

By

WordPress & LEMP 自架部落格


A.前言&環境

1.前言

LEMP是 Linux ,Nginx ,MariaDB ,PHP的簡稱
本文會演示在Proxmox主機的LXC container安裝 也通用VM或物理機上的Debain 12

2.爲何使用Wordpress+LEMP

WordPress是一個生態完善且易用的網站套件 對於入門來說相當方便
之所以把傳統LAMP的Apache換成Nginx單純是個人喜好
加上可以順便做其他內網服務的reverse proxy
使用debian是因為筆者從Proxmox到筆電都是deb-based
用Ubuntu的話流程應該是大差不差

3.使用環境

Container: debian-12-standard_12.2-1 (同distro的VM也通用)
Resource: 1 core CPU ,1GB RAM (VM建議2~4G) ,16G root disk
user :非root的user 必須有sudo權限
network:正常internet存取 有公網IP且公開TCP80,443

C.安裝過程

1.更新&安裝系統更新

sudo apt update && upgrade

2.安裝Nginx

sudo apt install nginx -y

啟動nginx並設定開機啟動

sudo systemctl start nginx
sudo systemctl enable nginx

這裏可以在瀏覽器輸入這臺伺服器的IP 如果看到nginx的頁面就說明安裝成功了

3.安裝MariaDB

sudo apt install mariadb-server mariadb-client -y

執行安全安裝

sudo mysql_secure_installation

第一個選項

Enter current password for root (enter for none):y
由於尚未設定db的root user 所以留空直接enter

第二個選項
Switch to unix_socket authentication [Y/n]:n
由於要繼續使用原本的驗證 選n後enter
第三個選項
Change the root password? [Y/n]
若已設定root密碼 選n 還沒設定root密碼的話選Y更改
第四個選項
Remove anonymous users? [Y/n]:Y
移除匿名使用者 選Y
第五個選項
Disallow root login remotely? [Y/n]:Y
大部分情況下我們不希望可以從遠程登入root帳號 所以選Y
第六個選項
Remove test database and access to it? [Y/n]:Y
移除測試資料庫 選Y

第七個選項
Reload privilege tables now? [Y/n]:Y
應用剛才的設定 選Y
這樣就完成了 如果中途不小心跳掉可以再打一次secure install指令重跑

4.安裝PHP套件

sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip -y

5.創建wordpress資料庫

登入MariaDB
sudo mysql -u root -p
創建wordpress用的資料庫(記得把密碼替換成自己的)
CREATE DATABASE wordpress_db;
CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY '輸入你的密碼';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

6.安裝Wordpress

切換至預設網頁目錄
cd /var/www/html

下載wordpress最新版本

sudo wget https://wordpress.org/latest.tar.gz

解壓縮檔案並把檔案移到網站根目錄

sudo tar -xvzf latest.tar.gz
sudo mv wordpress/* .
移除下載壓縮檔
sudo rm -rf wordpress latest.tar.gz

7.編輯wordpress設定檔

複製設定檔範例 (與上一步一樣都在/var/www/html 目錄)
sudo cp wp-config-sample.php wp-config.php

編輯設定檔 (可使用vim等其他檔案編輯程式)

sudo nano wp-config.php
編輯內容 
跟步驟5設定的一樣就行 若其他設定都按照本文 只需變更密碼部分
define('DB_NAME', 'wordpress_db');
define('DB_USER', 'wordpress_user');
define('DB_PASSWORD', '你的密碼');
define('DB_HOST', 'localhost');
完成後ctrl+X 按Y後enter 儲存並退出

8.變更網站檔案權限

將/var/www/html下的檔案擁有者改成www-data 並讓其他使用者唯讀

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

9.設定Nginx

提醒:本段爲基礎HTTP設定 若需要外網存取 建議直接跳到"10.取得SSL憑證")
切換至nginx的config目錄
cd /etc/nginx/conf.d
新建一個conf檔案
sudo nano wordpress.conf
輸入config內容 (記得替換成自己的域名,僅內網使用或是無域名時可設定IP位址)
server {
    listen 80;
    server_name 你的域名(或IP位址) ;

    root /var/www/html;
    index index.php index.html index.htm;

    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;
    }

    location ~ /\.ht {
        deny all;
    }
}
然後儲存並退出 (ctrl+X 輸入Y後enter)
測試config檔案正常
sudo nginx -t

若無報錯 重新載入Nginx

sudo systemctl reload nginx
若不需要SSL憑證 僅使用HTTP,完成此段落後可跳至12.測試網站運行

10.取得SSL憑證

使用letsencrypt獲得憑證(已有SSL憑證者可跳至"11.設定HTTPS")
安裝certbot
sudo apt install certbot
使用certbot取得憑證
取得憑證時請確認本機的TCP80,443 port已公開至外網
sudo systemctl stop nginx
sudo certbot certonly --standalone -d 你的域名 
sudo systemctl start nginx
憑證會儲存在本機的"/etc/letsencrypt/live/你的域名/"目錄下
letsencrypt憑證的有效期只有三個月 要自動刷新的話會占用80端口 會跟nginx衝突
所以要自動更新的話要在腳本內加入暫停nginx服務的指令
nano /etc/letsencrypt/renewal/你的域名.conf
在config內加入
pre_hook = systemctl stop nginx
post_hook = systemctl start nginx
儲存並退出 ctrl+X 按y後enter
測試設定能否正常運作
sudo certbot renew --dry-run

11.設定HTTPS

回到Nginx設定檔路徑並建立新config
cd /etc/nginx/conf.d/
sudo rm wordpress.conf(若步驟9.有新增此檔案再進行 沒有可跳過這行)
sudo nano wordpress.conf

輸入以下設定 (記得替換自己的網域名與憑證路徑)

server {
    listen 80;
    server_name 你的域名;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name 你的域名;

    root /var/www/html;
    index index.php index.html index.htm;

    #SSL憑證路徑
    ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;
    
    ssl_session_timeout 1d;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on ;

    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;
    }

    location ~ /\.ht {
        deny all;
    }
}
儲存並退出 ctrl+X 按y後enter
測試設定檔運行
sudo nginx -t
沒有問題後重載設定檔
sudo systemctl reload nginx

12.測試網站運行

僅使用HTTP時 在瀏覽器輸入伺服器的IP位址即可存取網站
完成11.設定HTTPS後 在瀏覽器輸入域名即可訪問
config中設定會自動將http流量redirect至https

D.注意事項與總結

1.注意事項

wordpress內的網站網址建議不要自行修改 與nginx設定衝突可能導致無法訪問網頁
9.設定nginx以前的步驟通用Apache 如習慣使用Apache或已有環境可根據內容自行調整

2.總結

本次使用LXC的原因主要是節省資源 增加資源分配彈性, 如果環境不支援LXC 直接安裝在VM或物理機上也可以 或家裡沒有固定IP/雙層NAT等無法公開80端口環境下 可使用各家VPS架設 網站本身非常省資源 大概1C1T/4GB/16GB/1Mbps1就可以架得起來
  1. 核心線程/記憶體容量/硬碟容量/網路頻寬 ↩︎

Leave a Reply

Your email address will not be published. Required fields are marked *

WHAT’S NEW

  • AdGuardHome DNS, DoT ,DoH

  • Truenas 故障排除: format DIF unsupport

  • WordPress & LEMP 自架部落格