我最近因為想要練習寫文章,所以找了幾個部落格內容管理系統,最後選定使用 Grav 當作部落格網站
Table of Contents
1. 檢查與更新 VM 環境
我這邊選 linode 因為本身喜歡簡單容易操作的介面,架設這個選最便宜的方案 1cpu
在購買 vm 后,ssh 進去的第一件事情 檢查 vm 環境
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: foca
這邊確定為 ubuntu 20.04 LTS
2. 安裝 PHP 和移除 Apache
這邊把 apt 套件更新並且把系統自帶的 apache 移除,因為 nginx 在靜態檔案的處理速度比較快
$ sudo apt update -y && sudo apt upgrade -y && sudo apt remove apache2* && sudo apt autoremove
因為接下來安裝 php 基本套件
sudo apt install vim zip unzip nginx git php-fpm php-cli php-gd php-curl php-mbstring php-xml php-zip php-apcu
調整 php ini
這邊確定
$ vim /etc/php/8.1/fpm/php.ini
將 cgi.fix_pathinfo
改為 1
,這邊是因為有資安的問題 link
cgi.fix_pathinfo=1
$ systemctl restart php8.1-fpm
3. 配置 PHP-FPM
$ cd /etc/php/8.1/fpm/pool.d
$ mv www.conf www.conf.bak
$ vim grav.conf
由於我們這邊是選擇 1 cpu 的
[grav]
user = grav
group = grav
listen = /var/run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
$ adduser grav
是的,在 Linux 中,當你使用 adduser grav 指令時,通常會同時建立以下內容:
# 使用者 grav:這是你指定的使用者名稱。
# 群組 grav:系統會自動建立一個與使用者名稱相同的群組。
# 使用者 grav 會被加到群組 grav:新建立的使用者 grav 會被自動加入到剛建立的群組 grav。
# 換句話說,使用者 grav 的預設主要群組是 grav。因此,當使用者 grav 建立檔案或目錄時,這些檔案或目錄的預設所屬群組也是 grav。
# 如果你希望使用不同的群組或不自動建立群組,你可以使用其他參數來自定義,例如使用 --ingroup 選項。
$ su - grav
$ mkdir -p www/html
$ cd www/html
測試 html
跟 php
的格式會不會成功
$ touch index.html && echo 'hello world!' >> index.html;
# 測試 index.html
$ rm index.html
$ touch index.php && echo '<?php phpinfo();' >> index.php
# 測試 index.php
退出 grav 角色
4. 配置 Nginx
$ exit
# 這邊會切換成 root
$ cd /etc/nginx/sites-available/
$ ls -al
default
$ vim grav
server {
# listen 80;
index index.html index.php;
## Begin - Server Info
root /home/grav/www/html;
server_name localhost;
## End - Server Info
## Begin - Index
# for subfolders, simply adjust:
# `location /subfolder {`
# and the rewrite to use `/subfolder/index.php`
location / {
try_files $uri $uri/ /index.php?$query_string;
}
## End - Index
## Begin - Security
# deny all direct access for these folders
location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
# deny running scripts inside core system folders
location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
# deny running scripts inside user folder
location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
# deny access to specific files in the root folder
location ~ /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }
## End - Security
## Begin - PHP
location ~ \.php$ {
# Choose either a socket or TCP/IP address
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
# fastcgi_pass unix:/var/run/php5-fpm.sock; #legacy
# fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
## End - PHP
}
設定完成後 nginx -t 測試訊息
$ cd ../sites-enabled
$ ln -s ../sites-available/grav
$ rm default
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ systemctl restart nginx
$ systemctl restart php8.1-fpm
sites-available:這個目錄包含 Apache 2 虛擬主機的配置文件。虛擬主機允許 Apache 2 配置多個具有不同配置的網站。 sites-enabled:與 mods-enabled 類似,sites-enabled 包含指向 /etc/apache2/sites-available 目錄的符號連結。同樣地,當 sites-available 中的配置文件被符號連結時,該配置的網站會在 Apache2 重啟後啟用並生效。 網站建立好之後,切換去 grav 使用者,並在網站的目錄底下,開始建立 grav
$ su grav
$ cd ~/www
$ wget -O grav.zip https://getgrav.org/download/core/grav/latest
$ unzip grav.zip
$ rm -Rf html
$ mv grav html
$ cd ~/www/html
$ bin/grav clear
Clearing cache
Cleared: /home/grav/www/html/cache/twig/*
Cleared: /home/grav/www/html/cache/doctrine/*
Cleared: /home/grav/www/html/cache/compiled/*
Cleared: /home/grav/www/html/images/*
Cleared: /home/grav/www/html/assets/*
Touched: /home/grav/www/html/user/config/system.yaml
重啟之後,拜訪 lindoe 上面給你的 public ip ,有看到畫面就成功了