TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:
TOP云总站云服务器:https://topyun.vip/server/buy.html
TOP云C站云服务器:https://c.topyun.vip/cart
在云服务器上搭建 Git私有仓库 是团队协作开发的常见需求,以下是详细步骤(支持HTTP/HTTPS和SSH访问),涵盖从环境准备到安全配置的全流程:
一、准备工作
1. 云服务器要求
系统:Linux(Ubuntu/CentOS推荐)。
网络:确保服务器有公网IP(国内需备案,海外无需备案)。
用户权限:建议使用非root用户(如git用户)操作,提升安全性。
2. 安装Git
Ubuntu/Debian:
sudo apt update && sudo apt install -y git
CentOS/RHEL:
sudo yum install -y git
二、创建Git专用用户
1. 新建用户
sudo adduser git
设置密码(或使用SSH密钥认证,推荐后者)。
2. 禁止登录Shell(可选但安全)
修改git用户的Shell为/usr/bin/git-shell(仅允许Git操作):
sudo usermod -s /usr/bin/git-shell git
测试登录:
su - git # 会直接进入Git命令行,无法执行普通Shell命令
三、创建裸仓库(Bare Repository)
裸仓库是Git服务器的标准存储形式,不包含工作区文件。
sudo -u git mkdir -p /home/git/repos
sudo -u git git init --bare /home/git/repos/myproject.git
sudo chown -R git:git /home/git/repos
--bare:创建裸仓库(无工作目录)。
路径可自定义(如/opt/git)。
四、配置访问方式
方案1:SSH访问(推荐)
1. 客户端生成SSH密钥
在开发者本地机器执行:
ssh-keygen -t ed25519 -C "your_email@example.com"
将公钥(~/.ssh/id_ed25519.pub)发送给服务器管理员。
2. 服务器添加公钥到git用户
登录服务器,编辑git用户的authorized_keys:
sudo mkdir -p /home/git/.ssh
sudo nano /home/git/.ssh/authorized_keys将客户端的公钥内容粘贴到文件中,保存退出。
3. 客户端克隆仓库
使用SSH协议克隆:
git clone git@你的服务器IP:/home/git/repos/myproject.git
如果服务器IP是1.2.3.4,命令为:
git clone git@1.2.3.4:/home/git/repos/myproject.git
方案2:HTTP/HTTPS访问(适合Web界面操作)
1. 安装Web服务器(Nginx/Apache)
Nginx示例:
sudo apt install -y nginx # Ubuntu/Debian
sudo yum install -y nginx # CentOS/RHEL
2. 配置Git HTTP服务
创建Git的HTTP访问目录:
sudo -u git mkdir -p /var/www/git
将裸仓库复制到HTTP目录(或直接创建):
sudo cp -r /home/git/repos/myproject.git /var/www/git/
sudo chown -R git:git /var/www/git配置Nginx:
sudo nano /etc/nginx/sites-available/git
添加以下内容(替换yourdomain.com为你的域名或IP):
server { listen 80; server_name yourdomain.com; # 或服务器IP location / { root /var/www/git; autoindex on; # 可选:显示目录列表 } }
启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/git /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
3. 客户端克隆仓库
使用HTTP协议克隆:
git clone http://你的服务器IP/myproject.git
如果启用HTTPS(需配置SSL证书),使用https://。
五、安全加固
1. 防火墙开放端口
SSH(默认22):
sudo ufw allow 22/tcp # Ubuntu
sudo firewall-cmd --add-port=22/tcp --permanent # CentOSHTTP/HTTPS(80/443):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp启用防火墙:
sudo ufw enable
2. 禁用密码登录(仅SSH密钥)
编辑SSH配置:
sudo nano /etc/ssh/sshd_config
修改以下参数:
PasswordAuthentication no PubkeyAuthentication yes
重启SSH:
sudo systemctl restart sshd
3. 限制用户权限
确保git用户只能访问仓库目录:
sudo chmod -R 750 /home/git/repos
六、高级配置(可选)
1. 使用GitLab CE(全功能私有仓库)
如果需要Web界面、Issue跟踪、CI/CD等,可安装GitLab Community Edition:
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash sudo apt install -y gitlab-ce
按向导配置(需数据库和更多资源)。
2. 使用Gitea(轻量级替代)
安装Gitea(类似GitHub的轻量工具):
wget -O gitea https://dl.gitea.io/gitea/1.21/gitea-1.21-linux-amd64 chmod +x gitea ./gitea web
配置Nginx反向代理指向Gitea。
七、测试与验证
SSH访问测试:
客户端执行:
ssh -T git@你的服务器IP
应返回欢迎信息(无密码提示)。
HTTP访问测试:
浏览器访问 http://你的服务器IP/myproject.git,应能看到Git仓库目录结构。
克隆测试:
客户端执行:
git clone git@你的服务器IP:/home/git/repos/myproject.git
或:
git clone http://你的服务器IP/myproject.git
八、常见问题
1. SSH连接失败
错误:Permission denied (publickey)。
原因:客户端公钥未添加到服务器的authorized_keys。
解决:检查/home/git/.ssh/authorized_keys文件内容。
2. HTTP克隆失败
错误:Repository not found。
原因:Nginx未正确配置或仓库路径错误。
解决:检查Nginx的root指令和仓库是否存在。
3. 防火墙阻止访问
错误:连接超时。
解决:检查防火墙规则(sudo ufw status)。
4. 权限不足
错误:fatal: could not read Username。
原因:HTTP访问时未配置认证(如Basic Auth)。
解决:在Nginx中添加认证:
location / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; }
生成密码文件:
sudo htpasswd -c /etc/nginx/.htpasswd username
九、总结
方案 | 适用场景 | 访问方式 | 安全性 |
---|---|---|---|
SSH裸仓库 | 开发者直接推送/拉取代码 | git@server:/path | ⭐⭐⭐⭐⭐(密钥认证) |
HTTP/HTTPS裸仓库 | 需要Web界面或简单协作 | http://server/path | ⭐⭐⭐(需防火墙+HTTPS) |
GitLab/Gitea | 需要完整管理界面(Issue/CI/CD) | Web或SSH | ⭐⭐⭐⭐(内置权限) |
推荐选择:
小团队/快速搭建:SSH裸仓库(最简单安全)。
需要Web界面:GitLab CE 或 Gitea。
仅HTTP访问:裸仓库 + Nginx(需配置HTTPS)。