Ghost 是 2026 年「自媒体写作者自托管」赛道里最完整的选择——比 WordPress 轻、比 Substack 自由、比 Beehiiv 更掌握数据。竹白下线后,国内中文写作者迁到 Ghost 自托管成了主流路径。本文按 Ghost 6.0 官方文档 + 2026 年 5 月中文自托管经验,拆开完整部署链路。

TL;DR

Ghost 6.0 部署:VPS(Oracle Cloud Always Free ARM 实例零月费)→ 装 Docker + Compose → 用官方 ghost:6-alpine 镜像 + MySQL 8 + Caddy 反代 → 5 分钟跑通。中文站点要把 timezone、SMTP、locale 三处调成中文环境。比 Ghost(Pro) 省 70-90% 成本。

部署前的环境检查

  • VPS:1 GB RAM 起步、推荐 2 GB + 2 vCPU、20 GB SSD。Oracle Cloud Always Free / Hetzner / Vultr 都行。
  • 域名:必备。新域 + Cloudflare DNS 完整生效约 5-10 分钟。
  • Docker Engine ≥ 20.10:旧版不支持 Compose v2 语法。
  • Docker Compose ≥ 2.0:v1 已停止维护、Ghost 6 不支持。
  • VPS 网络出口:搭建 / 升级 Ghost 要从 docker hub 拉镜像约 500 MB——VPS 网络稳定性影响。SSH 跳板与管理员后台登录都建议固定海外出口,详见下文「跨地区使用 / 旅行」一节。
  • 服务器时区timedatectl set-timezone Asia/Shanghai
  • 防火墙:放通 80、443、22 端口。

主流程:5 步部署

第一步:装 Docker 和 Compose

Ubuntu 22.04 / 24.04 VPS 上:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# 重新登录使 group 生效
docker --version
docker compose version

第二步:拉 Ghost 官方 Compose 模板

Ghost 6.0 在 github.com/TryGhost/Ghost 仓库直接提供官方模板:

mkdir -p ~/ghost && cd ~/ghost
git clone https://github.com/TryGhost/Ghost-Docker.git .
# 或手动新建 docker-compose.yml

第三步:写 docker-compose.yml

新建 ~/ghost/docker-compose.yml

version: '3.8'
services:
  ghost:
    image: ghost:6-alpine
    restart: always
    ports:
      - "2368:2368"
    environment:
      url: https://your-domain.com
      database__client: mysql
      database__connection__host: mysql
      database__connection__user: ghost
      database__connection__password: change-me-strong-password
      database__connection__database: ghost
      mail__transport: SMTP
      mail__options__service: Postmark
      mail__options__auth__user: your-postmark-token
      mail__options__auth__pass: your-postmark-token
    volumes:
      - ghost_content:/var/lib/ghost/content
    depends_on:
      - mysql

  mysql:
    image: mysql:8
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: change-me-root-password
      MYSQL_DATABASE: ghost
      MYSQL_USER: ghost
      MYSQL_PASSWORD: change-me-strong-password
    volumes:
      - mysql_data:/var/lib/mysql

  caddy:
    image: caddy:2-alpine
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config

volumes:
  ghost_content:
  mysql_data:
  caddy_data:
  caddy_config:

第四步:写 Caddyfile

~/ghost/Caddyfile

your-domain.com {
    reverse_proxy ghost:2368
}

Caddy 会在第一次启动时自动签发 Let’s Encrypt 证书、自动续期,零额外配置。

第五步:启动

docker compose up -d
docker compose logs -f ghost  # 看日志确认启动正常

浏览器打开 https://your-domain.com/ghost → 完成 admin 账号注册 → 进 Settings 配主题、订阅、付费墙。

中文环境调整

时区

Settings → General → Publication Language 改 zh、Timezone 改 Asia/Shanghai

主题

下载支持中文的主题(Casper / Source / Edition),upload 到 Settings → Design → Themes。主题包里 package.json 改:

{
  "config": {
    "locale": "zh",
    "posts_per_page": 10
  }
}

SMTP(避免国内邮箱拒收)

不要用 Mailgun(国内 QQ/163 收信成功率 60%)。改用 Postmark / Resend / SendGrid:

mail__transport: SMTP
mail__options__host: smtp.postmarkapp.com
mail__options__port: 587
mail__options__auth__user: your-postmark-token
mail__options__auth__pass: your-postmark-token

国内访问优化

Cloudflare DNS 接到 VPS,国内访问通过 CF 边缘节点加速。Cloudflare 免费版即可(不需 CF Pro)。

备份与恢复

全量备份

cd ~/ghost
docker compose down
tar czf ghost-backup-$(date +%Y%m%d).tar.gz \
  /var/lib/docker/volumes/ghost_ghost_content \
  /var/lib/docker/volumes/ghost_mysql_data
docker compose up -d

内容导出(Ghost 原生)

Ghost Admin → Settings → Labs → Export → 下载 JSON。所有文章 + 用户 + 订阅都在里面。

自动备份脚本

cron job 每天凌晨备份:

0 3 * * * /home/ubuntu/ghost-backup.sh

把生成的 tar.gz 同步到 S3 / Backblaze B2 / 阿里云 OSS(按地区选)。

常见失败原因

  • MySQL 8 root 密码冲突:删 mysql_data volume 重建。
  • Caddy 签证失败:检查 DNS 是否生效、80/443 端口是否放通。
  • ghost 容器启动死循环:看 logs 多数是数据库连接失败——MySQL 启动慢于 Ghost。
  • ARM64 VPS 上 ActivityPub 容器无法启动:AMD64-only,需 QEMU emulation。
  • url 配错:必须是 https:// 完整域名、结尾不要 /。
  • 中文 SMTP 邮件被拒:不要用 Mailgun,改 Postmark / Resend。

升级 Ghost

cd ~/ghost
docker compose pull
docker compose up -d
docker image prune  # 清理旧镜像

Ghost 6 minor 版本(6.x → 6.x+1)零中断升级。major 版本(6 → 7)建议先备份。

已部署完后的安全设置

  1. VPS 防火墙:只开 80、443、22。SSH 改用 key 登录、禁用 root 密码登录。
  2. MySQL 强密码:不要用示例密码。
  3. Ghost admin 账号 2FA:Settings → Staff → Two-step verification。
  4. 定时备份:cron job + 异地存储。
  5. 监控:Uptime Robot 监控站点 5 分钟一次。

跨地区使用 / 旅行

VPS 自托管的 Ghost 站点对管理员设备-IP 一致性敏感——长期固定 IP 管理后台,比频繁切 IP 触发的「异常登录」邮件少很多:

  1. 管理员设备配 长期稳定家庭 IP + 单设备绑定
  2. SSH 跳板机也走同一出口。
  3. 旅行时不要从酒店 WiFi 登 admin 后台(公共网络 IP 信誉差,CF 可能 challenge)。

Ghost 自托管 vs Ghost(Pro) 成本对比

项目Ghost(Pro) Creator自托管(Oracle Free)
月费$25$0
订户上限1000无限
自定义主题全功能全功能
数据所有权Ghost.org自己
维护成本0每月 30 分钟
邮件配额自己接 Postmark($15/月含 10000 封)
全年成本$300$190

订户超 1000 / 想完全掌握数据 / 想做付费墙变现的中文写作者,自托管划得来。

相关阅读

来源与时间戳