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  # CentOS
  • HTTP/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。


七、测试与验证

  1. SSH访问测试

    • 客户端执行:

      ssh -T git@你的服务器IP
    • 应返回欢迎信息(无密码提示)。

  2. HTTP访问测试

    • 浏览器访问 http://你的服务器IP/myproject.git,应能看到Git仓库目录结构。

  3. 克隆测试

    • 客户端执行:

      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)。


不容错过
Powered By TOPYUN 云产品资讯