前言
作为一名 Go 后端工程师,我一直想搭建一个极简、高效且易维护的个人博客。经过调研和实践,我选择了 Hugo + GitHub Actions + 1panel 这套方案。本文记录了完整的部署过程和踩过的坑。
为什么选择这个方案?
- Hugo:Go 编写的静态站点生成器,编译速度极快,对 Go 开发者友好
- GitHub Actions:免费的 CI/CD,自动化构建和部署
- 1panel:服务器管理面板,SSL 证书自动续签,运维省心
- 成本:除了服务器费用,其他全部免费
架构说明
Mac 本地写作
↓
Git Push 到 GitHub
↓
GitHub Actions 自动构建
↓
Rsync 同步到服务器
↓
1panel/Nginx 提供服务
核心优势:
- 本地只需要写 Markdown,push 后自动部署
- 服务器只运行 Nginx,资源占用低
- 版本控制天然支持,可随时回滚
准备工作
1. 环境要求
- Mac(或 Linux)开发机
- 一台服务器(已安装 1panel)
- 已备案的域名
- GitHub 账号
2. 安装 Hugo
brew install hugo
hugo version # 验证安装
详细步骤
第一步:创建 Hugo 站点
# 创建站点
cd ~/
hugo new site myblog
cd myblog
# 初始化 Git
git init
git branch -M main
# 安装主题(以 PaperMod 为例)
git submodule add --depth=1 https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod
第二步:配置 Hugo
编辑 hugo.toml:
baseURL = "https://你的域名.com"
languageCode = "zh-cn"
title = "你的博客名"
theme = "PaperMod"
[params]
defaultTheme = "auto"
ShowReadingTime = true
ShowCodeCopyButtons = true
ShowBreadCrumbs = true
[params.homeInfoParams]
Title = "欢迎来到我的博客"
Content = "这里是我的技术笔记"
[[menu.main]]
identifier = "posts"
name = "文章"
url = "/posts/"
weight = 10
[[menu.main]]
identifier = "tags"
name = "标签"
url = "/tags/"
weight = 20
第三步:写第一篇文章
# 创建目录
mkdir -p content/posts
# 创建文章
cat > content/posts/hello-world.md << 'EOF'
---
title: "Hello World"
date: 2025-01-25
draft: false
tags: ["随笔"]
---
这是我的第一篇博客文章。
## 关于我
我是一名 Go 后端工程师。
EOF
第四步:本地测试
hugo server -D
# 浏览器访问 http://localhost:1313
第五步:配置服务器
5.1 在 1panel 中创建网站
- 登录 1panel 面板
- 进入"网站" → “创建网站”
- 域名:
blog.你的域名.com - 类型:静态网站
- 开启 HTTPS,申请 SSL 证书
记录下部署路径,例如:
/opt/1panel/www/sites/blog.你的域名.com/index
5.2 配置 SSH 密钥
在 Mac 上生成 RSA 密钥(兼容性最好):
ssh-keygen -t rsa -b 4096 -f ~/.ssh/blog_deploy_key -N "" -C "blog-deploy" -m PEM
将公钥添加到服务器:
ssh-copy-id -i ~/.ssh/blog_deploy_key.pub -p 22 root@你的服务器IP
测试连接:
ssh -i ~/.ssh/blog_deploy_key -p 22 root@你的服务器IP "echo '连接成功'"
第六步:配置 GitHub Actions
6.1 转换密钥为 base64
重要:为了避免密钥格式兼容性问题,需要转换为 base64:
base64 -i ~/.ssh/blog_deploy_key | tr -d '\n' > /tmp/deploy_key_base64.txt
cat /tmp/deploy_key_base64.txt
# 复制输出的内容
6.2 创建 GitHub 仓库
在 GitHub 上创建新仓库(可以是私有的)。
6.3 配置 GitHub Secrets
进入仓库的 Settings → Secrets and variables → Actions,添加三个 secrets:
SERVER_SSH_KEY:粘贴 base64 编码后的密钥REMOTE_HOST:服务器 IP 地址REMOTE_PORT:SSH 端口(通常是 22)
6.4 创建部署配置
创建文件 .github/workflows/deploy.yml:
name: Deploy to Server
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest'
extended: true
- name: Build
run: hugo --minify
- name: Setup SSH Key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SERVER_SSH_KEY }}" | base64 -d > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -p ${{ secrets.REMOTE_PORT }} ${{ secrets.REMOTE_HOST }} >> ~/.ssh/known_hosts
- name: Deploy to Server
run: rsync -avz --delete -e "ssh -i ~/.ssh/deploy_key -p ${{ secrets.REMOTE_PORT }}" public/ root@${{ secrets.REMOTE_HOST }}:/opt/1panel/www/sites/blog.你的域名.com/index/
注意:记得把最后一行的路径改成你的实际路径。
6.5 创建 .gitignore
cat > .gitignore << 'EOF'
# Hugo
/public/
/resources/_gen/
/.hugo_build.lock
# macOS
.DS_Store
# IDE
.vscode/
.idea/
EOF
第七步:推送到 GitHub
git add .
git commit -m "Initial commit: Hugo blog setup"
# 添加远程仓库(替换为你的仓库地址)
git remote add origin git@github.com:你的用户名/myblog.git
# 推送
git push -u origin main
推送成功后,GitHub Actions 会自动触发,大约 30 秒后部署完成。
第八步:验证部署
访问 https://blog.你的域名.com,应该能看到你的博客了!
常见问题
1. SSH 密钥格式错误
错误信息:
Load key "/home/runner/.ssh/deploy_key": error in libcrypto
解决方案:
- 确保使用 RSA 格式密钥(
-t rsa) - 指定 PEM 格式(
-m PEM) - 转换为 base64 编码后再放入 GitHub Secrets
2. rsync 连接失败
检查项:
- SSH 公钥是否正确添加到服务器
- 服务器 IP 和端口是否正确
- 部署路径是否存在且有写权限
3. 博客样式丢失
原因: baseURL 配置错误
解决: 确保 hugo.toml 中的 baseURL 与实际域名一致。
日常使用流程
部署完成后,日常写作非常简单:
# 1. 创建新文章
cd ~/myblog
hugo new posts/my-new-post.md
# 2. 编辑文章(用 VS Code、Typora 等)
# 记得把 draft: true 改为 draft: false
# 3. 本地预览(可选)
hugo server -D
# 4. 发布
git add .
git commit -m "New post: 文章标题"
git push
# 等待 30 秒,自动部署完成
总结
这套方案的优点:
- 简单:本地只需要 Git 和 Hugo
- 自动化:push 即发布,无需手动操作
- 省钱:除了服务器,其他全免费
- 可靠:1panel 自动续签证书,GitHub Actions 稳定可靠
- 可扩展:轻松添加评论、统计等功能
经过实践,整个部署过程大约 30 分钟,后续维护成本几乎为零。对于想要专注于内容创作的技术博客来说,这是一个非常理想的解决方案。