- 使用
gitolite:这是最经典、功能最丰富的方式,适合需要精细权限控制(如每个仓库、每个用户的读写/只读权限)的场景,它通过一个特殊的git用户和 SSH 连接来工作。 - 使用
Gitea:这是一个现代化的、轻量级的 Git 服务程序,类似于 GitHub/GitLab 的轻量版,它有 Web 界面,方便用户和仓库管理,非常适合个人或小团队使用。
使用 gitolite(经典、功能强大)
这种方法的核心是利用 SSH 的公钥认证来管理用户和权限。

第 1 步:安装 Git 和创建 git 用户
确保你的 Ubuntu 系统已经更新,并安装了 Git。
# 更新软件包列表 sudo apt update # 安装 git sudo apt install git -y # 创建一个专门的 'git' 用户来管理仓库 sudo adduser --system --shell /bin/bash --group --home /home/git git
第 2 步:在管理员的机器上生成 SSH 密钥
这一步非常重要! 你需要在你自己的电脑(比如你的 macOS 或 Windows 笔记本)上操作,而不是在服务器上。
-
检查你是否已经有 SSH 密钥:
ls -al ~/.ssh
如果看到
id_rsa和id_rsa.pub文件,说明你已经有了,如果没有,请执行下一步。
(图片来源网络,侵删) -
生成新的 SSH 密钥(一路按回车即可):
ssh-keygen -t rsa -b 4096
-
将你的公钥 (
id_rsa.pub) 复制到服务器的/tmp目录下,并命名为admin.pub,你可以使用scp命令:# 将你的公钥从本地电脑上传到服务器的 /tmp 目录 # 将 user@your_local_machine 替换为你的用户名和主机名/IP # 将 server_ip 替换为你的服务器 IP 地址 scp ~/.ssh/id_rsa.pub user@server_ip:/tmp/admin.pub
第 3 步:在服务器上安装 gitolite
切换到服务器上进行操作。
-
登录到你的服务器(如果还没登录的话)。
(图片来源网络,侵删) -
以
git用户身份登录,并设置其环境变量:sudo su - git # 设置 git 的用户名和邮箱(可选,但推荐) git config --global user.name "Your Name" git config --global user.email "your.email@example.com"
-
安装
gitolite:# 克隆 gitolite 的代码仓库 git clone https://github.com/sitaramc/gitolite # 进入 gitolite 目录 cd gitolite # 执行安装脚本 ./install -ln
这会在
/home/git目录下设置好gitolite的环境。 -
用你刚才上传的
admin.pub来初始化gitolite:# 回到 git 用户的家目录 cd ~ # 使用 gl-setup 来初始化,它会读取 /tmp/admin.pub 文件 # gl-setup 会打开一个编辑器,让你修改配置文件 gitolite.conf # 如果你不熟悉,直接保存退出即可(按 :wq) gl-setup /tmp/admin.pub
执行成功后,你的公钥会被重命名为
admin.pub并存放在~/.ssh/authorized_keys中,gitolite的管理仓库gitolite-admin也会被自动创建。
第 4 步:管理仓库和用户
gitolite 的管理方式非常巧妙:它通过管理一个特殊的仓库 gitolite-admin 来管理所有其他的仓库。
-
在你的管理员电脑上克隆
gitolite-admin仓库:# 退出服务器登录 exit # 在你的本地电脑上,克隆管理仓库 # 注意:git@server_ip 是通过 SSH 连接的,使用的是你在服务器上创建的 git 用户 git clone git@server_ip:gitolite-admin
-
配置仓库和权限:
- 进入
gitolite-admin目录,你会看到两个文件夹:conf和keydir。 keydir:存放所有用户的公钥,文件名就是用户名(alice.pub,bob.pub),你需要把新用户的公钥文件放在这里。conf:存放gitolite.conf文件,这是权限配置的核心。
打开
conf/gitolite.conf,你可以这样定义仓库和权限:repo testing RW+ = alice # alice 对 testing 仓库有读写和删除权限 R = bob # bob 对 testing 仓库有只读权限 repo project-alpha RW+ = @all # 所有用户都有读写和删除权限RW+= 读写 + 推送删除分支/标签的权限RW= 读写权限R= 只读权限@all代表所有已知的用户
- 进入
-
提交并推送配置:
cd gitolite-admin # 修改 conf/gitolite.conf 或添加了新的公钥后 git add . git commit -m "Add testing repo and bob user" git push
一旦你
push到服务器,gitolite会自动在服务器上创建相应的仓库,并根据你的gitolite.conf文件更新权限。
第 5 步:用户如何使用
其他用户(如 alice)需要做的是:
- 生成自己的 SSH 密钥。
- 将自己的公钥文件(
alice.pub)发给管理员。 - 管理员将
alice.pub放入gitolite-admin/keydir/目录,并更新gitolite.conf(比如给alice某个仓库的权限),push。 - 之后,
alice就可以通过 SSH 克隆和操作仓库了:# alice 在自己的电脑上 git clone git@server_ip:testing
使用 Gitea(现代化、带 Web 界面)
Gitea 是一个独立的二进制文件,安装和配置都非常简单,并且提供了漂亮的 Web 界面。
第 1 步:安装必要的依赖
# 更新软件包列表 sudo apt update # 安装 git 和其他依赖 sudo apt install git -y # 安装用于构建 Gitea 的工具(如果下载预编译包则不需要) sudo apt install install golang-go -y
第 2 步:创建 git 用户
和 gitolite 一样,我们使用一个专门的 git 用户来运行 Gitea。
sudo adduser --system --shell /bin/bash --group --home /home/git git
第 3 步:下载并安装 Gitea
- 去 Gitea 官网 的下载页面找到适合 Linux AMD64 的最新版本链接。
- 使用
wget下载到/tmp目录:# 替换下面的 URL 为最新的下载链接 wget -O /tmp/gitea https://dl.gitea.io/gitea/1.21.1/gitea-1.21.1-linux-amd64
- 将下载的二进制文件移动到
/usr/local/bin并赋予可执行权限:sudo mv /tmp/gitea /usr/local/bin/ sudo chmod +x /usr/local/bin/gitea
第 4 步:创建配置文件和数据目录
-
切换到
git用户:sudo su - git
-
创建 Gitea 的配置和数据目录:
mkdir -p /home/git/gitea/{custom,data,indexers,log,public} -
创建一个默认的
app.ini配置文件:/usr/local/bin/gitea web --install --custom-path /home/git/gitea/custom --config /home/git/gitea/custom/conf/app.ini
这条命令会生成一个配置文件在
/home/git/gitea/custom/conf/app.ini,你可以编辑这个文件来修改端口、数据库等设置,默认情况下,它会使用 SQLite 数据库,非常适合快速上手。
第 5 步:创建 Systemd 服务
为了让 Gitea 作为服务在后台运行,我们需要创建一个 systemd 服务文件。
-
退出
git用户,回到 root:exit
-
创建并编辑服务文件:
sudo nano /etc/systemd/system/gitea.service
-
粘贴进去:
[Unit] Description=Gitea (Git with a cup of tea) After=syslog.target network.target After=postgresql.service mysql.service mariadb.service Requires=postgresql.service mysql.service mariadb.service [Service] # Run Gitea under the 'git' user User=git Group=git # Start Gitea ExecStart=/usr/local/bin/gitea web --config /home/git/gitea/custom/conf/app.ini WorkingDirectory=/home/git/gitea Restart=always Environment=USER=git HOME=/home/git [Install] WantedBy=multi-user.target
-
启动并启用 Gitea 服务:
sudo systemctl daemon-reload sudo systemctl start gitea sudo systemctl enable gitea
-
检查服务状态:
sudo systemctl status gitea
如果看到
active (running),说明启动成功。
第 6 步:通过 Web 界面完成初始配置
- 打开你的浏览器,访问
http://<你的服务器IP>:3000,Gitea 默认监听 3000 端口。 - 你会看到一个安装向导页面。
- 数据库:保持默认的 SQLite 即可。
- 应用名称:填写你的 Git 服务名称。
- 仓库根路径:保持默认
/home/git/gitea/repos。 - SSH 服务器域名和端口:SSH 端口不是 22,请填写正确的域名和端口。
- Gitea URL:填写完整的 URL,
http://your_server_ip:3000。 - 管理员账户:创建你的管理员用户名、密码和邮箱。
- 点击 “安装 Gitea” 按钮。
安装完成后,你就可以登录 Web 界面,创建仓库、添加用户、管理组织等,体验和 GitHub/GitLab 类似的功能。
总结与选择
| 特性 | gitolite |
Gitea |
|---|---|---|
| 核心方式 | 基于 SSH 和配置文件管理 | 独立服务,带 Web UI |
| 权限管理 | 非常精细,通过 gitolite.conf |
通过 Web UI,支持团队、组织、成员管理 |
| 易用性 | 较高,需要熟悉 Git 和 SSH | 非常高,图形化界面,一目了然 |
| 功能 | 专注于 Git 仓库的权限控制 | 功能全面,问题跟踪、Wiki、CI/CD 集成等 |
| 适用场景 | 命令行爱好者,需要极致权限控制的团队,资源有限的旧服务器 | 个人开发者,小团队,希望有类似 GitHub 体验的用户 |
如何选择?
- 如果你喜欢命令行,追求轻量级和极致的权限控制,并且不介意手动管理配置文件,
gitolite是一个非常好的选择。 - 如果你希望快速搭建,并且需要一个友好的 Web 界面来管理用户和仓库,甚至未来可能需要集成更多功能(如任务管理),
Gitea绝对是更现代、更推荐的选择,对于绝大多数用户来说,Gitea的体验会好得多。
