
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:环境准备
需要提前下载安装以下软件:
- Hugo
- 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
搞定,现在开始新的码字记录。