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就可以架得起來
- 核心線程/記憶體容量/硬碟容量/網路頻寬 ↩︎
Leave a Reply