---
canonical: https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/
language: zh
generated: 2026-10-21T13:34:54.966Z
---

[首页](https://koalavps.com/zh/) / [探索](https://koalavps.com/zh/resources/) /  KoalaVPS 现场笔记

KoalaVPS 现场笔记

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

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

[找到你的 VPS](https://koalavps.com/zh/vps/)

## 本文档内容

[选择协作层](https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/#section-1)[将构建与代码托管分离](https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/#section-2)[保护访问与注册](https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/#section-3)[备份完整服务](https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/#section-4)[锻造恢复检查清单](https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/#section-5)[保持部署权限范围狭窄](https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/#section-6)[使用最合适的协作服务](https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/#section-7)[分离 Web、SSH 和数据库路径](https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/#section-8)[验证克隆、推送和被拒绝的操作](https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/#section-9)[恢复讨论以及代码仓库](https://koalavps.com/zh/guides-self-host-git-server-on-a-vps/#section-10)[知识库](https://koalavps.com/zh/resources/)

## 选择协作层

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

## 将构建与代码托管分离

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

## 保护访问与注册

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

## 备份完整服务

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

## 锻造恢复检查清单

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

## 保持部署权限范围狭窄

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

## 使用最合适的协作服务

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

- 选择一个规范的 HTTPS 名称并保护其 DNS 账户。

- 决定注册是关闭、邀请制还是审核制。

- 为 forge 服务分配非特权身份和持久私有存储。

官方文档：[Forgejo 容器安装](https://forgejo.org/docs/latest/admin/installation/docker/)

## 分离 Web、SSH 和数据库路径

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

- 启动应用前检查持久卷所有权。

- 使用仅限于 forge 数据库的数据库用户。

- 将 CI 运行器置于单独的信任边界，尤其是针对不受信任的仓库。

官方文档：[Forgejo Docker 网络与持久化](https://forgejo.org/docs/latest/admin/installation/docker/)

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

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

```
# Use the disposable repository URL advertised by your forge:
git clone ssh://git@git.example.com:2222/team/check.git
# In a clone, inspect which remote is configured:
git remote -v
```

## 恢复讨论以及代码仓库

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

官方文档：[Gitea 备份与恢复](https://docs.gitea.com/administration/backup-and-restore/)

继续探索

## 继续阅读。

[使用场景 ### 带维护计划的自托管。 服务器可以让您的工具具备可移植性和可定制性。当更新、备份和恢复成为设计的一部分时，这种优势才能持久。…](https://koalavps.com/zh/self-hosting/)[指南 ### 备份的价值在于能否恢复。 围绕无法重建的数据以及服务可承受的丢失时间来设计备份。上传成功只是开始。…](https://koalavps.com/zh/backups/)[指南 ### 让机器始终属于你。 安全是一项持续的日常工作：减少暴露面、限制权限、谨慎打补丁，并确保可以恢复。…](https://koalavps.com/zh/server-security/)

配置您的基础设施

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

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

[选择配置](https://koalavps.com/zh/vps/)
