VPS 搭建个人博客 (2025) - WordPress/Typecho/Hugo 全方案

在 2025 年,尽管公众号、知乎、小红书等平台流量巨大,但拥有一个完全属于自己的独立博客依然是很多人的执念。它代表着数据主权、无拘无束的表达以及技术人的浪漫。
本文将为你提供 VPS 搭建个人博客的三种主流方案:WordPress(功能强大)、Typecho(轻量简洁)和 Hugo(极客静态),并提供 2025 年最新的 Docker 部署教程。
| 特性 | WordPress | Typecho | Hugo |
|---|---|---|---|
| 类型 | 动态 CMS | 动态 CMS | 静态网站生成器 (Static) |
| 上手难度 | ⭐ (最简单) | ⭐⭐ (简单) | ⭐⭐⭐⭐ (有门槛) |
| 资源占用 | 高 (建议 1G+ 内存) | 低 (512MB 可跑) | 极低 (纯静态文件) |
| 插件生态 | ⭐️⭐️⭐️⭐️⭐️ (海量) | ⭐️⭐️⭐️ (够用) | ⭐️⭐️ (需手动配置) |
| 安全性 | 需经常更新补丁 | 较好 | ⭐️⭐️⭐️⭐️⭐️ (无数据库,最安全) |
| 适用人群 | 不想折腾代码,想要现成主题和功能的人 | 喜欢极简风格,只专注于写作的人 | 极客、程序员,喜欢 Git 管理内容的人 |
WordPress 是全球最流行的 CMS,拥有无数的主题和插件。
部署步骤:
-
创建目录:
mkdir wordpress && cd wordpress -
创建
docker-compose.yml:安全提示:我们将 Web 端口绑定到
127.0.0.1,仅允许本机 Caddy 访问,避免端口直接暴露在公网,提高安全性。services: db: image: mariadb:10.11 container_name: wp-db restart: always environment: MYSQL_ROOT_PASSWORD: your_strong_root_password # 请务必修改为强密码 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: your_strong_db_password # 请务必修改为强密码 volumes: - db_data:/var/lib/mysql wordpress: image: wordpress:latest container_name: wp-app restart: always ports: - "127.0.0.1:8080:80" # 仅监听本地,配合 Caddy 反代 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: your_strong_db_password # 与上面保持一致 WORDPRESS_DB_NAME: wordpress volumes: - wp_data:/var/www/html depends_on: - db redis: # 可选:用于对象缓存加速 image: redis:alpine container_name: wp-redis restart: always volumes: db_data: wp_data: -
启动服务:
docker compose up -d -
配置建议:
- 在 Caddy 配置完成后,访问
https://你的域名完成安装。 - 强烈建议安装 "Redis Object Cache" 插件,连接地址填
redis,能显著提升后台加载速度。
- 在 Caddy 配置完成后,访问
Typecho 是国内非常受欢迎的轻量级博客系统,原生支持 Markdown,结构简单,运行飞快。
部署步骤:
-
创建目录:
mkdir typecho && cd typecho -
创建
docker-compose.yml(使用 PHP-FPM + Nginx 组合):services: typecho: image: joyqi/typecho:nightly-php7.4-fpm-alpine container_name: typecho-app restart: always environment: TYPECHO_DB_HOST: db TYPECHO_DB_USER: typecho TYPECHO_DB_PASSWORD: your_strong_db_password TYPECHO_DB_DATABASE: typecho volumes: - typecho_data:/var/www/html depends_on: - db nginx: image: nginx:alpine container_name: typecho-nginx restart: always ports: - "127.0.0.1:8081:80" # 仅监听本地 volumes: - typecho_data:/var/www/html - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - typecho db: image: mariadb:10.11 container_name: typecho-db restart: always environment: MYSQL_ROOT_PASSWORD: your_strong_root_password MYSQL_DATABASE: typecho MYSQL_USER: typecho MYSQL_PASSWORD: your_strong_db_password volumes: - db_data:/var/lib/mysql volumes: typecho_data: db_data: -
创建
nginx.conf:server { listen 80; server_name localhost; root /var/www/html; index index.php index.html; # 屏蔽敏感文件 location ~ ^/(\.user.ini|\.htaccess|\.git|admin/config.inc.php) { deny all; } location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass typecho:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } -
启动服务:
docker compose up -d
Hugo 不是在 VPS 上运行的程序,而是在你本地电脑上生成 HTML 文件,然后上传到 VPS。
工作流:
- 本地 (Mac/PC):写 Markdown -> 运行
hugo命令 -> 生成public文件夹。 - VPS:运行一个 Web 服务器 (Caddy/Nginx) 托管 HTML 文件。
- 发布:使用
rsync或scp将本地public文件夹同步到 VPS。
VPS 端部署 (Docker Caddy):
-
创建目录:
mkdir myblog -
创建
docker-compose.yml:services: caddy: image: caddy:alpine container_name: blog-server restart: always ports: - "80:80" # Caddy 需要公开 80/443 以申请证书 - "443:443" volumes: - ./public:/usr/share/caddy # 映射网页文件目录 - caddy_data:/data - caddy_config:/config volumes: caddy_data: caddy_config: -
启动服务:
docker compose up -d -
上传内容 (在本地电脑执行):
# 假设你的 VPS IP 是 1.2.3.4,目录是 /root/myblog/public rsync -avz --delete ./public/ [email protected]:/root/myblog/public/
对于 WordPress 和 Typecho,我们同样推荐使用 Caddy 作为反向代理来处理 HTTPS。
关键准备步骤(必读):
- 域名解析:一定要先去你的域名服务商(如阿里云、Namecheap),把域名 A 记录指向 VPS 的 IP 地址。
- 等待生效:在本地终端 Ping 一下域名,必须确保 IP 已经变了。如果 Caddy 启动时域名没解析好,SSL 证书申请会直接失败,导致无法访问。
Caddyfile 示例:
# WordPress 反代
blog.yourdomain.com {
reverse_proxy localhost:8080
}
# Typecho 反代
note.yourdomain.com {
reverse_proxy localhost:8081
}
启动 Caddy 后,它是自动申请和续期证书的,无需人工干预。
很多新手容易忽略这点,但在 VPS 上,数据备份就是生命。一旦 VPS 商家跑路或服务器故障,没有备份就意味着所有文章归零。
- 备份目录:本文所有 Docker 配置都将数据挂载到了
volumes。你需要定期备份/var/lib/docker/volumes目录。 - 自动化备份:人工备份容易忘,强烈建议参考我们之前的文章 VPS 自动备份方案 (2025),使用 Rclone 将数据自动同步到 Google Drive 或 S3 存储桶,睡个安稳觉。
- WordPress:生态最强,适合不折腾、功能需求多的用户。
- Typecho:轻快简洁,适合纯粹写作。
- Hugo:安全、极速、无数据库,适合技术控。
无论方案怎么选,内容永远是博客的核心。