SourceHut是一套以极简为设计哲学的自托管代码协作平台,官方命名为sr.ht,它包含git.sr.ht、builds.sr.ht、todo.sr.ht等多个独立服务。与常见的GitLab或Gitea不同,SourceHut刻意避免引入复杂的外部依赖,其核心组件大多使用Go语言编写,部分辅助工具采用Python,且默认不要求部署PostgreSQL或Redis之类的重量级存储系统。在云服务器环境中,这种特性意味着你可以用一台最低配的实例完成代码托管与持续集成,而不必为内存和CPU发愁。对于个人开发者、小型开源项目或注重数据主权的团队来说,SourceHut提供了一种回归Unix朴素精神的工作流:通过SSH提交、通过邮件列表讨论、通过构建服务验证。

在正式动手前,需要明确云服务器的系统选择。SourceHut官方主要面向Arch Linux与Debian类系统提供构建脚本,实际测试中Ubuntu 22.04及以上版本、Debian 11或12都能顺利编译。实例规格方面,1核1G的机器即可完成基础部署,但若要同时运行构建任务,建议选择2G内存以上配置。网络层面需开放22端口用于SSH、80与443用于Web访问,若暂时不做反代也可直接使用源码内置的HTTP服务监听端口。磁盘空间预留10G足够,因为SourceHut本身不含大型二进制仓库,编译产物也多存放在构建临时目录。
基础环境与依赖的最小化准备
尽管SourceHut强调最小依赖,但编译阶段仍需要基础工具链。以Debian系为例,执行apt update后安装git、make、gcc、go、python3、scdoc与sqlite3即可覆盖绝大多数模块需求。这里的关键是Go版本不能过低,建议1.19以上,否则部分sr.ht组件会因泛型支持缺失而编译失败。Python主要用于运行meta.sr.ht的某些管理脚本,系统自带一般满足要求。不需要安装Nginx或Apache也能启动服务,因为各组件自带基于Go的web服务,只是生产环境通常仍建议用反向代理统一入口。
依赖最小化的另一层含义是少用第三方库。SourceHut核心不接消息队列,任务调度由builds.sr.ht自身的worker轮询实现;不接独立数据库,元信息多落盘于SQLite文件。这降低了运维心智负担,你不必监控多个后台进程,只要保证sr.ht服务用户权限正确即可。实践中,新建一个名为sr.ht的系统用户,将代码克隆到/home/sr.ht/sr.ht或/opt/sr.ht,并把后续生成的配置文件归属该用户,能避免不少权限错误。
编译与配置核心服务模块
SourceHut采用按仓库单独构建的方式,官方在每个服务仓库中提供Makefile。以git.sr.ht为例,克隆代码后进入目录执行make,会生成可执行文件与静态资源。配置方面,每个服务都有config.ini样例,重点修改[web]下的origin为你云服务器的域名或IP,[oauth]下的client_id与client_secret用于服务间鉴权,初次部署可先设置相同字符串。由于模块间通过内部API通信,建议在config.ini中统一[api]段的token,避免后续调用被拒绝。
配置完成后,用systemd托管是最省心的方式。编写/usr/lib/systemd/system/git.sr.ht.service文件,指定工作目录与启动命令,设置User=sr.ht,随后systemctl enable并start。重复此过程部署meta.sr.ht与builds.sr.ht,注意builds.sr.ht依赖images仓库中的构建镜像定义,若仅做最小CI,可只启用linux构建镜像。启动后用curl访问对应端口,若返回HTML登录页则说明Web层正常。此时你已拥有最小依赖的Git托管与CI控制面。
用builds.sr.ht运行轻量CI任务
builds.sr.ht的设计非常贴近无依赖理念:它不要求你编写复杂的流水线配置文件,而是在仓库根目录放置.build.yml,内容以YAML描述任务。一个最小示例仅包含image与tasks两段,例如指定image: alpine/edge,tasks下写脚本执行make与make test。提交推送后,git.sr.ht会触发webhook通知builds.sr.ht,后者派发到本地worker执行。worker无需常驻云服务器主节点,也可在同一台机器以builds.sr.ht-worker服务运行,占用极低。
对比传统CI工具,SourceHut的构建日志直接以纯文本通过网页与邮件推送,没有花哨界面却足够排查问题。由于构建环境基于容器或chroot隔离,且镜像体积小,一次任务启动常在十秒内完成。对于只想验证代码能否编译、跑通单元测试的个人项目,这种极简链路比维护Jenkins节点轻松太多。若云服务器资源紧张,还可设置builds.sr.ht的并发数为1,进一步压低负载。
| 服务模块 | 主要语言 | 核心依赖 | 典型内存占用 |
|---|---|---|---|
| git.sr.ht | Go | SQLite, SSH | 约80MB |
| builds.sr.ht | Go | worker, YAML | 约120MB |
| meta.sr.ht | Python/Go | SQLite | 约90MB |
整体来看,在云服务器部署SourceHut并不是一件门槛极高的事。只要遵循最小化安装原则,拒绝多余中间件,你就能以极低资源持有属于自己的Git与CI底座。后续可逐步加入todo.sr.ht做问题跟踪,或用lists.sr.ht承接补丁讨论,让整套自托管协作链更完整。这种部署思路也提醒我们,工具轻重往往取决于架构取舍,而非功能多寡。
云服务器部署SourceHut配置轻量Git_CI修改时间:2026-08-19 02:40:35