首先就是先买一台服务器,博客对服务器的要求不高,一般1核2G或者2核2G即可。
动态 vs 静态,如何选择与部署
本文将详细对比动态博客和静态博客的区别,并手把手教你部署 Halo(动态)和 Hugo(静态),适合零基础新手。
前言
其实核心就两种选择:动态博客 和 静态博客。它们各有优劣,适用场景完全不同。本文先帮你理清思路,再手把手教你部署。
一、动态博客 vs 静态博客:核心区别
简单总结
选动态博客:你想要一个像 WordPress 那样有后台、能在线写文章、有评论系统的完整体验
选静态博客:你追求极致速度、不想维护服务器、习惯用 Markdown 写作
二、主流博客系统深度点评
动态博客阵营
1. WordPress
全球市场占有率:43%+
优点:
生态最完善,插件主题无数
上手简单,非技术用户也能用
SEO 优化成熟
社区庞大,遇到问题容易找到答案
缺点:
越来越臃肿,性能开销大
插件装多了容易冲突
安全风险高(经常被攻击)
需要定期维护更新
适合: 企业官网、电商、对功能要求复杂的场景
2. Halo
国产开源新星,Java 技术栈
优点:
界面现代美观,开箱即用
有官方应用市场,主题插件丰富
国人开发,中文支持好
Docker 部署简单
持续活跃更新
缺点:
资源占用相对较高(需要 2G 内存)
生态不如 WordPress 成熟
插件质量参差不齐
适合: 个人博客、小型站点、追求颜值和体验的用户
3. Typecho
国产轻量博客,PHP 技术栈
优点:
极其轻量,1核1G 服务器流畅运行
代码简洁,只有 7 个核心表
主题插件机制简单明了
适合程序员二次开发
缺点:
更新较慢(一度被以为停止维护)
功能相对简单
界面偏复古
适合: 追求简洁、服务器配置低、喜欢折腾的技术用户
静态博客阵营
1. Hugo
Go 语言编写,速度最快的静态生成器
优点:
生成速度极快(每秒数千页面)
单二进制文件,部署简单
主题丰富(官方 300+)
内置功能强大(分页、多语言、图片处理)
缺点:
模板语法(Go Template)学习曲线陡峭
配置相对复杂
中文文档较少
适合: 内容量大、追求构建速度、愿意学习的技术用户
2. Hexo
Node.js 编写,中文社区最活跃
优点:
中文生态最好,教程最多
主题精美(NexT、Butterfly 等)
插件丰富
对中文用户友好
缺点:
构建速度较慢(文章多了明显)
Node.js 依赖容易出问题
配置繁琐
适合: 中文用户、追求颜值、文章量不大的个人博客
3. Jekyll
Ruby 编写,GitHub Pages 原生支持
优点:
GitHub Pages 完美支持,免费托管
Liquid 模板语法简单
历史悠久,文档完善
适合简单的文档型站点
缺点:
构建速度慢
Ruby 环境配置麻烦
功能相对简单
适合: 想免费托管在 GitHub Pages、需求简单的用户
4. Gatsby
React 技术栈,现代化的静态站点生成器
优点:
基于 React,可以写组件
数据源灵活(Markdown、CMS、API 都可以)
图片优化自动
生态现代
缺点:
构建极慢( notorious 的慢)
Node.js 依赖地狱
学习成本高
适合: 前端开发者、需要复杂交互的站点
三、实战部署:Halo(动态)+ Hugo(静态)
方案一:部署 Halo 动态博客
Halo 是国内开源的博客系统,界面现代,功能完善,有应用市场可以装主题和插件。
3.1.1 安装 Docker
# 更新包索引
sudo apt-get update
# 安装依赖
sudo apt-get install -y ca-certificates curl gnupg lsb-release
# 添加 Docker GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 添加软件源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 配置国内镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker3.1.2 创建目录结构
mkdir -p ~/docker-apps/halo2
mkdir -p ~/docker-apps/mysql
mkdir -p ~/docker-apps/mysqlBackup
cd ~/docker-apps3.1.3 创建环境变量文件
cat > .env << 'EOF'
# MySQL root 密码(必须修改!)
MYSQL_ROOT_PASSWORD=YourStrongRootPass123!
# Halo 数据库密码(必须修改!)
HALO_DB_PASSWORD=HaloDbPass456!
# 外部访问地址(安装后改成你的IP或域名)
HALO_EXTERNAL_URL=http://localhost:8090
EOF⚠️ 重要:把密码改成你自己的!
3.1.4 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
halo:
image: halohub/halo:2.20
container_name: halo
restart: on-failure:3
depends_on:
mysql:
condition: service_healthy
networks:
- halo_network
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 60s
environment:
- JVM_OPTS=-Xmx256m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://mysql:3306/halo
- --spring.r2dbc.username=halo
- --spring.r2dbc.password=${HALO_DB_PASSWORD}
- --spring.sql.init.platform=mysql
- --halo.external-url=${HALO_EXTERNAL_URL:-http://localhost:8090}
mysql:
image: mysql:8.0
container_name: mysql8
restart: on-failure:3
networks:
- halo_network
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=halo
- MYSQL_USER=halo
- MYSQL_PASSWORD=${HALO_DB_PASSWORD}
networks:
halo_network:
driver: bridge
EOF3.1.5 启动服务
docker compose up -d等待 1-2 分钟,Halo 启动比较慢。
3.1.6 查看日志确认启动
docker compose logs -f halo看到 Started HaloApplication 就说明成功了,按 Ctrl+C 退出。
3.1.7 访问初始化页面
浏览器打开:http://你的服务器IP:8090
按向导完成:
站点标题
管理员账号密码
邮箱
3.1.8 修改外部访问地址(重要!)
安装完成后,修改 .env 文件:
# 改成你的实际IP或域名
HALO_EXTERNAL_URL=http://你的服务器IP:8090然后重启:
docker compose up -d方案二:部署 Hugo 静态博客
Hugo 是目前最快的静态网站生成器,用 Go 语言编写,单二进制文件,部署极其简单。
3.2.1 安装 Hugo
macOS:
brew install hugoLinux:
# 下载最新版
wget https://github.com/gohugoio/hugo/releases/latest/download/hugo_extended_Linux-64bit.tar.gz
# 解压
tar -zxvf hugo_extended_Linux-64bit.tar.gz
# 移动到系统目录
sudo mv hugo /usr/local/bin/
# 验证
hugo versionWindows: 下载 exe 文件放到 PATH 目录即可。
3.2.2 创建新站点
# 创建站点
hugo new site my-blog
cd my-blog
# 初始化 git
git init
# 添加主题(以 PaperMod 为例)
git submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod
# 启用主题
echo "theme = 'PaperMod'" >> hugo.toml3.2.3 创建第一篇文章
hugo new content content/posts/hello-world.md编辑 content/posts/hello-world.md:
---
title: "Hello World"
date: 2025-04-02T10:00:00+08:00
draft: false
tags: ["hugo", "博客"]
---
这是我的第一篇 Hugo 博客文章!
## 特点
- 极速构建
- Markdown 原生支持
- 部署简单3.2.4 本地预览
hugo server -D浏览器打开 http://localhost:1313 预览。
3.2.5 构建站点
hugo # 生成 public/ 目录3.2.6 部署到 GitHub Pages(免费托管)
创建 GitHub 仓库,然后:
# 添加远程仓库
git remote add origin https://github.com/你的用户名/仓库名.git
# 提交代码
git add .
git commit -m "Initial commit"
git push -u origin main配置 GitHub Actions 自动部署:
创建 .github/workflows/deploy.yml:
name: Deploy Hugo
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest'
extended: true
- name: Build
run: hugo --minify
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public提交后,GitHub 会自动构建并部署到 https://你的用户名.github.io/仓库名/。
3.2.7 绑定自定义域名(可选)
在 static/ 目录下创建 CNAME 文件:
www.yourdomain.com然后在域名 DNS 添加 CNAME 记录指向 你的用户名.github.io。
四、如何选择?决策树
你有服务器吗?
├── 有 → 想要后台管理、评论等功能?
│ ├── 是 → 选 Halo(动态)
│ └── 否 → 选 Hugo(静态)+ 服务器托管
└── 没有 → 想要免费托管?
├── 是 → 选 Hugo/Hexo/Jekyll + GitHub Pages/Vercel
└── 否 → 买个服务器再决定五、常见问题
Q: Halo 访问端口没反应
A: 检查防火墙:
sudo firewall-cmd --add-port=8090/tcp --permanent
sudo firewall-cmd --reloadQ: Halo 提示 "外部访问地址不匹配"
A: 修改 .env 里的 HALO_EXTERNAL_URL,然后重启
Q: Hugo 主题不生效
A: 确保 hugo.toml 中正确设置了 theme = '主题名',且主题文件在 themes/ 目录下
Q: 静态博客怎么加评论?
A: 可以使用:
Giscus(基于 GitHub Discussions,免费)
Utterances(基于 GitHub Issues,免费)
Disqus(有免费额度)
Q: 静态博客怎么加搜索?
A: 可以使用:
Fuse.js(前端搜索,适合文章不多)
Algolia(专业搜索,有免费额度)
写在最后
无论选择哪种,最重要的是开始写。工具只是手段,内容才是核心。
如果部署过程中遇到问题,欢迎留言交流!
参考文档:
本文更新时间: 2026年4月2日
评论