首页
/ Ghost 开源发布平台入门指南:从 Ghost-CLI 快速部署到 Monorepo 源码开发

Ghost 开源发布平台入门指南:从 Ghost-CLI 快速部署到 Monorepo 源码开发

2026-09-08 10:26:00作者:侯霆垣

导读

本文以仓库根目录 README.md 为骨架,系统讲解 Ghost 这一开源无头 CMS 的两条落地路径:面向普通用户的 Ghost-CLI 快速部署(本地 ghost install local 与生产环境 ghost install),以及面向贡献者与高级开发者的 Monorepo 源码级开发pnpm dev 一键起服务)。读完本文,你将掌握如何在一分钟内跑起一个本地 Ghost 站点、如何在服务器上完成含 HTTPS 的生产安装,以及如何进入 Ghost 的源码世界阅读和理解它的仓库结构。


一、Ghost 是什么:一个为现代发布而生的无头 CMS

Ghost 的官方定位是 Independent technology for modern publishing, memberships, subscriptions and newsletters——它不仅是一套博客系统,还内建了会员(Membership)、订阅(Subscription)与 Newsletter 体系。在代码层面,核心包 ghostpackage.json 中将自己的关键词定义为 blog / cms / content / ghost / headless / markdown(见 ghost/core/package.json),其中 headless 是理解其架构的关键:Ghost 通过 API 提供内容,前端可以完全自建,也可以使用官方主题渲染。

事实依据:Ghost 以 MIT 许可证开源,版权声明为 "Copyright (c) 2013-2026 Ghost Foundation",详见 LICENSE。核心服务包的当前版本为 6.62.1-rc.0ghost/core/package.json)。

Ghost 目前是一个 pnpm 工作区(workspace)Monorepo。根目录的 package.json 声明:

  • 包管理器:pnpm@12.2.1
  • Node.js 运行版本:^22.23.1 || ^24.20.0(开发锁定 22.23.1);
  • 构建编排:Nx(nx.json)。

如果只关心用 Ghost 发布内容,不需要理解这些底层细节——官方推荐的方式是使用 Ghost-CLI 工具。


二、快速部署:首选 Ghost-CLI 安装工具

README 明确建议:"If you want to run your own instance of Ghost, in most cases the best way is to use our CLI tool"。绝大多数自托管场景,官方推荐使用命令行工具 Ghost-CLI

1. 安装 Ghost-CLI(全局)

npm install ghost-cli -g

Ghost-CLI 是独立维护的工具(在 Monorepo 结构文档中被列为外部关联仓库:TryGhost/Ghost-CLI installs and manages production Ghost sites,见 docs/codebase/monorepo-structure.md)。它的职责不止“安装”,还包括日常的 ghost update 升级、ghost restart、日志查看与 SSL 管理。

2. 本地安装:一分钟跑起来

在本地开发环境安装,需要加 local 标志:

ghost install local

该命令会做“全自动”配置:默认使用 SQLite 数据库(无需单独装 MySQL),在当前目录下生成一套可直接运行的 Ghost 实例。跑完后浏览器访问 http://localhost:2368 即可看到站点,访问 http://localhost:2368/ghost/ 进入管理后台。

仓库侧印证:ghost 包的依赖表中将 better-sqlite3 列为可选依赖(ghost/core/package.json),即本地 local 模式依赖 SQLite 引擎;而服务端生产部署则更多使用 MySQL(开发环境的 compose.dev.yaml 默认启动 MySQL 容器,数据库迁移工具为 knex-migrator)。

3. 生产安装:服务器一键部署

在服务器上执行不带标志的完整安装:

ghost install

ghost install 除了安装 Ghost 本体之外,还会自动完成:

  • 系统依赖检查与用户目录创建;
  • 数据库初始化与 knex-migrator 迁移;
  • 通过 LetsEncrypt 自动配置 HTTPS 证书;
  • 将 Ghost 注册为守护进程(ghost start 类系统服务),保证进程随系统自启。

日常升级同样交给 CLI 完成——ghost installghost update 由 Ghost-CLI 统一负责。在 Monorepo 的发布文档中有更底层的说明:一次正常的 ghost install / ghost update,Ghost-CLI 会下载 ghost 这个 npm 包(见 docs/contributing/shipping.md)。这解释了为什么自托管用户不需要 clone 源码仓库,只需一个 npm 全局包。


