开源 Go 博客 CMS · v0.5.0 · 持续更新中

GopherInk

把心思留给写作。内容管理、安全防护与扩展能力,由一个清晰、轻量的 Go 应用承担。

查看源代码 开始部署
  • Go 1.25
  • MDUI 2
  • SQLite / MySQL / PostgreSQL
  • 80+ 钩子
  • AGPL-3.0

设计取舍

一个博客系统,三件事做扎实

不追求庞杂的功能清单,而是把日常写作、长期维护和二次开发放在同一套清楚的结构里。

01 / WRITE

写作过程不丢线索

Markdown 预览、自动保存、已发布内容的独立编辑草稿,以及可展开和恢复的修订版本,让修改过程始终可控。

  • 文章与独立页面共用成熟编辑流程
  • 发布快照和编辑草稿各司其职
  • 附件按内容归档,插入位置准确

02 / GUARD

小站也有自己的防线

公开 URL 索引减少无效查询,页面缓存缓冲热点访问,WAF 对动态、静态、搜索、附件和登录分别执行策略,并配合动态并发限制与持续封禁应对突发流量。

  • 限流、无效路径与登录爆破封禁
  • 动态并发限制、L4 拦截与内存安全自退出
  • CSRF、签名会话、SSRF、上传校验与命令行账户恢复

03 / EXTEND

扩展边界看得见

主题和插件由统一构建器自动发现并编译进单二进制;80+ 个通用底层钩子覆盖内容、评论、附件与前端生命周期,插件可独占数据库,也可合并到主库。

  • 主题自动发现、配置、模板函数与自定义字段
  • 插件独占数据库、命名服务、独立路由与新标签菜单
  • 兼容 RSS、Atom、Sitemap、XML-RPC 与 Pingback

真实界面

安静地管理,舒服地阅读

后台与默认主题统一采用 MDUI 2。管理界面偏向清晰、稳定的工作台;前台则保持轻量,让主题色和内容成为主要视觉信号。

80+
预定义钩子
5
后台语言
3
数据库系列
1
二进制部署
GopherInk 默认主题的实际页面界面
Default Theme · MDUI 2 动态配色

现在就试试

界面颜色,不必停留在想象里

GopherInk 使用 MDUI 2 的动态调色能力。默认主题和管理后台都能独立选择种子色、桌面与移动端背景,并调节卡片、输入框和背景遮罩透明度;先在这里试一套颜色。

常用颜色
应用
我的博客
2026 / 07 / 16

第一篇由 GopherInk 写下的文章

一套主题色,一段文字,一次专注的发布。

2026 / 07 / 12

从草稿到发布,过程始终清楚

修改不会覆盖已经公开的版本,准备好后再合并发布。

#00ADD8

不只一种底色

再放进一张你喜欢的背景

颜色定义界面气质,图片则留住更具体的心情。选择一幅预设画面,或填入自己的图片 URL,再用主题色遮罩调整内容与背景之间的分寸。

恢复纯色背景
应用背景
主题色遮罩透明度0.78

能力概览

从写下第一行,到长期维护

内容工作流

文章、独立页面、自动保存、编辑草稿、修订回滚、自定义字段、分类和标签,写入与删除由独立编排层统一调度钩子。

评论社区

三种审核策略、嵌套回复、待审核自可见、头像模板、主题级服务端校验、Pingback 与 Trackback。

媒体资源

内容分目录管理、未绑定附件、WebP 转换、缩略图、图片灯箱和可接管的远程存储钩子。

数据选择

SQLite 零配置起步,也支持 MySQL、MariaDB、PostgreSQL 和读写分离;插件可独占 SQLite 或合并主库。

兼容连接

RSS、Atom、Sitemap、XML-RPC(MetaWeblog/WordPress/Blogger)、Pingback、RSD,后台可开关兼容接口。

多语言后台

英语、简体中文、繁体中文、日语和西班牙语,语言文件按语种分离,新增语种后台下拉框自动出现。

动态防护

动态请求并发限制、持续封禁策略、L4 Listener 拦截、内存安全自退出,应对高并发 CC 攻击。

扩展生态

80+ 通用底层钩子、插件命名服务、独立路由与新标签菜单、统一构建器自动发现 plugins/ 与 themes/。

启动配置

首次终端引导写入 data/config.json,支持 TLS 与启动参数,临时参数只覆盖本次启动,数据库与上传目录独立持久化。

应急恢复

命令行直接列出用户并重置指定账户密码,不启动 HTTP 服务;成功后旧登录会话同步失效。

官方维护

三个基础功能插件,开箱即用

由项目维护的基础插件,覆盖服务器状态、评论通知与访客统计三类常见需求,与核心同步迭代,后续会持续提供更新支持。

GopherInk-ServerInfo

服务器状态实时面板

在后台新增独立侧边栏入口,实时汇报每核 CPU 利用率与型号、物理内存与交换分区、各挂载文件系统容量,以及当前 GopherInk 进程的驻留内存。数据接口只读、禁用缓存,仅对已登录管理员响应。

查看仓库

GopherInk-CommentNotifier

评论邮件通知

新评论、回复或审核通过时按规则向作者、原评论者和管理员发送邮件。支持 SSL / STARTTLS / 无加密三种 SMTP 模式,基于 Go channel 的异步队列并发消费,并提供可视化 HTML 模板编辑器、实时预览与测试邮件。

查看仓库

GopherInk-VistorLogger

访客记录与流量统计

使用 request.after 钩子在响应发出后异步记录前台访问,IP 地理位置采用缓存式懒解析,每个 IP 只查一次 IP 库。统计页用原生 MDUI 卡片与表格,ECharts 图表运行在 sandbox iframe 中隔离渲染,配色随后台动态主题。

