快轉到主要內容
Hugo + Github Page 快速建立自己的部落格網站

Hugo + Github Page 快速建立自己的部落格網站

·
類別 
Hugo網站相關
標籤 
Github Hugo
Eason Chiu
作者
Eason Chiu
一個不做筆記就容易忘記的工程師
目錄

為什麼選擇 Hugo?
#

相信有在使用 Github 的各位,應該知道 Github Page 這個功能,它可以讓我們免費架設靜態網頁,不過因為是靜態網頁的關係,所以不支援像是登入、資料庫等動態功能,那麼要如何快速建立一個好看又實用的個人部落格呢?這時候 Hugo 這個強大的靜態網站生成器就派上用場了。

Hugo 生成 HTML 的速度非常快,幾秒內就能把 Markdown 跟你使用的 Hugo 主題結合在一起,變成 HTML 網頁,雖然使 Markdown 語法可能要稍微熟悉一下,剛從 Medium 的筆者可能會有些陣痛期,但是如果本身已有網頁開發經驗,相信上手是非常快的。

快速建立 Hugo
#

1. 安裝 Hugo
#

依照各作業系統 進行下載

MacOS:

bash
brew install hugo

安裝完成後輸入:

bash
hugo --version

並且有出現版本訊息,代表安裝成功。

2. 建立 Hugo 網站
#

Hugo主題頁 挑選自己喜歡的主題下載下來。

網站首頁範例

bash
# 建立新網站
hugo new site my-blog
cd my-blog

# 安裝主題(以 Blowfish 為例)
git init
git submodule add https://github.com/nunocoracao/blowfish.git themes/blowfish

3. 寫第一篇文章
#

bash
hugo new posts/hello-world.md

編輯 content/posts/hello-world.md

markdown
---
title: "Hello World"
date: 2024-06-01
draft: false
---

這是我的第一篇文章!

4. 本地預覽
#

bash
hugo server

打開 http://localhost 就能看到你的網站了!

頁面應該會是套用所安裝 Hugo 主題的文章內容。

5. 常用指令
#

bash
# 文章與頁面相關
hugo new posts/文章標題.md      # 建立新文章
hugo new about.md               # 建立新頁面
hugo new posts/資料夾/文章.md   # 建立子資料夾下的新文章

# 本地開發與預覽
hugo server                     # 啟動本地伺服器(不含草稿)
hugo server -D                  # 啟動本地伺服器(包含草稿)
hugo server --port 1314         # 指定埠號啟動本地伺服器
hugo server --disableFastRender # 停用快取,適合除錯

# 文章發佈與草稿管理
hugo list drafts                # 列出所有草稿
hugo undraft content/posts/xxx.md # 取消草稿狀態

# 網站建置
hugo                            # 建置網站(預設輸出到 public 資料夾)
hugo --minify                   # 建置並壓縮 HTML/CSS/JS
hugo -d ./dist                  # 指定輸出資料夾

# 其他常用指令
hugo version                    # 查看 Hugo 版本
hugo help                       # 查看所有指令說明

部署到 Github Pages
#

1. 到個人的 Github 主頁,並且在右上角點選「New Repository」
#

網站首頁範例

2. Repository Name 填寫「使用者名稱.github.io」
#

因為已經有建立過了,所以不允許重複。

記得要設定為 Public 網站首頁範例

3. 回推上傳至 Github
#

先前在本地端 hugo server 後所需要的靜態檔案會生成到 public/ 的目錄。

將剛才建立好的 Github Repository Clone 下來 :

bash
git clone https://github.com/使用者名稱/使用者名稱.github.io

此時 git 會建立一個資料夾,把 public/ 下的檔案都放到該資料夾內。

將檔案透過 git指令 回推到 Github 上。

bash
git add . && git commit -m "auto build" && git push

稍微等待一段時間後,打開 https://使用者名稱.github.io/ 有看到自己的網站就代表成功囉!

建立自動部署流程
#

每次要更新文章到網站上都需要執行上述步驟,透過 Crontab + Script 可以把上面手動的工作流程自動化

1.首先建立一支 deploy.sh 的檔案:
#

點擊展開 deploy.sh 腳本內容
bash
#!/usr/bin/env bash
# 自動建置 Hugo 靜態站,輸出到目標資料夾,並自動 git commit & push。
# 使用:在專案根目錄執行 `./deploy.sh`
# -------------------------------------------

# 設定錯誤處理:遇到錯誤時立即停止執行
set -euo pipefail

# 1. 變數設定
# 檢查參數數量
if [ $# -ne 2 ]; then
    echo "[ERROR] 參數數量錯誤"
    echo "[ERROR] 使用方式: $0 [專案根目錄] [目標路徑]"
    echo "[ERROR] 範例: $0 /path/to/blog /path/to/target"
    exit 1
fi

# 兩個參數:提供專案根目錄和目標路徑
BLOG_ROOT="$1" # 從第一個參數取得專案根目錄
TARGET_DIR="$2" # 從第二個參數取得目標路徑

echo "[INFO] 開始時間: $(date '+%Y-%m-%d %H:%M:%S')"
echo "[INFO] 專案根目錄: $BLOG_ROOT"
echo "[INFO] 目標路徑: $TARGET_DIR"

# 2. 產生靜態檔
cd "$BLOG_ROOT"

echo "[INFO] Building site with Hugo..."
/opt/homebrew/bin/hugo --cleanDestinationDir --minify -d "$TARGET_DIR"

echo "[INFO] Build finished. Files generated at $TARGET_DIR"

# 3. Push 到 GitHub Pages 倉庫
if [ -d "$TARGET_DIR/.git" ]; then
  cd "$TARGET_DIR"
  git add -A
  if git diff --cached --quiet; then
    echo "[INFO] No changes to commit."
  else
    echo "[INFO] Committing and pushing changes..."
    git commit -m "auto build"
    git push
  fi
else
  echo "[ERROR] $TARGET_DIR 不是一個 Git 倉庫,請先手動初始化 (git init) 並設定遠端。"
  exit 1
fi

echo "[SUCCESS] Deployment completed at $(date '+%Y-%m-%d %H:%M:%S')!" 

2.接著測試 deploy.sh 是否能正確執行
#

帶入二個路徑的參數,分別為:

  • hugo的專案路徑

  • 本地端 Github 的目錄 (上面提到 public/ 產生靜態檔放置的地方)

bash
deploy.sh "hugo的專案路徑" "本地端 Github 的目錄"

3.設定 crontab
#

crontab 的詳細設定方式請參考這篇教學

打開終端機並輸入

bash
crontab -e

將 crontab 設定每天晚上 12 點自動執行 deploy.sh

bash
#編輯 crontab -e 
0 0 * * * /bin/bash deploy.sh "hugo的專案路徑" "本地端 Github 的目錄" >> deploy.log 2>&1

結語
#

利用 Hugo + Github Pages 是建立個人部落格,只要幾分鐘就能架好網站,熟悉Hugo 語法後,也有很高的彈性能再額外擴展自己想要的 UI 設計 / 擴充功能

而且還是免費的!也不用額外再租用主機與購買網域,省去很多時間,剩下的時間可以專注在內容創作上。

相關文章

把 Codepen 嵌入 Hugo文章上
類別 
Hugo網站相關
標籤 
Codepen Hugo
Html2canvas + Fabricjs 應用
類別 
前端開發
標籤 
Html2canvas Fabricjs
使用Can I Use 檢查瀏覽器相容性
類別 
前端開發
標籤 
Browser