折騰一次 Halo

月光發表於2020-08-11

本文記錄在 CentOS 7.6 系統上基於 Halo 快速搭建部落格,部落格系統很多,暫不與其它系統做比較,喜歡折騰就折騰。

Halo 有三種部署方式,我這裡選擇直接在物理機上部署,其它兩種是基於 Docker 和 Docker Compose。

安裝

Halo 推薦建立一個 Halo 使用者,我這裡省略了這一步,麻煩。

更新系統軟體包

yum update -y

安裝 Java 執行環境

# 安裝 OpenJRE
sudo yum install java-1.8.0-openjdk -y

# 檢測是否安裝成功
java -version

# 輸出如下即為安裝成功
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

下載 Halo 配置檔案

# 下載配置檔案到 ~/.halo 目錄
curl -o ~/.halo/application.yaml --create-dirs https://dl.halo.run/config/application-template.yaml

修改配置檔案

# 使用 Vim 工具修改配置檔案
vim ~/.halo/application.yaml

把配置檔案裡的 usernamepassword修改一下,這個是你登入管理後臺的賬號密碼,其它基本不用動,具體可以看一下官網文件說明。

下載最新的安裝包

# 下載最新的 Halo 安裝包,{{version}} 為版本號,不帶 v,更多下載地址請訪問 https://halo.run/archives/download.html
wget https://dl.halo.run/release/halo-{{version}}.jar -O halo-latest.jar

寫此文時,Halo 的最新版本是v1.3.2,所以我的下載命令為:

wget https://dl.halo.run/release/halo-1.3.2.jar -O halo-latest.jar

啟動測試

java -jar halo-latest.jar

看到以下輸出內容即為啟動成功:

啟動成功

配置開機後臺自啟動

# 下載 Halo 官方的 halo.service 模板
curl -o /etc/systemd/system/halo.service --create-dirs https://dl.halo.run/config/halo.service

# 修改 halo.service
vim /etc/systemd/system/halo.service

開啟服務配置檔案後可以看到內容如下引數:

  • -Xms256m:為 JVM 啟動時分配的記憶體,請按照伺服器的記憶體做適當調整,512 M 記憶體的伺服器推薦設定為 128,1G 記憶體的伺服器推薦設定為 256,預設為 256。
  • -Xmx256m:為 JVM 執行過程中分配的最大記憶體,配置同上。
  • YOUR_JAR_PATH:Halo 安裝包的絕對路徑,例如 /www/wwwroot/halo-latest.jar

我的伺服器是 8 G 記憶體,並且安裝包的絕對路徑是 /root/halo-latest.jar,所以我最終的配置是如下:

Description=Halo Service
Documentation=https://halo.run
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/java -server -Xms2048m -Xmx2048m -jar /root/halo-latest.jar
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog

StandError=inherit

[Install]
WantedBy=multi-user.target

順序執行以下命令,最後看到 Halo 的服務狀態:

# 修改 service 檔案之後需要重新整理 Systemd
sudo systemctl daemon-reload

# 使 Halo 開機自啟
sudo systemctl enable halo

# 啟動 Halo
sudo service halo start

# 檢視 Halo 的執行狀態
sudo service halo status

Halo 服務的執行狀態

到此,已經可以通過 IP:埠 訪問了,接下來我們配置域名,使用 Nginx 作為反向代理並配置 SSL 強制 HTTPS 訪問。

配置域名

因為我這臺伺服器以後還需要用到 PHP 專案,所以不會按照官網的方式去配置,而是使用 LNMP 一鍵安裝指令碼安裝 Nginx、PHP、MySQL 等其它軟體,並使用這個指令碼結合阿里雲 DNS 配置 Let’s Encrypt 的 SSL 證照,用這個指令碼很方便。

準備工作

在開始之前,先在伺服器上安裝一個工具 screen,這個工具可以防止我們在安裝 LNMP 的時候因為網路突然掉線或者不小心關掉了遠端連線工具而導致安裝中斷。

# 安裝 screen
yum install -y screen

# 啟動一個 screen 現場
screen -S lnmp

# 如果真的掉線了,可以重新連線到伺服器上,前使用以下命令恢復安裝程式
screen -r lnmp

安裝 LNMP

wget http://soft.vpser.net/lnmp/lnmp1.7.tar.gz -cO lnmp1.7.tar.gz && tar zxf lnmp1.7.tar.gz && cd lnmp1.7 && ./install.sh lnmp