查看仓库

两种获取方式

  • 官方 Release:预构建二进制已集成这三个插件,下载即可使用,无需额外操作。
  • 自行编译:需先把各插件仓库克隆到 plugins/ 对应目录,再由统一构建器在编译期自动发现并集成。

快速部署

把博客跑起来

首次启动会在终端引导生成独立配置文件,默认使用 SQLite。可以直接使用预构建版本,也可以自行编译集成自定义主题与插件。

预构建版本

直接下载官方 Release 二进制,已包含默认主题与常用插件,开箱即用,满足基础写作需求,无需安装 Go 与 C 编译器。

前往 Releases

自行编译

适合需要定制主题、插件或修改源码的场景。统一构建器自动发现 plugins/themes/,按下方三步完成。

见下方步骤
  1. 1
    编译SQLite 驱动需要 CGO 和 C 编译器
    go build -o gopherink ./cmd/gopherink
  2. 2
    启动按提示确认数据库、上传目录和监听规则
    ./gopherink
  3. 3
    初始化在浏览器完成站点与管理员设置
    http://localhost:8086/install
bash
git clone https://github.com/Chocola-X/GopherInk.git
cd GopherInk
go build -o gopherink ./cmd/gopherink
./gopherink

忘记后台密码,也不必直接修改数据库

先确认用户 ID,再由命令行安全地更新密码和会话凭据;整个过程不会启动网站服务。

./gopherink user list ./gopherink user reset-password --id 1
启动配置与后台站点设置分离 上传目录与数据库独立持久化 主题和插件变更后重新编译

持续演进

多次迭代之后,又长出了一身本事

自项目初期开发以来,核心、主题与插件系统都经过多轮重构与加固。下面挑出值得展示的变化,按主题分组呈现。

扩展系统重构

  • 钩子系统改为通用底层钩子,预定义点扩展到 80+,具体功能由插件组合实现
  • 插件可独占 SQLite 数据库,也可合并到主库表前缀隔离,启用时自动建表与迁移
  • 统一构建器自动发现 plugins/themes/ 子目录,主题支持自动发现
  • 插件命名服务、独立路由、新标签菜单,配置保存流程接入 ConfigValidator / ConfigHandler
  • 核心 Runtime 大幅补齐写入、修订版本、WAF、图片附件与内容字段等接口

安全与稳定性

  • 新增动态请求并发数限制与动态持续封禁策略,Listener 可执行 L4 拦截
  • 修复高并发 CC 攻击下的内存占用问题,新增内存安全选项,不足时自动退出
  • 补齐主题级服务端评论校验协议,增强垃圾评论防护
  • 修复核心插件数据库生命周期引起的内存泄漏,改进核心 404 行为
  • 增加 TLS 支持,启动参数与 config 子命令可写入持久化配置

多语言与国际化

  • 新增日语、繁体中文、西班牙语翻译,后台支持五种语言
  • 翻译文件按语种分离,新增语言只需注册 map 与原生名称
  • 后台语言下拉框从硬编码改为动态派生,自动显示新语种
  • 补齐核心翻译表缺失的 Archive、Category、Tag 等单数键

默认主题增强

  • 新增阅读计数与点赞支持,文章时间提示可自定义并支持 {days} 占位符
  • 正文图片单击打开 Fancybox 4 灯箱,支持分组、滚轮缩放、全屏与双击切换尺寸
  • 代码块滚动条遮罩修复,列表无限下拉,PJAX 返回文章列表可回到上一次位置
  • 重构主题前端样式与交互逻辑,统一颜色设置,优化封面展示与卡片排布
  • 友链功能解耦为独立 links 插件,通过命名服务供主题消费

构建与交付

  • 新增 GitHub Actions 自动构建器,区分 release 与 beta 两种发布流程
  • 插件自动集成构建器,扫描插件目录生成空白导入,无需手动维护
  • 内置虚拟文件插件,可在后台维护 robots.txt 与域名所有权验证文本
  • XML-RPC 设置功能进入后台兼容性接口,可按需开关传统客户端支持

以及更多细节

  • 核心路径匹配回落接口,已有路由始终优先于虚拟文件
  • 统一头像获取接口 Runtime.AvatarURL,复用邮箱规范化与等级逻辑
  • 主题自定义字段架构完善,插件 PublicContent 补齐常用字段
  • 评论区布局、待审核状态标签与长 URL / 代码块溢出多项修复
  • 启动配置与应急命令完善,支持一键重置密码且同步失效旧会话
想看完整的提交记录?

每一项改动都可以在 GitHub 提交历史中追溯。

查看提交历史
GopherInk 盾牌与钢笔笔尖 Logo

名字与图标

Gopher 的墨水

Gopher 是 Go 语言广为人知的吉祥物,Ink 是墨水。组合起来既带一点写作的文艺感,也直白说明了它的身份:一件用 Go 构建的写作工具。

WAF

盾牌轮廓

外轮廓与内层结构都采用经典盾形,表达内置防护与稳定运行的技术底色。

INK

钢笔笔尖

中央墨孔和垂直中缝让盾牌内部自然成为笔尖,指向博客、书写与内容管理。

GOPHER

青蓝与双眼

视觉中心采用 Go 经典青蓝色 #00ADD8;顶部两个白点既是装饰,也是对 Gopher 双眼的极简致意。

OPEN SOURCE

从一篇文章开始认识 GopherInk

查看源码、提交问题,或者编译一份属于自己的版本。

前往 GitHub