Hotdry.
systems-engineering

你其实已经拥有了一个Git服务器:私有化部署的完整实战指南

从GitHub宕机事件出发,深度解析自建Git服务器的技术选型、部署实践与成本效益,帮助团队实现代码资产完全自主可控。

你其实已经拥有了一个 Git 服务器:私有化部署的完整实战指南

前言:当 GitHub 再次 "抽风" 时

上个月 GitHub 再次出现大面积宕机,许多团队的开发工作被迫中断。我和几个技术负责人在群里讨论时,突然意识到一个被忽视的事实:我们其实早就拥有了一个 Git 服务器,只是没想到可以这样利用它

这次宕机事件让我重新审视了代码托管的技术路径。当我们习惯了 GitHub、Gitee 的便利时,却忘记了一个朴素的真理:真正的可控,是能够完全掌控自己的代码基础设施

技术选型:从裸 Git 到企业级解决方案

方案一:纯 Git - 最简单的起点

如果你的团队只有 3-5 个人,代码仓库不超过 20 个,纯 Git 方案完全够用:

# 1. 创建git用户
sudo adduser git -s /usr/bin/git-shell

# 2. 初始化仓库
sudo mkdir -p /srv/git
sudo chown -R git:git /srv/git
cd /srv/git
sudo -u git git init --bare team-project.git

# 3. 配置SSH密钥
sudo -u git mkdir -p /home/git/.ssh
sudo -u git touch /home/git/.ssh/authorized_keys

这种方式的优势是零运维成本,劣势是功能简单,需要开发者熟悉 Git 命令。

方案二:Gitea - 小团队的理想选择

Gitea 是我最推荐的小团队方案。它的资源占用极低(1GB 内存即可),功能完整度却能满足大部分需求。

# Docker一键部署
docker run -d \
  --name gitea \
  -p 3000:3000 \
  -p 2222:22 \
  -v gitea:/data \
  gitea/gitea:latest

核心优势包括:

  • 轻量级:1 核 1G 内存就能流畅运行
  • 功能完整:支持 PR、Issue、Wiki、Webhook
  • 部署简单:15 分钟完成全套部署
  • 跨平台:Linux、Windows、ARM 通吃

方案三:GitLab - 成熟的企业级方案

对于 20 人以上的团队,GitLab 提供了更丰富的企业级功能:

# 一键安装(Ubuntu)
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash
sudo EXTERNAL_URL="https://git.yourcompany.com" apt-get install gitlab-jh

GitLab 的DevOps 平台特性,使其不仅是一个 Git 服务器,更是完整的开发协作平台。

实战部署:基于 Gitea 的完整方案

第一步:环境准备

# Ubuntu 20.04 基础环境
sudo apt update
sudo apt install -y git docker.io docker-compose

# 配置防火墙
sudo ufw allow 22/tcp
sudo ufw allow 3000/tcp
sudo ufw enable

第二步:数据持久化

# docker-compose.yml
version: '3'
services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: unless-stopped
    environment:
      - USER_UID=1000
      - USER_GID=1000
    volumes:
      - ./data:/data
    ports:
      - "3000:3000"
      - "2222:22"

第三步:安全加固

# 1. 禁用git用户shell登录
sudo usermod -s /usr/bin/git-shell git

# 2. 配置SSH密钥管理
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..." >> /home/git/.ssh/authorized_keys

# 3. 定期备份脚本
#!/bin/bash
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
cp -r /var/lib/gitea/data $BACKUP_DIR/
tar -czf $BACKUP_DIR.tar.gz $BACKUP_DIR
find /backup -type f -mtime +7 -delete

第四步:访问配置

启动服务后,访问 http://your-server:3000 进行初始化:

  1. 数据库选择:SQLite(测试)或 PostgreSQL(生产)
  2. 基础路径:保持默认 /
  3. 域名配置:设置真实域名以启用 HTTPS
  4. 管理员账户:创建第一个管理员账户

安全最佳实践

SSH 密钥管理

# 生成密钥对
ssh-keygen -t ed25519 -C "your.email@company.com"

# 添加到Git服务器
cat ~/.ssh/id_ed25519.pub
# 复制到Git服务器的 authorized_keys

访问控制

# /etc/ssh/sshd_config 关键配置
Port 2222
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

定期维护

# 每周自动备份
0 2 * * 0 /opt/backup-gitea.sh

# Git版本更新检查
apt list --upgradable | grep git

成本效益分析

让我分享一个真实的案例。某政务平台团队有 15 人,原来使用 GitHub 企业版:

GitHub 企业版成本

  • 年费用:12 万元(团队 15 人 × 8000 元 / 人)
  • 带宽限制:总推送速度受限
  • 合规风险:数据存储在境外

自建 GitLab 成本

  • 服务器:4 核 8G 云主机 × 3 台 = 年 2.4 万元
  • 电力和维护:年 1 万元
  • 总成本:3.4 万元

ROI 分析

  • 年节省费用:8.6 万元
  • 合规风险降低:100%
  • 性能提升:内网速度是 GitHub 的 5-10 倍

踩坑指南

常见问题及解决方案

  1. 权限错误

    # 通常是文件权限问题
    chown -R git:git /data/gitea/
    chmod -R 755 /data/gitea/
    
  2. 端口冲突

    # 检查端口占用
    netstat -tlnp | grep 3000
    # 修改docker-compose端口映射
    
  3. SSL 证书配置

    # 使用Let's Encrypt
    sudo certbot --nginx -d git.yourdomain.com
    
  4. 性能优化

    # Gitea配置优化
    [repository]
    MAX_FILE_SIZE = 100MiB
    MAX_FILES = 20
    
    [database]
    DB_TYPE = postgres
    

迁移策略

从 GitHub 迁移到自建服务器:

# 1. 克隆所有仓库
gh repo list --limit 1000 | while read repo; do
  git clone --mirror "$repo.git" "$repo"
done

# 2. 推送到新服务器
for repo in */; do
  cd "$repo"
  git remote set-url origin git@git.yourcompany.com:"${repo%.git}.git"
  git push --mirror
  cd ..
done

总结:掌控力就是生产力

自建 Git 服务器不是技术炫耀,而是对代码资产的完全掌控。从成本角度看,年节省 8-12 万的费用足以覆盖运维成本;从安全角度看,代码完全留在自己可控的环境中;从性能角度看,内网推送速度提升 5-10 倍。

更重要的是,当你拥有了可以完全控制的代码基础设施,很多创新就可以在这里试验。比如内部代码规范检查、自动化部署流程、安全审计工具,这些在第三方平台往往受限于成本或功能。

记住:代码托管不只是 Git 服务器,更是你工程文化的载体。当你能够完全掌控这个载体时,你就能更快地实践 DevOps 理念,更灵活地优化开发流程。

对于 20 人以下的团队,我建议从 Gitea 开始。对于更大规模的团队,GitLab 提供了完整的 DevOps 解决方案。无论选择哪种方案,都要记住:自主可控的代码基础设施,是数字化转型的坚实底座


参考资料:Gitea 官方文档、Git 服务器搭建指南、2025 年 Git 服务现状报告

查看归档