搭建Git服务器是企业或团队进行代码版本管理的重要实践,通过私有化部署可以确保代码安全性、自主可控性,并支持灵活的权限管理,本文将从准备工作、常见搭建方式(SSH直连、Gitolite、Gitea)、优缺点对比及安全配置等方面,详细介绍Git服务器的搭建流程。
搭建前的准备工作
-
服务器环境选择
推荐使用Linux发行版(如Ubuntu 20.04 LTS、CentOS 7+),确保系统稳定且软件生态丰富,服务器配置需根据团队规模调整:个人或小团队(1核2G内存、20G磁盘)即可满足需求;中大型团队建议2核4G内存、100G以上磁盘。 -
安装必要软件
更新系统软件包并安装Git:# Ubuntu/Debian sudo apt update && sudo apt install -y git openssh-server # CentOS/RHEL sudo yum update && sudo yum install -y git openssh-server
检查Git版本:
git --version
(建议2.0以上)。 -
创建专用Git用户
为安全起见,避免使用root用户运行Git服务,创建独立的git用户:sudo adduser --system --shell /bin/bash --group --home-dir /home/git git sudo passwd git # 设置密码(可选,SSH密钥认证时可不设)
搭建方式一:基于SSH的直连Git服务器(适合小团队)
创建裸仓库
裸仓库(Bare Repository)不包含工作目录,仅存储版本历史,适合作为服务器仓库。
sudo mkdir -p /srv/git # 创建仓库根目录 sudo chown -R git:git /srv/git # 设置所有者 sudo su - git # 切换到git用户 cd /srv/git git init --bare project.git # 创建裸仓库
配置SSH免密登录
客户端生成SSH密钥(若无):
ssh-keygen -t rsa -C "user@example.com" # 按回车使用默认路径
将客户端公钥(~/.ssh/id_rsa.pub
)上传至服务器,添加到git用户的SSH授权列表:
# 服务器端操作(git用户) mkdir -p ~/.ssh chmod 700 ~/.ssh cat /path/to/client/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
客户端使用
客户端克隆仓库:
git clone git@server_ip:/srv/git/project.git
推送代码时,需配置用户名和邮箱(首次使用):
git config --global user.name "Your Name" git config --global user.email "your@email.com"
优缺点
- 优点:无需额外工具,配置简单,适合个人或5人以下小团队。
- 缺点:权限控制粗略(仅支持用户级访问,无法细分仓库读写权限),无Web界面,管理不便。
搭建方式二:使用Gitolite实现细粒度权限管理(适合中小团队)
Gitolite通过配置文件管理用户权限,支持读写、只读、禁止等操作控制,适合需要精细化权限的场景。
安装Gitolite
服务器端(git用户)操作:
# 安装依赖 sudo apt install -y git-core # 下载Gitolite cd ~ git clone https://github.com/sitaramc/gitolite mkdir -p ~/bin git clone https://github.com/sitaramc/gitolite.git ~/bin/gitolite # 初始化Gitolite(需管理员公钥,假设为admin.pub) gl-setup admin.pub
初始化后会自动创建~/repositories
目录(存放所有仓库)并生成配置文件~/.gitolite/conf/gitolite.conf
。
添加用户与配置权限
-
添加用户:收集用户公钥(如
user1.pub
、user2.pub
),通过以下命令添加:gl-admin add-key user1 < user1.pub gl-admin add-key user2 < user2.pub
-
配置权限:编辑
~/.gitolite/conf/gitolite.conf
,示例:repo project1 RW+ = admin # admin拥有读写+推送权限 RW = user1 # user1拥有读写权限 R = user2 # user2拥有只读权限 repo project2 RW+ = admin user1 DENY = user2 # user2禁止访问
-
推送配置:管理员本地克隆Gitolite配置仓库并推送:
git clone git@server:gitolite-admin # 编辑conf/gitolite.conf后 git add . && git commit -m "update permissions" && git push
用户操作
用户克隆仓库时需指定管理员配置的仓库名:
git clone git@server:project1
Gitolite权限符号说明
符号 | 权限说明 | 支持操作 |
---|---|---|
R | 只读 | 克隆、查看历史 |
RW | 读写 | 克隆、提交、推送 |
RW+ | 读写+推送管理 | 推送、强制推送、删除分支 |
禁止 | 无访问权限 |
优缺点
- 优点:细粒度权限控制,支持分支/标签级权限,适合10-50人团队。
- 缺点:无Web界面,需通过命令行管理,配置相对复杂。
搭建方式三:使用Gitea搭建带Web界面的Git服务(适合中大型团队)
Gitea是轻量级Git服务,提供Web界面、问题跟踪、Wiki、CI/CD集成等功能,类似GitHub/GitLab,适合需要完整协作体验的团队。
安装依赖与Gitea
- 安装依赖(以Ubuntu为例):
sudo apt install -y git mysql-server # MySQL可选,SQLite也可用
- 下载Gitea:从官网下载最新二进制包(如
gitea-linux-amd64
):wget https://dl.gitea.io/gitea/1.21.1/gitea-1.21.1-linux-amd64 sudo mv gitea-1.21.1-linux-amd64 /usr/local/bin/gitea sudo chmod +x /usr/local/bin/gitea
- 创建系统用户:
sudo adduser --system --shell /bin/bash --group --home-dir /var/lib/gitea git
配置Systemd服务
创建服务文件/etc/systemd/system/gitea.service
:
[Unit] Description=Gitea (Git with a cup of tea) After=syslog.target network.target mysql.service # 若用MySQL需添加 [Service] # Run as user `git` User=git Group=git WorkingDirectory=/var/lib/gitea ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini Restart=always Environment=USER=git HOME=/var/lib/gitea [Install] WantedBy=multi-user.target
启动服务并设置开机自启:
sudo systemctl daemon-reload sudo systemctl start gitea sudo systemctl enable gitea
初始化Web配置
访问http://server_ip:3000
,进入Web安装界面:
- 数据库配置:选择SQLite(简单)或MySQL(推荐生产环境使用);
- 应用名称:设置团队名称(如“Team Git Server”);
- 管理员账户:创建管理员用户名、密码、邮箱;
- SSH/HTTP端口:默认SSH端口22、HTTP端口3000,若冲突可修改。
配置Nginx反向代理(可选)
生产环境建议通过Nginx代理HTTP/HTTPS,提升安全性和性能,安装Nginx:
sudo apt install -y nginx
创建站点配置/etc/nginx/sites-available/gitea
:
server { listen 80; server_name git.example.com; # 替换为你的域名 location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
启用站点并重启Nginx:
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl restart nginx
Gitea系统要求(推荐配置)
组件 | 最低配置 | 推荐配置 |
---|---|---|
CPU | 1核 | 2核+ |
内存 | 512MB | 2GB+ |
磁盘 | 5GB | 50GB+(含仓库数据) |
操作系统 | Ubuntu 18.04+/CentOS 7+ | Ubuntu 20.04+/CentOS 8+ |
优缺点
- 优点:Web界面友好,支持协作功能(Issues、Pull Request、Wiki),可扩展性强(插件支持)。
- 缺点:资源占用较高(需运行Web服务),需维护数据库和SSL证书。
搭建方式对比与选择
搭建方式 | 适用场景 | 权限控制 | Web界面 | 资源占用 | 学习成本 |
---|---|---|---|---|---|
SSH直连 | 个人/5人以下小团队 | 粗略 | 无 | 低 | 低 |
Gitolite | 10-50人中小团队 | 细粒度 | 无 | 低 | 中 |
Gitea | 50人以上中大型团队 | 细粒度 | 有 | 中高 | 中 |
FAQs
搭建Git服务器需要什么硬件配置?
解答:硬件需求取决于团队规模和使用方式:
- 个人/小团队(SSH直连):1核CPU、1GB内存、20GB磁盘即可满足日常开发需求;
- 中小团队(Gitolite):1核2G内存、50GB磁盘,可支持10-50人并发访问;
- 中大型团队(Gitea):推荐2核4G内存、100GB SSD磁盘,确保Web界面和仓库访问流畅,同时预留数据库增长空间。
如何确保Git服务器的安全性?
解答:安全性是私有Git服务器的核心,需从以下方面加固:
- 系统安全:定期更新系统补丁,禁用root远程登录(仅允许git用户),配置防火墙(仅开放SSH 22、HTTP 80/HTTPS 443端口);
- 认证安全:禁用SSH密码登录(仅使用密钥认证),为Gitea配置HTTPS(通过Let’s Encrypt免费证书);
- 权限控制:遵循最小权限原则,Gitolite/Gitea中按需分配用户权限,避免所有用户拥有管理员权限;
- 数据备份:定期备份仓库数据(如
/srv/git
或/var/lib/gitea/repositories
),可结合rsync或云存储实现异地备份; - 日志监控:开启系统日志(
/var/log/auth.log
)和Git服务日志,定期检查异常登录(如多次失败SSH尝试)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/39186.html