三、两条路径的取舍:托管服务 vs 自托管

README 将 Ghost(Pro) 定位为“部署生产实例最简单的方式”:官方托管,约 2 分钟即可上线一个新站点,自带全球 CDN、备份、安全与维护。其中值得注意的运营细节是:Ghost(Pro) 100% 的收入归 Ghost Foundation,用于资助项目本身的维护与后续开发——即“付费托管的同时也在资助开源”。

提示:本文不讨论托管服务与自托管的性价比优劣(README 仅以“节省时间”作为托管的主要价值点)。技术选型请结合自身运维能力与预算判断。仓库本身的代码是完全开源的,自托管链路(Ghost-CLI → ghost npm 包)在 docs/codebase/monorepo-structure.mddocs/contributing/shipping.md 中有据可查。

除快速部署外,README 还引导读者查阅三份官方资料:推荐托管技术栈(hosting stack)、如何正确升级 Ghost(upgrade)、以及开发者最关心的两件事——主题开发(themes)与 API 使用(Content API)。


四、面向贡献者与高级开发者:从 README 进入 Monorepo

如果上述快速部署已无法满足需求,比如你要为 Ghost 提 PR、改源码、或者基于 Ghost 内核二次开发,入口在 README 的 Contributors & advanced developers 一节:

1. 贡献前的规范沉淀

.github/CONTRIBUTING.md 定义了 Ghost 的提交信息规范:单行摘要不超过 80 字符,并以 Fixed / Changed / Updated / Improved / Added / Removed / Reverted / Moved / Released / Bumped / Cleaned 等动词开头;正文说明“为什么做这个改动”;issue 关联使用 ref / fixes / closes 等受支持的关系词。这些规范之所以重要,是因为 squash 后的提交信息会直接进入自动生成的 release notes。

2. 仓库顶层目录的职能划分

docs/README.mddocs/codebase/monorepo-structure.md,仓库顶层结构如下:

目录 内容
apps/ 前端应用:admin/(React 版新后台)、ember-admin/(历史 Ember 后台,正逐步迁移)、portal/(会员门户)、comments-ui/signup-form/sodo-search/announcement-bar/admin-toolbar/shade/(Admin 设计系统)
ghost/core/ Ghost 服务器、主题渲染、数据库迁移与服务端测试,即 npm 上 ghost 包的实体
koenig/ Koenig 编辑器及内容格式处理包(Lexical 编辑器与 kg-* 系列)
packages/ 共享库、Schema、翻译、测试数据与适配器契约
configs/ 共享的 ESLint / TypeScript / Vite / Vitest 配置
e2e/ 基于 Playwright 的浏览器端到端测试
docker/ 本地开发与 CI 用容器及配套服务
scripts/ 仓库的安装、校验、构建与发布工具链

ghost/core/ 内部还可进一步拆分,是理解服务端源码的钥匙:

路径 职责
ghost/core/core/server/ API、模型、服务、数据访问与服务器启动逻辑
ghost/core/core/frontend/ 主题渲染、Helper、中间件与公开静态资源
ghost/core/content/ 默认主题、适配器、设置、图片与运行时内容
ghost/core/test/ 单元、集成与服务端 E2E 测试

其中默认主题 casper/source/ 被一并打进 ghost npm 包发布(见 ghost/core/package.jsonfiles 字段),这也呼应了 Ghost-CLI 安装后“开箱即有官方主题”的体验。

3. 从源码启动开发环境

以标准开发配置(Docker 运行 Ghost Core 与支撑服务、宿主机运行前端 watcher)为例,流程如下:

# 1) 前置:Git、Node.js 22.23.1、Docker Compose v2、Corepack
corepack enable pnpm

# 2) 克隆仓库(含子模块)并安装工作区
pnpm setup        # 安装依赖 + 初始化 Git 子模块

# 3) 启动开发环境
pnpm dev

pnpm dev 首次运行需要构建开发镜像。启动完成后会拉起:Ghost Core、MySQL、Redis、Mailpit(开发邮件捕获)以及运行在 localhost:2368 的 Caddy 网关,并在宿主机运行 Admin 与 Portal 的 watcher。之后访问:

  • 站点前台:http://localhost:2368
  • 管理后台:http://localhost:2368/ghost/
  • 开发邮件:http://localhost:8025

