Docs / 项目结构

项目结构

go-press/
├── cmd/
│   ├── server/main.go          # 服务启动入口
│   └── gendoc/main.go          # Swagger 文档生成工具
│
├── core/                       # ========== 引擎核心 ==========
│   ├── engine.go               # 引擎生命周期(启动/路由/关停/App 接口/registerCoreTypes)
│   ├── bootstrap.go            # BuildAndBootstrap 一键式启动编排
│   ├── migrate.go              # 数据库自动迁移(GORM AutoMigrate)
│   ├── seeder.go               # 声明式数据种子(TOML 驱动,图片自动下载 + 媒体注册)
│   ├── themes.go               # 主题注册表 + 工厂
│   ├── plugins.go              # 插件注册表 + 工厂
│   ├── handler.go              # HandlerSwitcher(安装器 ↔ 应用热切换)
│   ├── table_registry.go       # 表注册表(追踪 Core/Plugin/Theme 表归属)
│   │
│   ├── content/                # 统一内容系统
│   │   ├── content.go          #   Content + ContentMeta 模型
│   │   ├── meta.go             #   ContentMeta 键值扩展
│   │   ├── types.go            #   ContentType 注册表(ContentTypeDef + Registry + AddContentTypeToTaxonomy)
│   │   ├── query.go            #   链式查询构建器(WP_Query 风格)
│   │   ├── scope.go            #   请求级内容过滤 API(AddContentScope / ScopedDB)
│   │   ├── repository.go       #   通用 CRUD(Create/Update/Delete/Find/FindBySlug)
│   │   └── command.go          #   后台与 Agent 共用的内容写 Command Service
│   │
│   ├── agent/                  # 协议无关 Agent 核心(Tool/Principal/Scope/RBAC/执行/凭证/幂等/审计)
│   ├── audit/                  # 跨后台与其他传输复用的通用审计模型
│   ├── taxonomy/               # 分类法(Term + Taxonomy + TermRelationship)
│   ├── comment/                # 评论、一级回复、审核状态与查询仓储
│   ├── user/                   # 用户 + JWT 认证 + RBAC(角色/能力)
│   ├── mail/                   # 通用邮件对象、Sender 能力与 SMTP 投递
│   ├── i18n/                   # 核心 i18n 系统(Manager + go-i18n Bundle + T() + TranslateOption/TranslateSettings)
│   ├── option/                 # 全局设置 + Translatable 注册表(RegisterTranslatable / IsTranslatable / AllTranslatableKeys)
│   ├── menu/                   # 导航菜单(Menu + Item 树形结构 + 位置注册 + 语言 Hook)
│   ├── media/                  # 媒体库(上传/尺寸记录/响应式变体/WebP + JSON API)
│   ├── hook/                   # Hook/Filter 事件总线(WordPress 风格)
│   ├── cache/                  # L1 内存 + L2 Redis 多级缓存 + 页面缓存中间件
│   ├── worker/                 # Goroutine 工作池 + Cron 定时调度
│   ├── rewrite/                # URL 重写 + 永久链接 + SEO + Sitemap + 重定向
│   ├── api/                    # REST API(自动端点 + JWT/APIKey 双认证 + 限流 + CORS)
│   ├── installer/              # Web 安装器(DB 配置 + 站点信息 + 热切换)
│   ├── theme/                  # Theme/App 接口 + BaseTheme + 页面 bundle 加载 + FuncMap + 内置回退模板
│   ├── plugin/                 # Plugin 接口定义
│   └── admin/                  # 后台 CMS(数据驱动 CRUD + RBAC + 审计日志)
│       ├── static/css/         #   后台样式
│       ├── static/js/          #   后台 JS(Quill 编辑器 + 媒体选择器)
│       └── templates/          #   后台模板(layouts + pages)
│
├── themes/                     # ========== 主题目录 ==========
│   ├── modern-company/         #   企业官网主题(产品/服务/案例/博客)
│   │   ├── theme.go            #     主题入口 + init() 自注册
│   │   ├── theme.toml          #     主题元信息 + 内容类型 + 菜单位置/图标
│   │   ├── handlers.go         #     自定义页面处理器
│   │   ├── services.go         #     业务服务层(含 TranslateSettings 调用)
│   │   ├── functions.go        #     模板函数
│   │   ├── translatable.go     #     可翻译设置键声明(option.RegisterTranslatable)
│   │   ├── locales/            #     i18n 翻译文件(en.json, zh.json)
│   │   ├── demo/data/          #     内置演示数据(seed.toml)
│   │   ├── static/             #     CSS/JS/Images
│   │   └── templates/          #     layouts/ + partials/ + pages/ 页面模板
│   ├── atelier-slate/          #   设计工作室主题
│   ├── axis-form/              #   Axis Form 建筑设计主题
│   ├── florafi/                #   FloraFi 稳定币 / 金融科技主题
│   ├── civic-estate/           #   商业地产主题
│   ├── financial-news/         #   财经新闻门户主题
│   ├── go-press-landing/       #   SaaS Landing 主题
│   ├── mono-journal/           #   Mono Journal 个人博客主题
│   └── terra-trail/            #   户外旅行主题
│
├── plugins/                    # ========== 插件目录 ==========
│   ├── multilang/              #   内容 + Category/Tag + 菜单/设置多语言
│   │   ├── plugin.go           #     生命周期、语言解析、Content Scope、菜单/SEO/Sitemap Hook
│   │   ├── taxonomy.go         #     Taxonomy Scope、翻译策略与后台工作流
│   │   ├── models.go           #     内容/语言/字符串/菜单/Taxonomy 翻译模型
│   │   ├── repository.go       #     内容、语言、字符串、菜单与 Taxonomy 翻译 CRUD
│   │   ├── register.go         #     init() 自注册
│   │   └── templates/admin/    #     语言、内容、Taxonomy、菜单、字符串与设置翻译后台
│   ├── seo-extras/             #   Yoast-like per-content SEO 覆盖
│   │   ├── plugin.go           #     3 个 hook 实现 + meta box HTML 构造
│   │   └── register.go         #     init() 自注册
│   ├── code-snippets/          #   WPCode-like 站点级代码注入
│   ├── gopress-analytics/      #   自托管 PV/UV/访客与归属地统计
│   ├── gopress-mcp/            #   默认停用的 MCP Streamable HTTP 适配器与管理页
│   ├── google-identity/        #   Google OIDC 前台身份 Provider
│   └── metamask-identity/      #   EIP-4361 SIWE 钱包身份 Provider
│
├── internal/autoload/          # gopress gen 自动生成的主题/插件 blank import
├── internal/contracts/         # 跨主题公开契约测试(themes/ 根只放主题包)
│
├── sites/                      # 站点配置(Web 安装器自动生成)
│   └── localhost/              #   本地开发站点
│       ├── config.toml         #     站点配置文件
│       └── public/             #     站点级公开生成物(sitemap.xml、robots.txt、llms.txt 等)
│
├── pkg/                        # ========== 基础设施 ==========
│   ├── dbprefix/               #   表前缀工具(Set/Get/Table/PluginTable/ThemeTable)
│   ├── logger/                 #   结构化日志 (slog)
│   ├── middleware/             #   通用中间件(请求日志等)
│   └── postgresql/             #   数据库连接工厂(NamingStrategy + 连接池)
│
├── config/                     # 默认配置 + 配置解析
│   ├── config.go               #   配置结构体定义
│   ├── resolve.go              #   多站点配置发现
│   └── config.toml             #   配置模板(密钥留空,非运行时配置;实际站点用 sites/<host>/config.toml)
│
├── docs/                       # 文档
│   ├── guide/                  #   MkDocs 文字文档(你正在看的部分)
│   ├── docs.go                 #   Swagger Go 包(main.go 通过 _ "go-press/docs" 引用)
│   ├── swagger.json            #   OpenAPI 规范
│   └── swagger.yaml
│
└── uploads/                    # 上传文件目录(运行时生成)
    ├── 2026/04/                #   按年月组织的用户上传,变体与原图同目录
    │   ├── xxxx.png            #   原图,gp_media.path 指向这里
    │   ├── xxxx-480w.webp      #   响应式 WebP 变体
    │   └── xxxx-1024w.png      #   原格式 fallback 变体
    └── demo/                   #   演示数据图片

