私有基础设施 / 无需身份证明阅读隐私原则
KoalaVPS 现场笔记

一座你可以重建的小型锻造厂。

Git 服务可以让仓库和协作处于你的控制之下。请分别保护代码、数据库和构建系统。

选择协作层

Forgejo 和 Gitea 是轻量级 forge 软件的示例;对于较小的工作流,纯 SSH Git 可能就足够了。将问题跟踪、评审、包存储和身份需求与项目相匹配。核实当前支持的版本和许可证。

将构建与代码托管分离

CI 运行器执行项目控制的代码,不应持有不受限制的代码托管平台或主机凭据。隔离运行器、限定令牌范围,避免在与仓库服务相同的特权账户上运行不受信任的任务。

保护访问与注册

当服务为私有时,禁用公开注册。使用个人账户、强身份验证和范围严格限定的部署密钥。记录 SSH 端口和主机密钥;不要默默训练用户忽略主机密钥警告。

备份完整服务

仅仓库可能不包含问题、账户、附件和配置。遵循代码托管平台的统一备份流程,并在文件权限和应用密钥完好的情况下测试恢复。

锻造恢复检查清单

一致地导出数据库,并保留仓库存储、附件、大文件存储(如启用)、配置和加密密钥。恢复后通过预期的 SSH 或 HTTPS 路由验证克隆。将代码托管平台和任何 CI 工作进程隔离,以免构建过程改写服务自身的配置。

保持部署权限范围狭窄

对于只拉取代码的服务器,只读部署密钥可能就足够了。发布自动化可能需要少量额外权限范围。为不同机器使用独立密钥,记录其用途,并在机器退役时移除。

使用最合适的协作服务

对于少量私有仓库,通过受限 SSH 的裸 Git 可能已足够。Forgejo 或 Gitea 增加了账户、拉取请求、问题和可选包,代价是数据库、应用更新和更多持久状态。记录团队实际会使用的功能。分别预算仓库增长、大文件对象、附件和构建产物;CI 计算可能超过 forge 本身。

  • 选择一个规范的 HTTPS 名称并保护其 DNS 账户。
  • 决定注册是关闭、邀请制还是审核制。
  • 为 forge 服务分配非特权身份和持久私有存储。

分离 Web、SSH 和数据库路径

使用所选版本的上游配置,并固定预期的镜像版本。TLS 反向代理应能访问内部 Web 监听器;数据库应仅可由 forge 访问。如果 Git SSH 使用容器端口,请保持其对外公布的主机和外部端口与映射一致。更改 forge 时,不要替换或意外暴露主机管理员 SSH 监听器。创建初始所有者后,关闭安装/设置访问权限。

  • 启动应用前检查持久卷所有权。
  • 使用仅限于 forge 数据库的数据库用户。
  • 将 CI 运行器置于单独的信任边界,尤其是针对不受信任的仓库。

验证克隆、推送和被拒绝的操作

创建一个一次性私有仓库,并使用普通开发者账户测试其 HTTPS 或 SSH 克隆 URL。提交并推送一个无害文件,然后验证另一位获授权的读取者能够获取它。未受邀账户必须无法读取该私有仓库。检查大文件处理和通知邮件(如已启用)。对于仅用于部署的机器,测试只读密钥能够获取但不能推送;仅认证成功并不能证明预期的权限边界。

# Use the disposable repository URL advertised by your forge:
git clone ssh://[email protected]:2222/team/check.git
# In a clone, inspect which remote is configured:
git remote -v

恢复讨论以及代码仓库

进行一致的应用/数据库备份、仓库存储、附件、LFS 数据、配置和所需的加密密钥。遵循已安装 forge 版本的备份流程;Gitea 备份命令并非自动与每个 Forgejo 版本通用。在隔离环境中重建并验证问题、附件、登录和克隆。如果迁移后推送失败,请先检查 SSH 主机/端口、密钥映射、存储权限和公布的克隆 URL,然后再全局更改仓库权限。

配置您的基础设施

掌控一切。
按你的条件部署。

无需身份文件。完整管理员权限。原生加密货币计费。