Ghost 开源发布平台入门指南:从 Ghost-CLI 快速部署到 Monorepo 源码开发
导读
本文以仓库根目录 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 体系。在代码层面,核心包 ghost 的 package.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.0(ghost/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 install 与 ghost 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 →
ghostnpm 包)在 docs/codebase/monorepo-structure.md 与 docs/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.md 与 docs/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.json 的 files 字段),这也呼应了 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')() 走正常启动流程,同时支持 repl、timetravel、generate-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 中编排得十分清晰,按需阅读即可:
- 架构类:运行时架构、配置加载、认证体系、数据库结构、内部缓存、Jobs 任务系统、文章数据分析、Stripe 计费流、主题兼容性;
- 实践类:API 设计规范、数据库迁移、特性开关、错误处理、国际化;
- 协作类:开发环境搭建、测试指南、浏览器 E2E 测试、发布流程;
- 参考类:Node.js 版本兼容性对照。
五、从源码观察到的若干实现事实
为避免把 README 当“黑盒”,这里给出几个能从当前仓库直接验证的实现细节:
-
配置采用层级覆盖。开发环境默认配置只有极简的
enableDeveloperExperiments(ghost/core/config.development.json)。真实配置由 Ghost Core 按“默认值 → 本地覆盖 → 环境变量 → 密钥”的次序加载,详细机制见 docs/codebase/configuration.md,底层使用nconf(见 ghost/core/package.json 依赖表)。 -
发布节奏与 Admin 的持续交付。仓库文档说明:公开的 Ghost 版本每周二发布,届时会同时包含 Admin 与服务器;而 Admin 在 Ghost(Pro) 上采用持续交付,
main分支的每次提交都可能先于服务器发布上线(docs/README.md)。这对贡献者有实际含义:改 Admin 时必须保持与仍在运行的服务端版本的兼容。 -
前端集成应用通过主题 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 真正的“使用说明书”。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0629
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python07
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00