封面图

2026年10月24日,基于 Hugo 程序,采用 PaperMod 主题的 梦幻辰风 上线了。主要原因是因为PHP爆出的Bug,以及我无力为 Emlog5.3.1 版本的 梦幻辰风 提供最新的支持。所以,三思而行,选择跑路。

在Deepseek的指导下,终于完成建设、模版小修等各项工作,现在站点基本算是可以使用。为了在1个月后重新搬服务器不会忘记,也为了新的朋友能够少踩坑,所以做个记录。

1:最终架构

本地电脑(Hugo Extended + Git)
    │  git push
    ▼
Gitee 私有仓库
    │  WebHook 触发
    ▼
香港VPS (Debian12 + 宝塔 + Nginx)
    │  git pull → public/ 为访问目录
    ▼
访客浏览器 ←── https://www.mhcf.net 站点首页
           ←── https://twikoo.mhcf.net (Docker) 实现评论

2:环境准备

需要提前下载安装以下软件:

  1. Hugo
  2. Git

Hugo是单文件,下载后放在你想放的目录里,然后把变量环境添加到Path,确保在命令行能够使用 Hugo 命令。

完成后在cmd验证:

hugo version    # 输出内容必须含 "extended"
git --version

2.1 Git使用

由于我的网络无法完美访问Github,我选择了Gitee作为仓库托管,这样在同步时,我可以在不同电脑来回跑。也为了我在单位能够顺利摸鱼。

首先,添加全局git信息:

git config --global user.name "就自己起的昵称"
git config --global user.email "你的Gitee邮箱"

然后,密钥部分。本地电脑推送需要账号SSH公钥,实现读写功能;服务器拉取使用仓库公钥,实现只读功能。

用途 密钥类型 添加位置 权限
服务器拉取 仓库部署公钥 仓库 → 管理 → 部署公钥 只读
本地电脑推送 账号SSH 公钥 头像 → 设置 → SSH 公钥 读写

本地生成密钥操作如下:

ssh-keygen -t ed25519 -C "邮箱" -f ~/.ssh/id_ed25519 -N ""
cat ~/.ssh/id_ed25519.pub

测试(本地电脑):

ssh -T git@gitee.com
# 正常显示:Hi (你的昵称)(@账号)! ...
# 若显示 Hi Anonymous (DeployKey)! 说明加成了部署公钥,需重加

3: 建站

找一个你喜欢的风水宝地,在本地建立你的站点,在CMD或者GIT等命令行中执行:

hugo new site mhcf.net

这里的 mhcf.net 可以修改为你的站点,建议用英文,避免乱七八糟的事情发生。

然后把你想要的Hugo主题下载后,解压到 \themes 文件夹里。

然后在站点根目录新建或者编辑 hugo.toml 文件,梦幻辰风的编辑内容如下:

baseURL = "https://www.mhcf.net/"
languageName = "zh-CN"
locale = "zh-CN"
title = "梦幻辰风"    # 这个就是导航左上角显示的文字,也就是标题
theme = "PaperMod"  # 模版
publishDir = "public"
buildDrafts = false
buildFuture = false
enableGitInfo = false
enableRobotsTXT = true

# 首页输出 RSS(原生index.xml) + JSON(搜索索引)
[outputs]
  home = ["HTML", "RSS", "JSON"]

[params]
  DateFormat = "2006 年 01 月 02 日"
  ShowReadingTime = false
  ShowWordCount = false
  ShowPostNavLinks = true
  ShowBreadCrumbs = false
  ShowCodeCopyButtons = true
  ShowFullTextinRSS = false
  ShowAuthor = true
  defaultTheme = "light"
  disableThemeToggle = false
  SearchBar = true
  # 不突出第一篇文章
  disableSpecial1stPost = true
  archivePath = "archive"
  ShowRssButtonInSectionTermList = true
  rssLimit = 6

# 关闭资源指纹,解决 SRI 校验失败导致 CSS 不加载的问题
[params.assets]
  disableFingerprinting = true

  # Fuse 搜索配置,适配中文
  [params.fuseOpts]
    isCaseSensitive = false
    includeMatches = true
    shouldSort = true
    location = 0
    distance = 1000
    threshold = 0.4
    minMatchCharLength = 1
    keys = ["title", "summary", "content", "tags"]

# Twikoo评论配置
[params.comments]
  enabled = true
  provider = "twikoo"
[params.twikoo]
  envId = "" #你自己建的twikoo评论地址

# 顶部导航菜单
[[menus.main]]
  name = "首页"
  url = "/"
  weight = 1
[[menus.main]]
  name = "归档"
  url = "/archive/"
  weight = 2
[[menus.main]]
  name = "分类"
  url = "/categories/"
  weight = 3
[[menus.main]]
  name = "关于"
  url = "/about/"
  weight = 4
[[menus.main]]
  name = "留言"
  url = "/guessbook/"
  weight = 5
[[menus.main]]
  name = "订阅"
  url = "/subscribe/"
  weight = 6
[[menus.main]]
  name = "友邻"
  url = "/links/"
  weight = 7
[[menus.main]]
  name = "搜索"
  url = "/search/"
  weight = 8

# 导航栏RSS图标(恢复原生 /index.xml)
[[params.socialIcons]]
  name = "rss"
  url = "/index.xml"

# 分页设置
[pagination]
  pagerSize = 10

# Markdown渲染,用于Twikoo嵌入HTML
[markup.goldmark.renderer]
  unsafe = true
[markup.goldmark.parser]
  auto_identifiers = true

# 分类、标签
[taxonomies]
  category = "categories"
  tag = "tags"

