我将为您提供三种最主流的方法,从最简单到功能最全面,您可以根据自己的需求选择。
方法一:基于 SSH 的基础 Git 服务器(最简单、最快速)
这种方法最适合小型团队或个人项目,它利用现有的 SSH 服务器进行认证和传输,无需额外安装其他服务。
确保你的系统上已经安装了git
和openssh-server
。
对于 Ubuntu/Debian sudo apt update sudo apt install git openssh-server 对于 CentOS/RHEL/Fedora sudo yum install git openssh-server # 或者使用 dnf
为了安全和管理方便,我们创建一个名为git
的专门用户来管理所有仓库。
sudo adduser git 按照提示设置密码(后续可通过SSH密钥登录,密码可不常用)
步骤 3:在客户端生成 SSH 密钥对并上传
在你的本地开发电脑上(不是服务器),如果你还没有 SSH 密钥,请生成一对:
ssh-keygen -t ed25519 -C "your_email@example.com" 或者使用传统的 RSA 算法 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
一路回车,将在~/.ssh/
目录下生成id_ed25519
(私钥)和id_ed25519.pub
(公钥)两个文件。
将公钥上传到服务器:
将本地生成的~/.ssh/id_ed25519.pub
文件内容,添加到服务器上git
用户的~/.ssh/authorized_keys
文件中。
你可以用任何方式完成,
1、 使用ssh-copy-id
命令(最简单):
ssh-copy-id git@你的服务器IP
2、 手动复制粘贴:
- 在本地执行cat ~/.ssh/id_ed25519.pub
,复制输出内容。
- 登录服务器:ssh git@你的服务器IP
。
- 在服务器上,确保~/.ssh
目录存在:mkdir -p ~/.ssh
。
- 编辑文件:vim ~/.ssh/authorized_keys
,将复制的内容粘贴进去,保存退出。
步骤 4:在服务器上初始化一个裸仓库(Bare Repository)
现在回到服务器上,以git
用户身份操作。
切换到 git 用户 sudo su - git 创建一个用于存放所有仓库的目录 mkdir my-project.git 进入该目录并初始化一个裸仓库 裸仓库没有工作区,专门用于共享和推送代码,通常以 .git cd my-project.git git init --bare
初始化成功后,你会看到类似Initialized empty Git repository in /home/git/my-project.git/
的提示。
在你的本地机器上,你就可以像使用任何 Git 仓库一样进行操作了:
克隆仓库 git clone git@你的服务器IP:/home/git/my-project.git 进入仓库目录,添加文件,提交,然后推送 cd my-project touch README.md git add README.md git commit -m "add README" git push origin main
至此,一个最基础的 Git 服务器已经搭建完成!
优点:极其简单、安全(基于 SSH)、无需额外进程。
缺点:用户管理麻烦(需要手动管理所有用户的公钥到authorized_keys
文件)、缺少 Web 界面和权限控制。
方法二:使用 Gitolite(推荐用于小型团队)
如果你需要更精细的权限控制(谁可以读/写某个项目),Gitolite 是完美的选择,它依然基于 SSH,但提供了强大的访问控制规则。
安装和配置 Gitolite 的步骤稍多,但绝对是值得的,由于其配置过程需要一定篇幅,建议您参考其官方文档或搜索专门的教程。
大致流程:
1、 在服务器上创建git
用户。
2、 将一个特殊的“管理员”SSH 公钥添加到git
用户的authorized_keys
中。
3、 使用这个“管理员”私钥在本地电脑上克隆 Gitolite 的管理仓库。
4、 通过在这个管理仓库中修改配置文件来添加新用户、新仓库和设置权限。
5、 推送配置更新,Gitolite 会自动生效。
优点:强大的分支/用户权限控制、依然轻量。
缺点:没有 Web 界面,配置通过 Git 仓库进行,有一定学习成本。
如果你需要一个类似 GitHub 或 Gitea 的完整 DevOps 平台,包括 Web 界面、Issue、MR、CI/CD 等全套功能,GitLab 是企业级的选择。
1. 安装依赖
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
2. 添加 GitLab 包仓库并安装
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
3. 安装 GitLab
将http://你的域名或IP
替换为你打算访问 GitLab 的地址。
这一步会自动配置并启动所有服务(Nginx, PostgreSQL, Redis, Sidekiq, Puma等)。
sudo EXTERNAL_URL="http://your-server-ip-or-domain" apt-get install gitlab-ee
安装完成后,访问你设置的EXTERNAL_URL
,首次访问会强制你为root
用户设置密码,设置完成后,你就可以用root
和新密码登录,开始使用了。
优点:功能极其强大,一站式DevOps平台,图形化界面易于管理。
缺点:资源消耗大(需要至少 4GB 内存),安装和维护相对复杂。
特性 | 基础 SSH | Gitolite | GitLab |
难度 | 非常简单 | 中等 | 较复杂 |
用户/权限管理 | 手动,非常弱 | 非常强大 | 强大且图形化 |
Web 界面 | 无 | 无 | 有,功能完整 |
资源占用 | 极低 | 低 | 高(≥4G RAM) |
适用场景 | 个人、极小型团队 | 中小型团队,需要精细权限 | 企业、大型团队,需要全套工具 |
给新手的建议:
直接从方法一(基础SSH) 开始,它能让你最快地理解 Git 远程仓库的工作原理,当你觉得手动管理密钥和权限太麻烦时,再逐步升级到Gitolite 或GitLab。
安全提示:
确保服务器的 SSH 端口(默认为 22)安全,最好使用密钥认证并禁用密码登录。
定期更新系统和安装的软件包。
文章摘自:https://idc.huochengrm.cn/fwq/13999.html
评论