ghost/core/index.js 是核心包的启动入口:它默认落入 require('./core/boot')() 走正常启动流程,同时支持 repltimetravelgenerate-data 等特殊命令模式(ghost/core/index.js)。根仓库的 package.json 也暴露了 dev:* 系列开发变体命令:

命令 适用场景
pnpm dev Ghost Core / Admin / Portal 开发
pnpm dev:public 额外 watch Comments UI、Signup Form、Search、Announcement Bar、Admin Toolbar
pnpm dev:lexical 在 Ghost Admin 内联调试 Koenig Lexical 编辑器
pnpm dev:analytics 启用 Tinybird 数据分析链路
pnpm dev:storage 通过 MinIO(端口 9000/9001)模拟 S3 存储
pnpm dev:stripe 按生产形态接收 Stripe Webhook

4. 一次“完整健康检查”的命令链

  • 验证服务状态:docker compose -f compose.dev.yaml ps
  • 灌入稳定样例数据(1000 会员 + 100 文章):pnpm reset:data
  • 应用待执行数据库迁移:pnpm migrate:db
  • 停止容器:pnpm docker:down

这些命令均为开发环境的破坏性操作(会清库),使用前请先阅读 docs/contributing/development-setup.md

5. 深入阅读的导航

Monorepo 的代码库文档体系在 docs/README.md 中编排得十分清晰,按需阅读即可:


五、从源码观察到的若干实现事实

为避免把 README 当“黑盒”,这里给出几个能从当前仓库直接验证的实现细节:

  1. 配置采用层级覆盖。开发环境默认配置只有极简的 enableDeveloperExperimentsghost/core/config.development.json)。真实配置由 Ghost Core 按“默认值 → 本地覆盖 → 环境变量 → 密钥”的次序加载,详细机制见 docs/codebase/configuration.md,底层使用 nconf(见 ghost/core/package.json 依赖表)。

  2. 发布节奏与 Admin 的持续交付。仓库文档说明:公开的 Ghost 版本每周二发布,届时会同时包含 Admin 与服务器;而 Admin 在 Ghost(Pro) 上采用持续交付,main 分支的每次提交都可能先于服务器发布上线(docs/README.md)。这对贡献者有实际含义:改 Admin 时必须保持与仍在运行的服务端版本的兼容。

  3. 前端集成应用通过主题 Helper 挂载apps/ 下的门户、评论等公开应用编译为浏览器 bundle,运行时通过 data-attributes 读取配置,并由 Ghost Core 经 {{ghost_head}}{{comments}} 等主题 Helper 注入页面(docs/codebase/monorepo-structure.md)。这正是“无头 + 前端自治”架构的落地形态。


六、生态与支持

  • 赞助方:README 公开致谢的赞助与合作伙伴包括 DigitalOcean、Fastly、Tinybird、BairesDev;
  • 社区支持:Ghost 面向开发者与用户开放社区论坛,遇到问题优先在论坛检索与提问;
  • 资讯订阅:可通过官方 changelog 通讯订阅产品更新(README 原文建议)。

获取帮助、主题文档、API 文档与官方托管文档的详细内容,请以 docs/README.md 的 Additional Resources 一节为线索继续阅读;本仓库内可读的代码库文档入口即 docs/README.md


七、许可证与商标

Ghost 以 MIT 许可证开源发布(LICENSE)。Ghost 名称与 Ghost Logo 为 Ghost Foundation Ltd. 的商标,使用须遵守其商标政策。若你打算在文章、产品或商业场景中使用 Ghost 相关标识,请以官方商标条款为准。


结语:从“跑起来”到“走进去”

这篇指南覆盖了 README 给出的完整主线:用 Ghost-CLI 五分钟内本地起站(ghost install local)、服务器一键生产部署(ghost install)、再通过贡献指南进入 Monorepo 以 pnpm dev 启动完整开发环境。如果你是内容创作者,走完“快速部署”一节即可开始发布;如果你是开发者,建议从 docs/README.md 的架构图谱出发,沿 运行时架构配置加载 两条主线深入阅读源码,那里才是 Ghost 真正的“使用说明书”。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
898
5.82 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
921
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.8 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
596
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
519
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
391