大家是否曾遇到过这样的场景:想分享一段代码给同事或朋友,却苦于没有合适的平台?或者想要一个私有的空间来保存常用代码片段,方便在不同项目中复用?虽然 GitHub Gist 是个不错的选择,但在国内访问可能不稳定,并且你的代码终究是托管在第三方平台上。
如果你期待一个更自主、更可控的解决方案,不妨了解一下 Opengist —— 一个可以自托管的、开源实现的 GitHub Gist 替代品。
什么是 Opengist?
Opengist 是一个基于 Git 的自托管代码片段分享服务。你可以将它看作部署在自己服务器上的“GitHub Gist”。它不仅提供简洁的 Web 界面,还支持通过标准的 Git 命令(兼容 HTTP 和 SSH 协议)创建、读取和修改代码片段。
所有内容都以 Git 仓库的形式存储,天然支持版本控制,你可以随时查看修改历史、对比差异。
Opengist 提供了许多实用功能:
- 灵活的可见性设置:支持公开(所有人可见)、未列出(仅限链接访问)和私有(仅自己可见)三种可见性。
- 多样化操作方式:可通过 Web 界面或 Git 命令行管理代码片段。
- 语法高亮:支持多种编程语言,代码展示更清晰。
- 多格式支持:除代码外,还支持 Markdown 和 CSV 文件渲染。
- 强大的搜索:支持全局搜索或按用户搜索,甚至可以按文件名、语言等过滤。
- 权限控制:管理员可开关用户注册功能,限制匿名用户的访问权限。
最值得一提的是,它全面支持中文界面,国内用户体验更加友好。
如何安装与部署?
Opengist 部署非常灵活,推荐使用 Docker 方式,可以最大程度简化环境配置。
使用 Docker 部署
-
确保环境准备
系统需预先安装 Docker 和 Docker Compose。可使用以下命令验证:docker --version docker-compose --version
如未安装,请参照官方文档先行安装。
-
编写
docker-compose.yml
在选定的目录(如/opt/opengist
)中创建docker-compose.yml
文件,内容如下:services: opengist: image: ghcr.io/thomiceli/opengist:1.10 # 建议使用固定版本 container_name: opengist restart: unless-stopped ports: - "6157:6157" # Web 服务端口 - "2222:2222" # SSH 端口(如不需要可移除) volumes: - ./data:/opengist # 数据持久化目录
6157
为 Web 访问端口,2222
为 SSH 端口(若不需要可删除)。volumes
设置将容器内数据挂载到本地./data
目录,务必保留此设置以防数据丢失。
-
启动容器
执行以下命令启动服务:docker-compose up -d
-
初始化访问
浏览器访问http://你的服务器IP:6157
。第一个注册的用户会自动成为管理员。
提示:若从
ghcr.io
拉取镜像缓慢,可尝试使用第三方服务来加速镜像,如 KSpeeder,提升下载体验。安装教程可以参考我的另外一篇文章:KSpeeder - 墙内开发者的福音:Docker镜像加速指南
配置反向代理(推荐生产环境使用)
如需通过域名访问并启用 HTTPS,建议使用 Nginx 设置反向代理。
- 准备 Nginx 环境及 SSL 证书(可使用 Let’s Encrypt 免费证书)。
- 创建 Nginx 配置文件(如
opengist.conf
):
server {
listen 80;
server_name gist.yourdomain.com; # 请替换为你的域名
# 强制跳转 HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name gist.yourdomain.com;
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
# 其他 SSL 优化配置...
location / {
proxy_pass http://localhost:6157;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 重新加载 Nginx:
nginx -s reload
Opengist 的基本使用
注册与登录
首次访问网站,默认语言为中文,如果不是中文,可以点击切换中文
随后点击右上角注册按钮
输入用户名和密码点击注册,完成第一个用户的注册,该用户将自动获得管理员权限。
创建代码片段
- 点击 “新建” 开始创建第一个代码片段。
- 在 “Metadata” 中设置标题、描述、自定义URL路径名和主题。
- 文件名输入框中填写带拓展名的文件名(如
demo.py
),系统会自动识别语言进行高亮。 - 在内容区粘贴代码或文本。
- 可以通过添加文件增加文件。
- 下拉选择合适的可见性选项,点击完成创建。
生成后,有三种方式获取代码。将此Gist嵌入到网站,通过HTTP克隆,通过SSH克隆,也可以直接下载zip压缩包,同时可以在页面中看到代码及修订记录。
使用 Git 管理片段
Opengist 支持 Git 协议操作,可像普通 Git 仓库一样管理代码片段。
-
克隆片段:
在片段页面找到通过HTTP克隆,使用以下命令克隆:git clone https://your-opengist-domain.com/gist/片段标识符.git
-
修改与推送:
本地修改后,可提交并推送更新:cd 片段目录 # 进行修改... git add . git commit -m "更新说明" git push origin master
每次推送都会在 Opengist 中生成新的版本记录,便于回溯和对比。
进阶功能与技巧
使用主题进行分类
Opengist 支持为代码片段添加主题(Topics),方便后续分类和筛选,提升管理效率。
高效搜索
Opengist 提供强大的搜索语法,支持多种筛选条件:
- user:username 搜索对应用户创建的片段
- title:关键词 按标题搜索
- filename:文件名 按文件名过滤
- extension:扩展名 按文件类型搜索
- language:语言 按编程语言筛选
- topic:标签名 按标签搜索
数据备份与迁移
所有代码片段数据均存储在 Opengist 数据目录下的 repos 文件夹中。定期备份此目录即可完整保存所有内容。迁移时,将备份目录复制到新环境,重新部署 Opengist 并挂载该目录即可恢复全部数据。
默认评论
Halo系统提供的评论