Core

core/ 是框架运行时。engine.gobootstrap.gomigrate.goseeder.go 负责启动、迁移和数据导入;content/taxonomy/comment/user/ 提供稳定领域模型;agent/ 提供协议无关的 Tool Registry、Principal、 Credential、Executor、幂等与审计;theme/plugin/hook/ 定义公开扩展 契约;其余目录提供 Rewrite、缓存、媒体、菜单、邮件、API 和安装器等共享服务。

主题

主题位于 themes/{slug},根目录必须包含 theme.toml 与非测试 Go 源文件, 并通过 init() 向 core 注册。常见目录包括 locales/demo/data/static/templates/{layouts,partials,pages}。跨主题公开契约测试位于 internal/contracts/,因此 themes/ 根目录只保留主题包。

插件

插件位于 plugins/{slug},以 plugin.toml 作为 manifest。插件只能通过 core Hook、Settings Provider、受保护路由、中间件、表注册和前台语义插槽 扩展系统;插件自有表通过 dbprefix.PluginTable 命名,运行时不能 import 主题。

运行站点

sites/{host}/config.toml 由安装器生成或由运维维护; sites/{host}/public/ 保存 sitemap.xml 等站点级公开生成物。 uploads/YYYY/MM/ 保存原图与响应式变体。配置、凭据、上传文件和生成物属于 运行时数据,默认不应提交到公开源码仓库。