在Ubuntu系统上搭建Git服务器是企业级和个人项目中常用的版本控制解决方案,本文将详细介绍从环境准备到服务配置、安全设置及日常使用的完整流程,整个过程基于Ubuntu 20.04/22.04系统,通过Gitosis或GitLab两种主流方式实现,兼顾轻量级与功能丰富性需求。

环境准备与基础安装
首先更新系统并安装必要的软件包,打开终端执行以下命令:
sudo apt update && sudo apt upgrade -y sudo apt install -y git openssh-server python3-pip
创建一个专用用户运行Git服务,增强安全性:
sudo adduser --system --shell /bin/bash --group git
配置SSH服务确保远程访问安全,编辑/etc/ssh/sshd_config文件,确保以下配置生效:
Port 22
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
重启SSH服务使配置生效:sudo systemctl restart sshd。

使用Gitosis搭建轻量级Git服务器
Gitosis通过管理公钥实现多用户访问控制,适合中小型团队,首先安装Python依赖:
sudo pip3 install gitosis
初始化Gitosis仓库,在本地机器生成SSH密钥(若无):
ssh-keygen -t rsa -b 4096
将公钥上传至服务器:
scp ~/.ssh/id_rsa.pub user@server:/tmp/
在服务器上初始化Gitosis:

sudo -u git gitosis-init < /tmp/id_rsa.pub
设置仓库目录权限:
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
克隆管理仓库到本地:
git clone git@server:gitosis-admin.git
编辑gitosis.conf文件添加新用户和仓库,
[group team]
writable = project1
members = user1@example.com user2@example.com
提交配置后推送到服务器,新仓库即可通过git clone git@server:project1.git访问。
使用GitLab搭建功能完整的Git服务器
GitLab提供Web界面、问题跟踪、CI/CD等企业级功能,更适合复杂项目管理,添加GitLab官方源并安装:
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash sudo apt install -y gitlab-ce
配置 external_url 为服务器域名或IP,编辑/etc/gitlab/gitlab.rb:
external_url 'http://gitlab.example.com'
重新配置GitLab:
sudo gitlab-ctl reconfigure
首次访问需设置管理员密码(默认账号root),Web界面位于http://server-ip,创建项目时支持选择初始化模板,可通过SSH或HTTPS协议克隆,HTTPS需配置域名证书。
安全配置与日常维护
无论采用哪种方式,安全配置都是重点,以下是关键安全措施:
- 防火墙设置:仅开放必要端口,如SSH(22)和HTTP(80)
sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw enable
- 定期备份:GitLab可通过
gitlab-backup工具备份,Gitosis需手动备份/home/git目录 - 日志监控:检查
/var/log/gitlab(GitLab)或/var/log/auth.log(Gitosis)的异常访问
常见操作示例
以下表格总结了日常运维中的常用操作:
| 操作场景 | Gitosis命令 | GitLab操作 |
|---|---|---|
| 创建新仓库 | 编辑gitosis.conf添加[group]和writable | Web界面→Projects→New Project |
| 添加用户 | 收集公钥加入members列表 | Admin Area→Users→New User |
| 修改权限 | 编辑gitosis.conf更新members | 项目Settings→Members |
| 删除仓库 | 从gitosis.conf移除writable条目 | 项目Settings→Delete Project |
| 查看日志 | /var/log/auth.log | Admin Area→Audit Events |
相关问答FAQs
Q1: 如何解决Gitosis推送时"Permission denied (publickey)"错误?
A: 该问题通常由SSH公钥配置错误导致,需检查:①服务器~/.ssh/authorized_keys是否正确包含用户公钥;②Gitosis初始化时是否使用了正确的管理员公钥;③本地.ssh/config中主机配置是否指向服务器IP/域名,可通过ssh -vT git@server查看详细连接日志定位问题。
Q2: GitLab服务启动失败如何排查?
A: 首先检查sudo gitlab-ctl status查看各组件状态,常见解决步骤:①运行sudo gitlab-rake gitlab:check进行全面检查;②查看/var/log/gitlab/gitlab-rails/production.log定位具体错误;③确保服务器内存和磁盘空间充足(GitLab至少需4GB内存);④如配置文件修改过,执行sudo gitlab-ctl reconfigure重载配置,若仍无法解决,可查阅GitLab官方故障排查文档或提交issue。
