首先就是先买一台服务器,博客对服务器的要求不高,一般1核2G或者2核2G即可。

动态 vs 静态,如何选择与部署

本文将详细对比动态博客和静态博客的区别,并手把手教你部署 Halo(动态)和 Hugo(静态),适合零基础新手。


前言

其实核心就两种选择:动态博客静态博客。它们各有优劣,适用场景完全不同。本文先帮你理清思路,再手把手教你部署。


一、动态博客 vs 静态博客:核心区别

特性

动态博客

静态博客

技术原理

需要服务器运行程序(PHP/Java/Node.js)+ 数据库

预生成 HTML 文件,纯前端展示

访问速度

需要实时渲染,相对较慢

直接读取文件,极快

服务器要求

需要持续运行的服务器

可以托管在 CDN/对象存储,甚至免费

部署成本

需要云服务器(每月几十元起)

可零成本(GitHub Pages/Vercel)

交互功能

强(评论、搜索、后台管理)

弱(需借助第三方服务)

内容管理

有后台,在线编辑

用 Markdown 写,Git 管理

安全性

需要维护更新,有安全风险

几乎无安全顾虑

适合人群

想要"开箱即用"的体验

喜欢简洁、技术控、追求极致性能

简单总结

  • 选动态博客:你想要一个像 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 docker

3.1.2 创建目录结构

mkdir -p ~/docker-apps/halo2
mkdir -p ~/docker-apps/mysql
mkdir -p ~/docker-apps/mysqlBackup
cd ~/docker-apps

3.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
EOF

3.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 hugo

Linux:

# 下载最新版
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 version

Windows: 下载 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.toml

3.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 --reload

Q: 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(专业搜索,有免费额度)


写在最后

场景

推荐方案

追求开箱即用

Halo

追求极致性能

Hugo

中文生态优先

Hexo

免费托管优先

Hugo/Hexo + GitHub Pages

企业官网

WordPress/Halo

技术文档

Hugo/VitePress

无论选择哪种,最重要的是开始写。工具只是手段,内容才是核心。

如果部署过程中遇到问题,欢迎留言交流!


参考文档:

本文更新时间: 2026年4月2日