自建 Git 仓库:从零了解 Gitea 的详细教程
前言:为什么选择自建 Git 仓库?
对于开发者、团队乃至个人来说,Git 已经成为版本控制的事实标准。我们习惯于使用 GitHub、GitLab、Bitbucket 等托管平台来管理代码。这些平台提供了便利的服务、强大的功能以及协作能力。然而,在某些场景下,我们可能会考虑自建 Git 仓库:
- 数据主权与隐私: 对于包含敏感信息、商业机密或国家机密的项目,将其托管在第三方平台上可能存在数据泄露或合规性风险。自建仓库可以让你完全掌控数据。
- 成本控制: 随着项目和用户数量的增长,商业托管平台的费用可能会变得高昂。自建仓库的成本主要在于硬件(或云服务器费用)、带宽和维护,对于一些用户来说可能更经济。
- 定制化与集成: 自建平台可以根据特定的需求进行深度定制,与内部系统进行更紧密的集成,例如自定义的 CI/CD 流程、用户认证系统等。
- 性能与稳定性: 在局域网内部署 Git 仓库可以提供更快的访问速度。同时,避免了依赖外部网络的潜在不稳定因素。
- 学习与实践: 搭建和维护自己的服务是一个非常有价值的学习过程,能够深入了解软件部署、系统管理和网络配置。
当然,自建仓库也意味着你需要承担维护、安全、备份和升级的责任。但这正是本文要探讨的内容:如何使用 Gitea 这个优秀、轻量级的工具,来降低自建 Git 仓库的门槛。
Gitea 是什么?为什么选择 Gitea?
在自建 Git 仓库领域,有许多选择,比如庞大而功能齐全的 GitLab CE (Community Edition),或者一些更小型的解决方案。而 Gitea 是一个脱颖而出、备受推崇的项目。
Gitea 是一个自托管的 Git 服务,它由 Go 语言编写,并且是一个完全开源的项目。它的目标是创建一个轻量级、易于安装、运行和维护的 Git 服务。
选择 Gitea 的理由有很多:
- 轻量级和高效: 相比 GitLab 对资源的巨大需求(尤其是内存),Gitea 对硬件资源的要求非常低,即使在配置较低的服务器、树莓派甚至 NAS 上也能流畅运行。
- 易于安装: Gitea 提供了多种安装方式,包括独立的二进制文件、Docker 镜像、包管理器安装等,每种方式都相对简单快捷。特别是独立二进制文件,下载即可运行。
- 功能丰富: 尽管轻量,Gitea 却提供了 Git 仓库托管所需的核心功能,包括:
- 仓库管理(创建、删除、迁移、权限控制)
- 用户和组织管理
- Issue 跟踪系统
- Pull Request(合并请求)流程
- Wiki
- 代码审查
- 集成 CI/CD(通过 Webhook 或集成其他 CI 服务)
- 项目看板
- LFS (Large File Storage) 支持
- 邮件通知
- 两因素认证 (2FA)
- Go 语言的优势: Go 语言使得 Gitea 能够编译成单个可执行文件,没有复杂的依赖关系,部署和跨平台运行变得异常简单。
- 活跃的社区和持续的开发: Gitea 项目拥有一个活跃的开源社区, Bug 修复及时,新功能不断增加。
- 界面友好: Gitea 的 Web 界面简洁直观,易于上手。
总而言之,如果你需要一个功能完备、易于维护且对资源友好的自建 Git 仓库解决方案,Gitea 是一个非常理想的选择。
准备工作:搭建 Gitea 的先决条件
在开始安装 Gitea 之前,我们需要准备好运行环境。
1. 硬件和操作系统
- 服务器或计算机: 可以是一台独立的物理服务器、虚拟机、云服务器(如阿里云 ECS, 腾讯云 CVM, AWS EC2 等)、树莓派,甚至是一台配置不错的个人电脑或 NAS。
- 操作系统: Gitea 几乎支持所有主流操作系统,包括 Linux (推荐,如 Debian, Ubuntu, CentOS, Fedora)、Windows、macOS。本文将主要以 Linux 环境为例进行讲解,因为这是生产环境中常用的部署方式。
- 资源需求: Gitea 非常轻量。
- CPU: 1 核即可。
- 内存: 官方推荐 2GB,但如果用户和仓库数量不多,512MB 或 1GB 也能运行。
- 存储: 除了 Gitea 程序本身和数据库占用的空间外,主要存储需求取决于你托管的 Git 仓库大小。确保有足够的硬盘空间。
2. 软件依赖
- Git: Gitea 本质上是 Git 的一个封装和管理界面,所以服务器上必须安装 Git。
- 在 Debian/Ubuntu 上:
sudo apt update && sudo apt install git
- 在 CentOS/Fedora 上:
sudo dnf install git
或sudo yum install git
- 在 Debian/Ubuntu 上:
- 数据库: Gitea 支持多种数据库,选择一种即可:
- SQLite3 (推荐用于小型或个人项目): 这是最简单的选择,无需额外安装数据库服务器,数据存储在一个文件中。方便备份和迁移。但在高并发或大型部署下性能可能受限。
- MySQL/MariaDB: 成熟的关系型数据库,适合中大型部署。需要额外安装和配置数据库服务器。
- PostgreSQL: 另一个功能强大的关系型数据库,适合中大型部署。也需要额外安装和配置。
- MSSQL (Microsoft SQL Server): 如果在 Windows 环境下,可以使用 MSSQL。
- TiDB (Experimental): 分布式数据库。
- 对于初学者或个人使用,强烈推荐 SQLite3。
- SSH Server: Git 通过 SSH 协议进行代码传输通常更安全和方便(特别是在有防火墙的环境下)。虽然 Gitea 也可以配置自己的内置 SSH 服务器,或者通过 HTTP/HTTPS 协议进行 Push/Pull,但系统自带的 OpenSSH 服务器通常更稳定和常用。确保服务器上已安装并运行 SSH 服务。
3. 网络配置 (如果需要外部访问)
- 公网 IP 地址: 如果你需要从外部网络访问 Gitea,服务器需要一个公网 IP。
- 域名 (可选但推荐): 使用域名(例如 git.yourcompany.com)比直接使用 IP 地址更专业,也方便配置 SSL/TLS 证书启用 HTTPS。你需要购买一个域名并在 DNS 解析中将子域名指向你的服务器 IP。
- 防火墙规则:
- 允许 SSH 访问(通常是 TCP 22 端口,但 Gitea 可以使用内置 SSH 并监听其他端口,默认为 2222)。
- 允许 HTTP 访问(TCP 3000 端口,Gitea 默认)或 HTTPS 访问(TCP 443 端口,如果配置了反向代理和 SSL)。
- 反向代理 (推荐用于 HTTPS): 如果需要通过标准端口 80/443 访问并启用 HTTPS,通常需要配置一个反向代理服务器,如 Nginx, Caddy, Apache 等,将外部请求转发到 Gitea 监听的端口(默认为 3000)。
安装 Gitea (以 Linux 二进制安装为例)
这是最直接、最推荐的安装方式之一。
步骤 1:创建 Gitea 用户
为了安全起见,我们不直接使用 root 用户运行 Gitea 服务,而是创建一个专门的系统用户。
bash
sudo adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
这条命令创建了一个名为 git
的系统用户,主目录为 /home/git
,shell 为 /bin/bash
,并创建了一个同名的用户组。它是一个系统用户,不需要密码登录。
步骤 2:创建必要的目录
Gitea 需要一些目录来存放数据、日志等。我们将这些目录创建在 /home/git
下,并确保 git
用户拥有这些目录的权限。
bash
sudo mkdir -p /etc/gitea /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /etc/gitea /var/lib/gitea
sudo chmod -R 750 /var/lib/gitea
sudo chmod 770 /etc/gitea
/etc/gitea
: 存放 Gitea 的配置文件app.ini
。/var/lib/gitea/custom
: 存放自定义文件,如模板、静态资源等。/var/lib/gitea/data
: 存放仓库数据、SQLite 数据库文件(如果使用 SQLite)等。/var/lib/gitea/log
: 存放日志文件。
将这些目录的所有者设置为 git
用户和 git
组,并设置合适的权限。
步骤 3:下载 Gitea 二进制文件
访问 Gitea 的官方下载页面 (https://gitea.io/zh-cn/download/),找到适合你系统的最新版本二进制文件 URL。使用 wget
或 curl
下载到服务器上。
假设最新版本是 1.21.x,并且你的系统是 Linux AMD64:
“`bash
进入临时目录下载
cd /tmp
根据你系统的实际架构和版本选择下载链接
wget https://dl.gitea.io/gitea/1.21.8/gitea-1.21.8-linux-amd64
或者使用 curl
curl -LJO https://dl.gitea.io/gitea/1.21.8/gitea-1.21.8-linux-amd64
将下载的文件重命名为 gitea 并移动到合适的路径
sudo mv gitea-1.21.8-linux-amd64 /usr/local/bin/gitea
“`
步骤 4:设置文件权限
给 Gitea 二进制文件执行权限:
bash
sudo chmod +x /usr/local/bin/gitea
步骤 5:创建 Systemd 服务文件
为了让 Gitea 能够开机自启动并方便地管理其进程,我们可以创建一个 systemd service 文件。
创建一个新文件 /etc/systemd/system/gitea.service
,并粘贴以下内容:
“`ini
[Unit]
Description=Gitea (Git with a cup of tea)
Documentation=https://docs.gitea.io/
After=syslog.target network.target
如果你使用了数据库,这里需要添加对应的服务依赖,例如:
After=syslog.target network.target mysql.service # 如果使用 MySQL
After=syslog.target network.target postgresql.service # 如果使用 PostgreSQL
[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web \
–config /etc/gitea/app.ini
Restart=always
RestartSec=10
TimeoutStopSec=5
如果使用内置 SSH,则需要设置
Environment=USER=git HOME=/home/git
[Install]
WantedBy=multi-user.target
“`
After=...
: 指定 Gitea 服务在哪些服务启动之后启动。至少需要网络服务。如果你使用了外部数据库,请务必添加对应的数据库服务。User=git
,Group=git
: 指定运行 Gitea 的用户和组。WorkingDirectory=/var/lib/gitea/
: 指定 Gitea 的工作目录。ExecStart=...
: 指定 Gitea 的启动命令。web
表示启动 Web 服务,--config
指定配置文件的路径。Restart=always
: Gitea 进程退出后总是尝试重启。RestartSec=10
: 进程退出 10 秒后尝试重启。Environment=...
: 如果使用 Gitea 内置的 SSH 服务器,需要设置 USER 和 HOME 环境变量。如果使用系统自带的 SSH,则不需要。
6. 启动并启用 Gitea 服务
重新加载 systemd 配置,启动 Gitea 服务,并设置开机自启:
bash
sudo systemctl daemon-reload
sudo systemctl start gitea
sudo systemctl enable gitea
检查服务状态,确保 Gitea 已经成功启动:
bash
sudo systemctl status gitea
如果看到类似 “active (running)” 的字样,说明服务已成功启动。
初次配置:通过 Web 界面安装 Gitea
Gitea 启动后,第一次访问 Web 界面时会进入安装向导。
-
访问 Gitea Web 界面: 打开浏览器,访问服务器的 IP 地址或域名,以及 Gitea 监听的 HTTP 端口。默认情况下,Gitea 监听在
3000
端口。- 如果是在本地服务器上操作:
http://localhost:3000
- 如果是通过公网 IP 访问:
http://<你的服务器IP>:3000
- 如果是通过域名访问且没有配置反向代理:
http://<你的域名>:3000
你应该会看到 “Gitea 初次安装” 页面。
- 如果是在本地服务器上操作:
-
数据库设置:
- 数据库类型: 选择你准备使用的数据库。如果是 SQLite3,选择 “SQLite3″。
- 路径: 如果选择 SQLite3,指定数据库文件存放的路径。通常保持默认即可:
/var/lib/gitea/data/gitea.db
。确保git
用户对/var/lib/gitea/data
目录有写入权限。 - 如果选择 MySQL 或 PostgreSQL,填写数据库主机地址、端口、用户名、密码和数据库名称。确保数据库已经提前创建好。
-
通用设置:
- 仓库根目录路径: Git 仓库实际存放的路径。推荐使用
/var/lib/gitea/data/git-repos
或类似路径。确保git
用户有写入权限。 - Git LFS 根目录路径: Git LFS 数据存放路径。推荐
/var/lib/gitea/data/lfs
。 - 运行用户: 填写你创建的系统用户
git
。 - 运行 Gitea 的用户 SSH 端口: 非常重要! 这个端口是 Gitea 内置 SSH 服务监听的端口,默认为 2222。
- 如果你打算使用系统自带的 SSH (端口 22) 来进行 Git 操作: 可以将这个端口设置为其他不常用的端口,或者在配置完成后禁用 Gitea 内置 SSH。在这种模式下,用户将通过系统 SSH 用户的
~/.ssh/authorized_keys
文件来认证,Gitea 需要配置为将用户的公钥添加到这个文件。 - 如果你打算使用 Gitea 内置的 SSH 服务: 保持默认 2222 即可。此时,用户通过 Gitea Web 界面添加公钥,Gitea 会管理自己的
authorized_keys
文件(通常在/var/lib/gitea/.ssh/authorized_keys
)。这种方式更简单,特别是如果你不希望 Git 操作与系统其他 SSH 登录混淆。对于初学者,推荐使用 Gitea 内置 SSH。
- 如果你打算使用系统自带的 SSH (端口 22) 来进行 Git 操作: 可以将这个端口设置为其他不常用的端口,或者在配置完成后禁用 Gitea 内置 SSH。在这种模式下,用户将通过系统 SSH 用户的
- Gitea HTTP 监听端口: Gitea Web 服务监听的端口,默认为 3000。如果端口冲突或有其他需求可以修改。
- Gitea 基本 URL:
- 如果你通过 IP 和端口访问:填写
http://<你的服务器IP>:3000
- 如果你通过域名访问(无论是否有反向代理):填写
http://<你的域名>:3000
(如果无反向代理) 或http://<你的域名>
(如果反向代理到端口 80) 或https://<你的域名>
(如果反向代理到端口 443 并配置 HTTPS)。这里填写的 URL 决定了 Gitea 生成的仓库克隆地址,所以务必填写正确。 如果使用了域名和 HTTPS,强烈建议填写https://<你的域名>
。
- 如果你通过 IP 和端口访问:填写
- 站点名称: 给你的 Git 仓库起一个名字,会显示在页面标题等位置。
- 其他设置如 LFS、注册相关(是否允许用户注册、是否需要管理员审批)根据需要勾选。
- 仓库根目录路径: Git 仓库实际存放的路径。推荐使用
-
管理员账号设置:
- 这是创建第一个 Gitea 管理员用户的页面。填写用户名、密码和邮箱。务必记住这个账号信息! 这个账号拥有 Gitea 的所有管理权限。
- 你也可以选择暂时跳过此步骤,稍后通过命令行注册第一个用户并将其提升为管理员。但通过界面创建更方便。
-
可选设置 (SMTP 邮件服务等): 如果需要启用邮件通知(如新 Issue、Pull Request 通知),需要配置 SMTP 服务器信息。这不是必须的,可以以后在管理面板中配置。
-
点击“立即安装 Gitea”: Gitea 将会进行安装和数据库初始化。这个过程可能需要一些时间。
安装成功后,Gitea 会自动跳转到登录页面或首页。恭喜你,Gitea 已经成功搭建并运行了!
使用 Gitea:创建仓库和基本操作
登录你的管理员账号后,就可以开始使用 Gitea 了。
1. 探索界面
熟悉一下 Gitea 的 Web 界面。顶部的导航栏通常包括:
* 主页:显示动态、仓库列表等。
* 探索:发现用户、组织、仓库。
* 新仓库:创建新的 Git 仓库。
* + 号:快速创建仓库、组织等。
* 用户头像/下拉菜单:访问个人设置、已拥有的仓库、管理面板等。
2. 创建用户 (可选)
如果你允许用户注册,他们可以自行注册。作为管理员,你也可以手动创建用户:
* 点击用户头像下拉菜单 -> 站点管理 (Site Administration) -> 用户管理。
* 点击 创建新用户 按钮,填写用户信息并创建。
3. 创建组织 (可选)
组织可以帮助你更好地管理团队和项目,可以将多个相关的仓库归到一个组织下,并邀请用户加入组织,分配团队权限。
* 点击 + 号 -> 新组织。
* 填写组织名称等信息并创建。
4. 创建新的 Git 仓库
- 点击 + 号 -> 新仓库。
- 所有者: 选择仓库属于哪个用户或组织。
- 仓库名称: 填写仓库的名称。
- 描述 (可选): 简要描述仓库的用途。
- 可见性:
- 私有: 只有授权的用户或组织成员才能访问。
- 公开: 任何人都可以访问和克隆(包括未登录用户)。
- 有限 (Limited): 只有登录用户可以访问。
- 初始化仓库:
- 添加 .gitignore: 选择一个合适的
.gitignore
模板,忽略不需要提交的文件。 - 添加许可证: 选择一个开源许可证。
- 创建 README 文件: 自动创建一个 README 文件。
- 添加 .gitignore: 选择一个合适的
- 高级设置: 包括启用 Wiki、Issue 跟踪、项目看板、LFS 等。根据需要勾选。
- 点击 创建仓库。
仓库创建后,你会被重定向到仓库页面。页面上会显示仓库的克隆地址(支持 HTTP/HTTPS 和 SSH)。
5. 克隆仓库、提交和推送
现在你可以在本地使用 Git 命令与 Gitea 中的仓库进行交互了。
假设你创建了一个名为 my-project
的仓库,所有者是你的用户 myuser
。
通过 HTTP/HTTPS 克隆:
“`bash
git clone http://
例如:git clone http://git.mydomain.com/myuser/my-project.git
或:git clone https://git.mydomain.com/myuser/my-project.git
“`
使用这种方式,在执行 git push
或 git pull
时,Git 会提示你输入 Gitea 的用户名和密码。
通过 SSH 克隆:
使用 SSH 需要先在 Gitea 中添加你的 SSH 公钥。
- 生成 SSH 密钥对 (如果还没有):
bash
ssh-keygen -t rsa -b 4096 -C "你的邮箱地址"
一路回车接受默认设置即可。生成的公钥文件通常是~/.ssh/id_rsa.pub
。 - 将公钥添加到 Gitea:
- 登录 Gitea Web 界面。
- 点击用户头像下拉菜单 -> 设置 (Settings) -> SSH / GPG 密钥。
- 点击 管理 SSH 密钥 下面的 添加密钥 按钮。
- 填写密钥名称(方便识别),将
~/.ssh/id_rsa.pub
文件中的全部内容复制粘贴到 内容 框中。 - 点击 添加密钥。
-
通过 SSH 克隆仓库:
如果使用的是 Gitea 内置 SSH (端口 2222):
bash
git clone ssh://git@<Gitea基本URL的域名或IP>:2222/myuser/my-project.git
# 注意:默认的SSH用户名为 git
如果使用的是系统 SSH (端口 22),并且你配置了 Gitea 使用系统 SSH:
bash
git clone git@<Gitea基本URL的域名或IP>:myuser/my-project.git
# 或 ssh://git@<Gitea基本URL的域名或IP>/myuser/my-project.git
# 这里的 git@ 是系统SSH用户,Gitea 会将公钥添加到这个系统用户的 authorized_keys 中。使用 SSH 方式,一旦设置好公钥,Git 操作将无需重复输入密码,更加便捷和安全。
提交和推送更改:
进入克隆到本地的仓库目录,进行代码修改、添加、提交,然后推送到 Gitea:
bash
cd my-project
echo "Hello Gitea!" > README.md
git add .
git commit -m "Add initial README"
git push origin master # 或 main,取决于仓库主分支名称
进阶配置与维护
自建服务意味着你需要承担一些维护工作。
1. 配置 HTTPS (强烈推荐)
为了安全起见,特别是如果你的 Gitea 需要从公共网络访问,强烈建议配置 HTTPS。这通常通过配置反向代理服务器来实现。
使用 Nginx 作为反向代理的示例配置 (/etc/nginx/sites-available/gitea
):
“`nginx
server {
listen 80;
listen [::]:80;
server_name git.yourdomain.com; # 你的域名
# 强制跳转到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name git.yourdomain.com; # 你的域名
# SSL 配置 (请替换为你的证书路径)
ssl_certificate /etc/letsencrypt/live/git.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.yourdomain.com/privkey.pem;
# Include strong encryption settings
include /etc/nginx/snippets/ssl-params.conf; # 例如,这是一个包含TLS参数的配置文件
client_max_body_size 500M; # 根据需要调整最大上传文件大小
location / {
proxy_pass http://localhost:3000; # Gitea 监听的 HTTP 端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
“`
安装 Certbot (Let’s Encrypt 客户端) 可以轻松获取免费的 SSL 证书。配置好 Nginx 后,需要在 Gitea 的 app.ini
中将 ROOT_URL
改为 https://git.yourdomain.com/
。
使用 Caddy 作为反向代理 (更简单):
Caddy 默认支持自动 HTTPS。安装 Caddy 后,创建一个 Caddyfile
:
caddyfile
git.yourdomain.com {
reverse_proxy localhost:3000 # Gitea 监听的 HTTP 端口
# 可选配置,如限制文件大小
# request_body {
# max_size 500MB
# }
}
启动 Caddy 后,它会自动申请并配置 HTTPS。同样,需要在 Gitea 的 app.ini
中将 ROOT_URL
改为 https://git.yourdomain.com/
。
配置完反向代理后,记得调整防火墙,允许 80 和 443 端口的访问,并根据需要关闭 3000 端口的外部访问。
2. 配置邮件发送
在 Gitea 的管理面板 -> 配置 -> SMTP 设置中填写你的 SMTP 服务器信息,用于发送注册确认邮件、通知邮件等。
3. 备份
定期备份是自建服务不可或缺的一环。你需要备份 Gitea 的数据:
- 仓库数据: 存储在
REPOSITORY_ROOT
配置指定的目录下(例如/var/lib/gitea/data/git-repos
)。 - 数据库:
- 如果是 SQLite3,数据库文件本身就是
/var/lib/gitea/data/gitea.db
。 - 如果是 MySQL/PostgreSQL,需要使用数据库自带的备份工具(如
mysqldump
,pg_dump
)导出数据。
- 如果是 SQLite3,数据库文件本身就是
- 配置文件:
/etc/gitea/app.ini
。 - SSH Authorized Keys (如果使用内置 SSH): 通常在
/var/lib/gitea/.ssh/authorized_keys
。
Gitea 提供了内置的备份命令,可以简化这个过程:
“`bash
切换到 git 用户执行备份(或使用 sudo -u git)
sudo -u git /usr/local/bin/gitea dump -c /etc/gitea/app.ini
“`
这个命令会生成一个 ZIP 文件,包含数据库备份、仓库数据、配置等。你可以将这个 ZIP 文件定期复制到其他存储位置(如对象存储、另一台服务器)进行异地备份。
4. 更新 Gitea
更新 Gitea 通常也很简单:
- 停止 Gitea 服务:
sudo systemctl stop gitea
- 下载新的 Gitea 二进制文件。
- 替换旧的二进制文件(例如覆盖
/usr/local/bin/gitea
)。 - 确保新文件有执行权限:
sudo chmod +x /usr/local/bin/gitea
- 启动 Gitea 服务:
sudo systemctl start gitea
Gitea 启动时会自动检测数据库模式的变化并进行迁移。在更新前,务必进行备份,以防万一。
5. 查看日志
如果 Gitea 出现问题,查看日志是排查的起点。
* Systemd 服务日志:sudo journalctl -u gitea.service
* Gitea 应用日志:在 log
目录下,例如 /var/lib/gitea/log/gitea.log
。
常见问题与故障排除
- 防火墙问题: 确认服务器防火墙(如 firewalld 或 UFW)和云服务商的安全组允许 Gitea 监听的端口(默认为 3000,内置 SSH 为 2222)或者反向代理的端口(80/443)的流量进入。
- 权限问题: 确保运行 Gitea 的用户 (
git
) 对配置文件目录 (/etc/gitea
) 和数据目录 (/var/lib/gitea
) 及其子目录拥有正确的读写权限。特别是/var/lib/gitea/data
和/var/lib/gitea/data/git-repos
。 - 数据库连接问题: 检查数据库服务是否正在运行,Gitea 配置中的数据库地址、端口、用户名、密码和数据库名是否正确。如果是 MySQL/PostgreSQL,确认 Gitea 用户可以从 Gitea 服务器连接到数据库服务器。
- SSH 克隆失败:
- 确认 Gitea 是否配置了内置 SSH 或使用了系统 SSH。
- 确认 Gitea 配置中的 SSH 端口是否正确。
- 确认防火墙允许 SSH 端口(22 或 2222)的流量。
- 确认你的本地公钥已经正确添加到 Gitea 的用户设置中。
- 如果是使用系统 SSH,确认公钥已经正确添加到
/home/git/.ssh/authorized_keys
文件中。 - 尝试使用
ssh -v git@<Gitea地址> -p <SSH端口>
命令进行调试,查看详细连接过程。
- Web 界面访问问题: 确认 Gitea 服务正在运行 (
systemctl status gitea
)。确认防火墙允许 HTTP/HTTPS 端口的流量。如果使用了反向代理,检查反向代理配置是否正确,并且反向代理服务正在运行。 - 502 Bad Gateway 错误: 通常是反向代理配置问题,或者 Gitea 服务未运行、崩溃。检查 Gitea 服务状态和日志。
遇到问题时,查看 Gitea 的日志和 systemd 的日志是定位问题的最有效方法。同时,查阅 Gitea 的官方文档也是非常有帮助的资源。
总结:掌控你的代码世界
通过本文,我们详细介绍了如何从零开始,使用轻量级且功能丰富的 Gitea 搭建一个自己的 Git 仓库。我们了解了自建仓库的动机、Gitea 的优势、准备工作、详细的安装步骤(以二进制安装为例)、Web 界面的初次配置、基本的仓库使用,以及进阶的配置(如 HTTPS、邮件、备份)和常见的故障排除。
自建 Git 仓库让你重新获得了对代码资产的完全掌控,提供了更高的灵活性和定制性。Gitea 作为一款优秀的开源软件,极大地降低了实现这一目标的难度和资源开销。
虽然自建服务需要投入一定的精力和时间进行维护,但其带来的数据安全、隐私保护、成本效益以及学习价值是无法替代的。
现在,你已经掌握了搭建自己 Git 仓库的基本技能。开始在你的 Gitea 实例上创建项目、邀请团队成员,享受自由掌控代码的乐趣吧!记住定期备份,并关注 Gitea 官方发布的更新,让你的 Git 服务更加稳定和安全。
祝你在自建 Git 的道路上一切顺利!