安裝過程稍微有些漫長,具體需要看機器配置,鑑於你可能不需要這個東西,所以不再描述。

新增虛擬主機

# 新增虛擬主機,根據你自己的域名做相應調整
lnmp vhost add

新增虛擬主機

配置 SSL 證照和反向代理

申請證照

Let’sEncrypt 免費萬用字元/泛域名SSL證照新增使用教程 - LNMP一鍵安裝包

我們使用 Let’s Encrypt 結合域名服務商 API 的方式來配置 SSL 證照 。

因為我的域名是在阿里,所以去這裡獲取到 AccessKey IDAccessKey Secret,並在伺服器執行以下命令:

export Ali_Key="你的 AccessKey ID"
export Ali_Secret="你的 AccessKey Secret"

匯入這兩個環境變數以後,就可以使用以下命令來自動配置 SSL 證照了,Let’s Encrypt 的 SSL 證照有效期只有三個月,但 LNMP 一鍵安裝指令碼已經為我們配置好了,過期之前會自動續期。

# 要把這個 ali 替換成你域名所在的服務商名稱
lnmp onlyssl ali

配置 SSL 證照

如此,Let’s Encrypt 的免費 SSL 證照就申請好了,接下來配置 SSL 證照和反向代理。

配置 SSL 證照和反向代理

# 把 Nginx 反向代理的示例配置直接覆蓋到部落格的虛擬主機配置上
cat /usr/local/nginx/conf/example/nginx-reverse-proxy-example.conf > /usr/local/nginx/conf/vhost/coderlxc.com.conf

修改其內容為以下:

  1 server {
  2         listen 80;
  3         #listen [::]:80;
  4         server_name coderlxc.com www.coderlxc.com;
  5 
  6         #如果需要http 301跳轉到 https 需要將下面行前面的 # 註釋去掉,並過載nginx
  7         return 301 https://$host$request_uri; 
  8 
  9         access_log off;
 10 }
 11 
 12 server {
 13         listen 443 ssl http2;
 14         #listen [::]:443 ssl http2;
 15         server_name coderlxc.com www.coderlxc.com;
 16         
 17         ssl_certificate /usr/local/nginx/conf/ssl/coderlxc.com/fullchain.cer;
 18         ssl_certificate_key /usr/local/nginx/conf/ssl/coderlxc.com/coderlxc.com.key;
 19         ssl_session_timeout 5m;
 20         ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
 21         ssl_prefer_server_ciphers on;
 22         ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES    -128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AE    S256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
 23         ssl_session_cache builtin:1000 shared:SSL:10m;
 24         # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
 25         # ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
 26         
 27         location / {
 28             proxy_pass http://127.0.0.1:8090;
 29             proxy_http_version    1.1;
 30             proxy_cache_bypass    $http_upgrade;
 31             proxy_set_header Upgrade            $http_upgrade;
 32             proxy_set_header Connection         "upgrade";
 33             proxy_set_header Host               $host;
 34             proxy_set_header X-Real-IP          $remote_addr;
 35             proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
 36             proxy_set_header X-Forwarded-Proto  $scheme;
 37             proxy_set_header X-Forwarded-Host   $host;
 38             proxy_set_header X-Forwarded-Port   $server_port;
 39         }   
 40 
 41         access_log off;
 42 }
  • 開啟第 7 行的註釋,以強制跳轉到 HTTPS,並刪除下面沒用的內容。
  • 修改第 17、18 行內容,調整為你自己證照的路徑,路徑在 LNMP 指令碼安裝完以後已經顯示在終端中。
  • 註釋掉第 25 行,因為我們沒有這個玩意兒,會導致報錯。
  • 將第 28 行的 3000 埠調整為Halo 監聽的 8090埠。

至此,SSL 證照和和反向代理都已經配置好了,並強制 HTTP 跳轉到 HTTPS。

儲存修改並退出後,檢查一下 Nginx 的配置檔案是否有問題,重新載入 Nginx 配置檔案:

# 檢查 Nginx 配置是否有誤
nginx -t

# 重新載入 Nginx 配置檔案
lnmp nginx reload

訪問部落格域名,即可以看到 Halo 的安裝嚮導。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

小時候,幸福是一件很簡單的事;長大了,簡單是一件很幸福的事。

相關文章