你其实已经拥有了一个 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 进行初始化:
- 数据库选择:SQLite(测试)或 PostgreSQL(生产)
- 基础路径:保持默认
/ - 域名配置:设置真实域名以启用 HTTPS
- 管理员账户:创建第一个管理员账户
安全最佳实践
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 倍
踩坑指南
常见问题及解决方案
-
权限错误
# 通常是文件权限问题 chown -R git:git /data/gitea/ chmod -R 755 /data/gitea/ -
端口冲突
# 检查端口占用 netstat -tlnp | grep 3000 # 修改docker-compose端口映射 -
SSL 证书配置
# 使用Let's Encrypt sudo certbot --nginx -d git.yourdomain.com -
性能优化
# 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 服务现状报告