DJM CMS 是一套用 Go 编写的内容管理系统。它把“内容结构、前台渲染、扩展能力、后台运营”放在同一套可独立部署的服务里,并且安装时可以选择 SQLite 单文件数据库,也可以连接 MySQL——不需要先准备 MySQL。
一套可独立部署的内容系统
发布包内已经包含编译好的 Go 程序、模板和迁移脚本。默认监听 127.0.0.1:23180,不直接暴露到公网,由 Nginx 负责域名、HTTPS 和静态缓存。
SQLite 与 MySQL 双数据库
首次启动时会在 storage/database/djm.sqlite 创建数据库文件。备份时复制这个文件即可,迁移服务器也不用导出 SQL。只有当站点需要多实例同时写入、或数据量明显增长时,才建议切换 MySQL 8.0+;切换通过 database.driver 配置完成。
核心能力
- 内容模型:内置文章、单页、产品、图集、下载五种模型,也可以创建自定义模型与字段。
- 栏目体系:无限级栏目、独立 SEO、访问范围、外部链接与单页正文。
- 模板引擎:42 个内置标签,通过
arclist、list、field等标签直接渲染数据。 - 主题与插件:主题是纯文件目录,插件运行在受限沙箱中,升级不覆盖业务内容。
- 运营能力:定时发布、专题、会员、评论、广告位、友情链接、备份与在线更新。
技术架构
| 层次 | 实现 |
|---|---|
| HTTP 服务 | Go 标准库 + Echo 风格路由,前后台统一进程 |
| 数据存储 | SQLite(单文件)或 MySQL 8.0+,安装时选择 |
| 模板 | 自定义 AST 解析器,编译期校验标签、属性与包含关系 |
| 插件 | Starlark 沙箱,清单声明权限、后台入口与模板标签 |
| 部署 | 单二进制 + releases/current 版本目录,支持原子切换 |
性能与安全
- 性能:Go 单进程运行时、受控索引与稳定 ID 窗口、页面缓存和多实例缓存失效,减少数据库压力与页面等待。
- 安全:管理员会话与 CSRF、角色权限与内容范围、富文本服务端白名单、评论限频和审计日志,按最小权限运行。
- 模板:42 个内置标签覆盖导航、列表、分页、详情字段和标签;主题是文件目录,可以在后台编辑并即时校验。
- 插件:运行在受限沙箱中,清单声明权限、后台入口和模板标签,停用或升级不会改动核心内容。
适合谁
如果你希望内容结构可控、部署链路简单、模板可以直接改,而不是被封闭的 SaaS 或复杂的技术栈绑定,DJM CMS 会是一个合适的选择。下一步可以从本地运行开始,或者直接阅读宝塔部署指南。
讨论