Hero Image

使用 Grav 快速架設 Blog

我最近因為想要練習寫文章,所以找了幾個部落格內容管理系統,最後選定使用 Grav 當作部落格網站

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 

測試 htmlphp 的格式會不會成功

$ 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 ,有看到畫面就成功了

References:

Other Related Posts:

從 SuiteCRM 開始學習客戶關係管理

SuiteCRM 是什麼?

如果你有聽過 Wordpress,它是一款全球熱門的內容管理系統,大部分的用途都是搭建個人部落格、品牌形象網站、架設購物網站等,而 SuiteCRM 則是專注於客戶關係管理的系統,他的用途是用來記錄及分析公司業務跟客戶之間關係的狀態。

以下分享為,使用 SuiteCRM 開發內部客戶關係管理的經驗.

1. 什麼是 SuiteCRM

SuiteCRM 是以 php 語言寫的一套完整的開源客戶關係管理系統,他屬於SugarCRM 6.5 的分支版本,由 SalesAgility 公司進行維護,SuiteCRM 一樣有外掛的市場的機制 h...

6th Mar 2022