自托管服务
thomiceli/opengist avatar
thomiceli/opengist

Opengist:用 Git 仓库当后端,自托管 Pastebin 的另一种思路

由 Git 提供支持的自托管 Pastebin,是 Github Gist 的开源替代品。

3,341 个 Star191 个 ForkGoAGPL-3.0

秒懂

它是什么?
Opengist 是一个用 Go 写的自托管 Pastebin,所有片段都存进 Git 仓库,支持用标准 Git 命令读写。它适合已经习惯 Git 工作流的团队,但也有一些取舍需要先看清楚。
适合谁用?
Opengist 适合那些已经离不开 Git 的开发者和小团队,尤其是想完全掌控片段数据、又希望用熟悉命令管理内容的人。它不适合只想要一个极简粘贴工具、不想碰 Git 概念的用户,也不适合需要复杂权限模型或企业级审计的场景。
能商用吗?
可以,但条件严格。AGPL-3.0 是网络 copyleft 许可证:如果别人通过网络使用你修改过的版本(例如作为托管服务),你必须以同一许可证向他们提供源代码。
还在维护吗?
在维护。仓库最近一次提交在 17 天前。
用什么语言写的?
主要是 Go(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的问题:让粘贴内容也进入 Git 版本控制

普通的 Pastebin 把文本存进数据库,你只能通过网页查看和编辑。Opengist 换了个存储层:所有片段都是一个 Git 仓库里的文件。这意味着你可以用 git clone、git push、git pull 来读写片段,历史记录就是 Git 的提交历史,分支、标签这些概念也自然存在。它面向的是已经熟悉 Git 的开发者,而不是只想临时贴一段代码给同事看的人。GitHub Gist 也提供 git clone 功能,但它是一个托管服务,数据不在你手里。Opengist 把同样的模式搬到了你自己的服务器上。

工作机制:片段即仓库,操作即提交

根据 README 的描述,所有片段都存储在一个 Git 仓库中。你通过网页创建片段时,Opengist 会把它作为一个提交写进仓库。通过 Git 方式创建片段时,你实际上是在本地初始化一个仓库,添加文件,然后 push 到 Opengist 的 SSH 或 HTTP 端点。Opengist 支持 public、unlisted、private 三种可见性,还支持语法高亮、Markdown 和 CSV 渲染。搜索功能直接搜代码内容,而不是只搜标题。喜欢和 fork 操作也对应 Git 的概念,fork 就是复制一份仓库到你的名下。整个设计把 Git 当作唯一事实来源,网页界面只是这个仓库的前端。

部署方式:Docker Compose 是最短路径

README 给出了三种启动方式。最快的是 Docker:拉取 ghcr.io/thomiceli/opengist:1.15.1 镜像,写一个 docker-compose.yml,映射 6157 端口做 HTTP,2222 端口做 SSH,再把 $HOME/.opengist 挂载到容器内的 /opengist 目录。运行 docker compose up -d 后,浏览器打开 http://localhost:6157 就能用。通过 UID 和 GID 环境变量可以指定容器内运行的用户和文件属主。二进制方式也简单,从 release 页面下载对应平台的压缩包,解压后直接运行 ./opengist,默认监听 6157 端口。从源码编译需要 Git 2.28+、Go 1.23+、Node.js 16+ 和 Make,执行 make 然后 ./opengist 即可。配置文件通过 --config config.yml 指定,但 README 没有展开具体配置项。

真正的限制:Git 不是万能的存储格式

用 Git 存片段带来版本控制的好处,也带来一些麻烦。首先,每个片段都是一个独立的 Git 仓库,如果你有几千个片段,服务器上会有几千个 .git 目录,备份和迁移的复杂度会上升。其次,Git 对二进制文件不友好,虽然你可以 push 任意文件,但大文件会让仓库膨胀,而且没有 LFS 支持的话,历史里的大文件会永久占用空间。再者,Git 的权限模型是粗粒度的,Opengist 的可见性只有 public、unlisted、private 三档,没有细粒度的协作者权限控制。如果你需要给不同的人不同的读写权限,这个工具就不合适。最后,搜索功能虽然能搜代码内容,但基于 Git 的搜索性能不会像专门的全文搜索引擎那样好,片段数量大了之后可能会有延迟。

替代方案:Gitea 与私有 Gist 服务

如果你需要的不只是粘贴片段,而是完整的代码托管,Gitea 是更重的替代品。Gitea 也支持自托管,提供仓库、Issue、PR、Wiki 等功能,但它的定位是完整的 Git 平台,不是 Pastebin。Opengist 只做片段管理,界面更简单,资源占用更少。另一个替代方案是直接自建一个静态 Pastebin 服务,比如 PrivateBin,它用数据库存储,支持加密和过期时间,但不提供 Git 接口。PrivateBin 的优势是简单,劣势是你无法用 git clone 拉取内容。Opengist 的差异化在于它把 Git 作为核心接口,而不是附加功能。如果你已经用 Gitea 管理代码仓库,再部署 Opengist 可能有点重复,但如果你只是偶尔分享片段,又希望保留版本历史,Opengist 更轻。

维护与升级成本:AGPL-3.0 的约束

Opengist 采用 AGPL-3.0 许可证。这意味着如果你修改了代码并部署为网络服务,你需要将修改后的源码开放给用户。对于个人使用或内部工具,这个约束影响不大,但如果你计划基于它做商业产品,需要谨慎评估。项目本身是活跃的,最近一次 push 在 2026 年 8 月,v1.15.1 是当前版本,升级频率大约每两周一个 minor 版本。升级方式取决于你的部署方式,Docker 用户直接拉新镜像即可,但需要注意数据目录的兼容性,README 没有明确说明升级是否需要迁移脚本。二进制用户需要手动下载新版本并替换文件。从仓库布局看,docs 目录有完整的文档,但 README 没有提及数据库迁移或备份策略,这些需要你自己验证。

上手建议:先跑一个私有实例试试

如果你决定尝试,建议先用 Docker 方式跑一个临时实例,不要直接投入生产。创建 docker-compose.yml 后,设置 UID 和 GID 为你自己的用户 ID,避免容器以 root 运行。启动后,用浏览器创建一个片段,然后尝试用 git clone 拉取它,再用 git push 修改它。这一步能验证你的网络环境是否允许 SSH 或 HTTP 访问 2222 端口。如果你只需要 HTTP,可以去掉 SSH 端口映射。另外,注意默认端口 6157 是否与现有服务冲突,如果冲突,修改 ports 映射即可。最后,检查你的 Git 客户端版本,Opengist 要求 Git 2.28 以上,太老的版本可能无法正常 push。

编辑结论

Opengist 适合那些已经离不开 Git 的开发者和小团队,尤其是想完全掌控片段数据、又希望用熟悉命令管理内容的人。它不适合只想要一个极简粘贴工具、不想碰 Git 概念的用户,也不适合需要复杂权限模型或企业级审计的场景。部署前先确认两件事:你的 Git 版本是否在 2.28 以上,以及你能否接受 AGPL-3.0 对衍生服务开源的要求。如果这两点都没问题,按 README 里的 docker-compose 示例跑起来,再用 git clone 推一个片段试试,就能判断它是否符合你的工作流。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记