# 永久链接:posts生成 /年/月/slug/
[permalinks]
posts = "/:year/:month/:slug/"

# 站点地图
[sitemap]
  changefreq = "weekly"
  priority = 0.5
  filename = "sitemap.xml"

# robots.txt规则
[params.robots]
  rules = [
    { allow = "/", disallow = ["/search/"] }
  ]

4:Git同步

4.1首次推送

# 在项目根目录
git init
git config user.name "昵称"
git config user.email "邮箱"
git add .
git commit -m "首次提交"
git remote add origin https://你的GIT地址
git branch -M master
git push -u origin master

Gitee 若提示密码错误,用私人令牌代替密码:设置 → 私人令牌 → 生成,权限只勾 projects。

4.2 关于 .gitignore 文件

在 .gitignore 文件写入以下内容:

.hugo_build.lock
resources/_gen/
.DS_Store
Thumbs.db
.idea/
.vscode/

因为对于我来说,我是把构建好的 public/ 推送上去的,在服务器直接布置这个目录。

5:服务器部署

我用的宝塔控制面板,直接创建一个纯静态站点就行。运行目录设置为 public/ 。

然后开启克隆git:

cd /你的网站目录/
rm -rf ./*                          # 清空
rm -rf ./.??* 2>/dev/null
chattr -i .user.ini 2>/dev/null; rm -f .user.ini

sudo -u www git clone git@gitee.com:项目.git .
chown -R www:www /你的网站目录

5.1 WebHook 自动部署

首先需要为 www 用户生成密钥:

sudo -u www ssh-keygen -t ed25519 -f /home/www/.ssh/id_ed25519 -N ""
sudo cat /home/www/.ssh/id_ed25519.pub

然后到Gitee 仓库 → 管理 → 部署公钥管理 → 添加,选只读。

测试:

sudo -u www ssh -T git@gitee.com
# 一般返回:Hi Anonymous (DeployKey)! ...就对了

5.2 在在宝塔布置WebHook 脚本

#!/bin/bash
export LC_ALL=C
date "+%Y-%m-%d %H:%M:%S"
echo "Start Deployment (as www)..."

WEB_PATH="/网站目录"
BRANCH="master"
WWW_HOME="/home/www"

sudo -u www bash <<EOF
cd $WEB_PATH || exit 1
export GIT_SSH_COMMAND="ssh -i $WWW_HOME/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -o ServerAliveCountMax=20"

success=0
for i in 1 2 3; do
    echo "=== 第 \$i 次尝试 fetch ==="
    if git fetch origin $BRANCH --depth=1 2>&1; then
        success=1
        break
    fi
    echo "第 \$i 次失败,等待 5 秒后重试..."
    sleep 5
done

if [ \$success -eq 0 ]; then
    echo "错误:多次 fetch 均失败,网络可能不稳定。"
    exit 1
fi

git reset --hard origin/$BRANCH 2>&1
git pull origin $BRANCH 2>&1
EOF

chown -R www:www $WEB_PATH
echo "Deployment Finished Successfully!"

5.3 在Git上设置Gitee WebHook

  • URL:宝塔 WebHook 提供的 http://IP:端口/hook?access_key=xxx
  • 密钥:宝塔提供的 Secret
  • 事件:勾选 Push

注意:如果宝塔控制面板用了SSL,可能不太行。

现在,基本上你本地推送完,几分钟网站就更新了。

至于评论twikoo,我采用的是Docker布置,然后用Nginx反代实现。

最后,每次用Git命令发布,老是记不住。于是在Deepseek的帮助下写了个一键脚本,放在你自己电脑就行。具体如下:

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

REM ===== 每台电脑改成自己的路径 =====
set "BLOG_DIR=D:\mhcf.net"
REM ================================

cd /d "%BLOG_DIR%"
if errorlevel 1 (
    echo 错误:无法进入目录 %BLOG_DIR%
    pause
    exit /b 1
)

echo ========================================
echo   梦幻辰风博客 - 一键发布
echo ========================================
echo 当前目录: %BLOG_DIR%
echo.

where hugo >nul 2>nul
if errorlevel 1 (
    echo 错误:找不到 hugo 命令。
    pause
    exit /b 1
)

echo [1/5] 拉取远程更新...
git pull origin master --no-edit --no-rebase
if errorlevel 1 (
    echo 错误:git pull 失败,请手动处理冲突。
    pause
    exit /b 1
)

echo.
echo [2/5] 构建 Hugo 站点...
hugo
if errorlevel 1 (
    echo 错误:hugo 构建失败。
    pause
    exit /b 1
)

echo.
echo [3/5] 添加文件到暂存区...
git add .
if errorlevel 1 (
    echo 错误:git add 失败。
    pause
    exit /b 1
)

echo.
echo [4/5] 提交更改...
git diff --cached --quiet
if errorlevel 1 (
    set "msg="
    set /p "msg=请输入提交信息(直接回车使用默认时间戳): "
    if "!msg!"=="" (
        for /f "delims=" %%I in ('powershell -NoProfile -Command "Get-Date -Format 'yyyy-MM-dd HH:mm'"') do set "msg=自动发布 %%I"
    )
    git commit -m "!msg!"
    if errorlevel 1 (
        echo 错误:git commit 失败。
        pause
        exit /b 1
    )
    echo 已提交:!msg!
) else (
    echo 没有需要提交的变更,跳过提交步骤。
)

echo.
echo [5/5] 推送到 Gitee...
git push origin master
if errorlevel 1 (
    echo 错误:git push 失败。
    pause
    exit /b 1
)

echo.
echo ========================================
echo   发布成功!稍等几十秒网站自动更新。
echo ========================================
pause

搞定,现在开始新的码字记录。