1 前言
Halo 是一個強大易用的開源建站工具,擁有豐富的主題模板和插件,幫助用户快速搭建屬於自己的博客系統。
準備
- CentOS 系統服務器(推薦騰訊雲服務器)
- 域名
- SSH 工具(推薦 FinalShell)
注意
本文涉及 docker 和 docker-compose 的安裝,Nginx、MySQL 使用寶塔面板安裝。
2 Docker 部分
安裝 yum-utils
# yum-utils是yum的工具包集合,需要用到其中的yum-config-manager
sudo yum install -y yum-utils
從國內服務器上下載 docker
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝 docker
sudo yum install -y docker-ce docker-ce-cli http://containerd.io docker-buildx-plugin docker-compose-plugin
驗證 docker 是否安裝成功
sudo docker --version
# 出現版本號即為安裝成功
# Docker version 24.0.6, build ed223bc
安裝 docker-compose
方案一:手動安裝
訪問 docker/compose 獲取最新版本,選擇文件名稱為 docker-compose-linux-x86_64 下載並上傳至 /usr/local/bin/docker-compose 目錄,/docker-compose 需手動創建。
方案二:命令行安裝
# 下載docker-compose文件並創建目錄
# 可能較慢
curl -L https://github.com/docker/compose/releases/download/2.21.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 將文件複製到/usr/local/bin環境變量下
mv docker-compose /usr/local/bin
# 給該文件執行權限
chmod +x /usr/local/bin/docker-compose
驗證 docker-compose 是否安裝成功
docker-compose -v
# 出現版本號即為安裝成功
# Docker Compose version v2.21.0
方案三:pip方式安裝
# 跳過卸載requests模塊操作
sudo pip install --ignore-installed requests
# 安裝docker-compose
pip install docker-compose
驗證 docker-compose 是否安裝成功
docker-compose -v
# 出現版本號即為安裝成功
# docker-compose version 1.26.2, build unknown
# docker-py version: 4.4.4
# CPython version: 2.7.5
# OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017
3 Halo 博客部署
3.1 建數據庫
數據庫使用 MySQL,數據庫名、用户名和密碼可自定義,密碼建議隨機。
3.2 創建容器組
Halo 2.9 可用的 Docker 鏡像:halohub/halo、ghcr.io/halo-dev/halo
Halo 文檔:目前 Halo 2 並未更新 Docker 的 latest 標籤鏡像,主要因為 Halo 2 不兼容 1.x 版本,防止使用者誤操作。我們推薦使用固定版本的標籤,比如halohub/halo:2.9或者halohub/halo:2.9.0。
創建文件夾(Halo 數據根目錄)
mkdir ~/halo && cd ~/halo
創建 docker-compose.yaml
vim docker-compose.yaml
# “i” 進入編輯模式
# “esc” 退出編輯模式
# :wq 保存並退出vim編輯器
編輯 docker-compose.yaml
將 3.1 創建的 MySQL 數據庫名、用户名和密碼填入,其它項謹慎修改
version: "3"
services:
halo:
image: halohub/halo:2.9
container_name: halo
restart: on-failure:3
network_mode: "host"
volumes:
- ./:/root/.halo2
command:
# 修改為自己已有的 MySQL 配置
- --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/數據庫名
- --spring.r2dbc.username=用户名
- --spring.r2dbc.password=密碼
- --spring.sql.init.platform=mysql
# 外部訪問地址,請根據實際需要修改
- --halo.external-url=http://localhost:8090/
# 端口號 默認8090
- --server.port=8090
啓動docker-compose
docker-compose up -d
檢查 Halo 鏡像運行狀態
docker ps
# 出現halo即為成功
3.3 綁定域名
如果沒有域名,可以先暫時跳過。
域名解析
前往域名控制枱解析一條新的記錄。
主機記錄:訪問站點域名的二級域名,比如 blog.xxxx.com,那麼主機記錄就為 blog
記錄類型:選擇“A”,將域名指向一個 IPv4 地址
記錄值:填寫服務器 IP 地址
其他默認即可
Nginx 反向代理
配置nginx.conf文件
在nginx.conf文件中添加如下內容。
server {
# 監聽80端口
listen 80;
listen [::]:80;
# 接口的域名,用來訪問
server_name 域名;
# 限制請求體的大小
client_max_body_size 1024m;
location / {
# 設置服務器地址
proxy_pass http://127.0.0.1:8090;
# 設定被代理服務器接收到的header信息,重定義發往後端服務器的請求頭
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
重啓 Nginx 服務,重載配置和重啓分別點一下。
3.4 啓動
docker-compose up -d
放行 8090 端口,用瀏覽器訪問域名/console 或者IP:8090/console ,進入初始化頁面,初始化後進入 Halo 管理頁面。
4 Halo 博客設置
效果預覽(使用Dream for Halo 2.x主題,預覽圖僅供參考):
4.1 基礎設置
側邊欄“設置”中包含:
- 基本設置:站點標題、副標題、logo 等
- 文章設置:各頁文章顯示條數
- SEO 設置:站點關鍵詞、秒數等,用於提升網站在搜索引擎中的排名
- 用户設置:是否允許註冊及新註冊用户的所在權限組
- 評論設置:是否可以發佈評論及評論發送的條件
- 主題路由設置:各頁的路由設置及文章詳情頁訪問規則
- 代碼注入:自定義全局 head 標籤、內容頁 head 標籤、頁腳
4.2 插件
前往Halo 應用市場安裝內置應用市場插件。
側邊欄“應用市場”安裝及啓用:
- Dream for Halo 2.x(主題)
- 搜索組件:提供統一的搜索組件
- 評論組件:提供完整的評論系統
- Sitemap:生成站點地圖
- RSS:生成 RSS 訂閲鏈接
- ByteMD:讓文章支持 Markdown 編輯
- 圖庫管理:圖庫管理模塊
- 鏈接管理:鏈接管理模塊
- 瞬間:瞬間管理模塊
- 【可選】對象存儲:對象存儲策略,兼容阿里雲、騰訊雲、七牛雲等
- 【可選】OAuth2 認證:提供多種登錄方式
- 【可選】StackEdit:另一款 Markdown 編輯器
4.3 菜單
創建菜單(側邊欄“菜單”,選擇在主菜單中新建):
| 名稱 | 鏈接地址 | 備註 |
|---|---|---|
| 首頁 | / | 無 |
| 歸檔 | /archives | 同主題路由設置中歸檔頁路由前綴相同 |
| 分類 | /categories | 同主題路由設置中分類頁路由前綴相同 |
| 標籤 | /tags | 同主題路由設置中標籤頁路由前綴相同 |
| 動態 | /moments | 使用插件“瞬間” |
| 相冊 | /photos | 使用插件“圖庫管理” |
| 友鏈 | /links | 使用插件“鏈接管理” |
| 關於 | /about | 在側邊欄“頁面”中新建頁面,別名為 about |
4.4 主題
側邊欄“主題(Dream for Halo 2.x)”中包含:
- 詳情:查看當前主題的基本信息
- 基礎信息:作者用户名(填寫用户名而非用户暱稱)、離屏文案、備案信息、站點聲明信息等
- 基礎樣式:加載進度條、文章側邊目錄、博客背景圖、橫幅大圖、主題色、字體、佈局、首頁大圖輪播、側邊欄懸浮
- 文章設置:文章縮略圖、版權聲明、文章分享、捐贈二維碼等
- 側邊欄配置:側邊欄展示(詳情見下方表)、各模塊類型的具體設置
- 頁面設置:設置友鏈頁面、標籤頁面等
- 增強功能:鼠標設置、特效顯示、訪客統計、自動推送等
- 定製主題:主題樣式自定義設置
| 側邊欄模板類型 | 模塊位置 | 備註 |
|---|---|---|
| 信息模塊 | 左側(1) | 1. 信息顯示不正常檢查基礎信息中作者用户名是否正確;2. 彩字停頓檢查當前用户詳情中描述是否填寫 |
| 音樂模塊 | 左側(2) | 簡單配置填寫網易雲歌單 ID 即可,獲取方法:網易雲音樂歌單鏈接中一串數字 |
| 最近文章模塊 | 左側(3) | 無 |
| 公告模塊 | 右側(1) | 無 |
| 目錄模塊 | 右側(2) | 目錄僅在文章詳情頁顯示 |
| 廣告模塊 | 右側(3) | 無 |
| 文章分類模塊 | 右側(4) | 無 |
| 文章標籤模塊 | 右側(5) | 無 |
4.5 模板
提供一份頁面“關於”的通用模板:
# 個人信息
- 暱稱:
- Gitee:
- GitHub:
- Bilibili:
# 聯繫方式
- Email:
- WeChat:
- QQ:
# 網站信息
- 建站時間:
- 運行環境:
- 博客系統:
- 維護日誌:
4.6 一些細節
- 側邊欄“文章”頁內可管理文章分類和標籤
- 添加文章頁可切換編輯器,文章設置中可針對調整此篇文章的某些設置
- 使用“對象存儲”插件,可在側邊欄“附件”內改變存儲策略,推薦免費的七牛雲
- 側邊欄“圖庫”為菜單“相冊”,側邊欄“鏈接”為菜單“友鏈”,側邊欄“瞬間”為菜單“動態”
- 側邊欄“用户”內角色管理可新建角色權限組,使用“OAuth2 認證”插件可在身份認證中設置多登錄方式
- 側邊欄“概覽”中外部訪問地址必須為外網 IP 或者域名,當為 localhost 或者 127.0.0.1 是將導致分享鏈接出現問題
5 寫在最後
本文側重在 Halo 博客的部署和使用上,簡化了 Docker、Nginx 等在技術上的解釋説明。Halo 部署難度不大,難度大的是堅持更新博客,讓我們共同努力,致敬每一位還在寫博客的你!