GoPress 文档
GoPress 是一个用 Go 编写的内容管理框架与 CMS 引擎,面向需要自托管、主题化、插件化和 API 扩展能力的网站与内容应用。 它将内容模型、后台管理、主题模板、插件扩展、SEO、媒体处理和 REST API 组织为一套可组合的工程框架。 适合用于企业官网、内容站、产品展示站、文档站,以及需要在 Go 技术栈中保留 CMS 编辑体验的定制项目。
GoPress 是什么?
GoPress 旨在把传统 CMS 中经过验证的内容模型、主题系统、插件扩展和后台管理能力,放到 Go 的运行时与工程生态里重新组织。它提供统一的内容与 taxonomy 模型、数据驱动的后台 CRUD、请求级 Content/Taxonomy Scope、主题模板引擎、Hook / Filter 扩展点、REST API、SEO 基础设施、多级缓存、媒体变体和多站点配置能力。
框架同时提供 Provider-neutral 的前台用户、外部身份绑定、可撤销 Session 和注册策略;当前可通过独立 Google OIDC 插件或 MetaMask EIP-4361 SIWE 插件登录,两者复用同一套 core 账号与 Session 边界。
登录用户创作也使用通用 Core 边界:主题声明允许提交的内容类型与角色,Core 统一执行账号状态、所有者范围 RBAC、审核状态、输入校验和限流,主题继续负责路由与视觉呈现。
评论也是 core 的稳定领域:支持仅登录用户发表评论、一级直接回复、审核状态、 后台分页与 RBAC,并允许主题使用统一前台账号上下文呈现评论和 Profile。
Agent 能力同样采用协议无关的 Core 边界:core/agent 统一负责 Tool Registry、
Principal、Scope、RBAC、所有权、执行、幂等和审计;默认停用的官方
gopress-mcp 插件只把这些能力适配为远程 MCP。当前 Safe Write Beta 提供 6 个
只读 Tool 和 6 个逐项启用的受控写 Tool,站点默认保持只读。
这个项目不是 WordPress 的逐行重写,也不是对 PHP 生态的替代宣言。GoPress 更关注一类具体场景:开发者希望保留 CMS 的编辑体验和扩展模型,同时获得 Go 在部署、并发、可观测性和长期维护上的工程优势。
项目状态
GoPress 当前处于 beta 阶段。核心内容模型、后台管理、主题引擎、插件机制、SEO、缓存、媒体管线和示例主题已经具备基础可用性,但公开发布前仍需要更多真实项目验证、基准测试、迁移文档和安全审计。
如果你计划在生产环境使用,建议先从内部站点、企业官网、文档站或内容型应用开始,并根据实际流量与编辑流程做压测和备份策略。
为什么做 GoPress?
成熟 CMS 生态已经证明了“内容模型 + 主题 + 插件 + 后台管理”这套抽象的长期价值。GoPress 借鉴其中稳定的产品形态,同时用 Go 的单二进制部署、goroutine 并发模型、静态类型和标准化工具链,降低自托管 CMS 在部署、扩展和维护上的复杂度。
下面的对比不是为了评价不同技术栈的优劣,而是说明 GoPress 的设计取舍:
| 维度 | WordPress (PHP) | GoPress (Go) |
|---|---|---|
| 运行方式 | PHP-FPM / Web Server 组合,围绕请求生命周期运行 | Go 单进程服务,适合常驻内存模型 |
| 扩展方式 | 主题与插件生态成熟,运行时动态加载灵活 | Go 接口与 Hook 注册,强调类型安全和可维护性 |
| 缓存策略 | 通常通过插件、对象缓存或反向代理组合增强 | 内置内存 / Redis / 数据库多级缓存路径 |
| 定时任务 | 常见方案包括 WP-Cron 或系统 Cron | 由服务进程内的调度器执行 |
| 部署形态 | Web Server、PHP 运行时、数据库等多组件协作 | 编译后以单一服务进程交付,外接数据库与可选 Redis |
核心设计原则
- 内容优先 — 以统一的
Content + Meta模型承载文章、联系留言,以及主题声明的自定义内容类型。 - 主题与引擎分离 — 主题负责呈现,引擎负责路由、查询、SEO、媒体和后台能力。
- 插件通过接口扩展 — 插件通过 Go 接口、Hook 和 Filter 注册能力,减少隐式运行时耦合。
- 缓存作为基础能力 — 内置内存缓存、Redis 缓存和页面缓存路径,并在缺少 Redis 时自动降级。
- SEO 内建 — URL 重写、永久链接、Canonical、Sitemap、Meta、模板映射、重定向等能力在核心层统一处理。
- API First — 内容类型可暴露 REST API,并通过 Swagger / OpenAPI 描述接口。
- 多实例隔离 — 支持表前缀和站点级配置,便于多实例共享基础设施并隔离数据边界。
- 后台优先 — 内容团队应能从 CMS 管理大部分站点行为,而不是依赖修改代码。
- 开放扩展边界 — 公开 API、文档和契约面向第三方主题与插件长期演进。
文档导航
- 快速开始 — 安装、配置、第一次启动
- 架构 — 引擎结构、Hook 系统、URL/SEO、内容与 taxonomy 过滤
- 内容与分类 Scope API — 通用请求 Scope、带 Scope 的查询和安全写入边界
- 前台用户注册与身份登录 — 用户/Identity/Session、注册策略、Google 插件、主题接入与钱包扩展
- 前台用户内容提交 — 声明式策略、所有者范围 RBAC、审核状态、限流和主题路由安全
- 评论与回复 — 评论模型、一级回复、登录/RBAC 与缓存契约
- 后台管理 — 后台 CMS 功能、扩展点、菜单管理
- 主题开发 — 主题接入、SEO 规范、图片管线、媒体变体
- 插件开发 — 创建插件、内置插件参考(multilang / seo-extras / code-snippets / gopress-analytics / google-identity / metamask-identity)
- 多语言插件 — 内容、Category/Tag、菜单、设置翻译与规范 URL 行为
- Agent 与 MCP — 设计原则、分层架构、Tool 执行、身份与授权、扩展开发、运维和测试
- GoPress MCP 插件 — Endpoint 启用、凭证、客户端连接、Safe Write 与排障
- 路线图与贡献 — Agent/MCP 后续 OAuth 阶段及其它演进计划
- 参考资料 — 项目结构、表前缀、REST API、技术栈、路线图
API 接口规范见独立的 Swagger 文档(运行中的实例)或 docs/swagger.yaml。
