587_Gitea代码托管
一句话概述:Gitea 是用 Go 编写的轻量级自托管 Git 服务,功能对标 GitHub,但只需 512MB 内存就能跑,支持 CI/CD(Gitea Actions)和 20+ 种包管理,是小团队的 GitHub 替代品。
核心知识点表
| 概念 | 白话解释 |
|---|
| Gitea | 自己搭建的 GitHub,代码放在自己服务器上 |
| Gitea Actions | 内置 CI/CD,语法兼容 GitHub Actions |
| Organization | 组织,把用户和仓库分组管理 |
| Webhook | 代码推送时自动通知其他服务 |
| Mirror | 镜像仓库,自动同步其他 Git 平台的仓库 |
| Package Registry | 包管理,支持 npm/PyPI/Docker 等 20+ 种包 |
安装配置
Docker Compose 安装(推荐)
# docker-compose.yml
services:
gitea:
image: gitea/gitea:latest # 最新版(v1.23,2026)
container_name: gitea
restart: always
ports:
- "3000:3000" # Web 界面
- "2222:22" # SSH(Git over SSH)
volumes:
- ./gitea-data:/data # 数据持久化
- /etc/timezone:/etc/timezone:ro # 时区
environment:
- USER_UID=1000 # 运行用户 UID
- USER_GID=1000 # 运行用户 GID
- GITEA__database__DB_TYPE=sqlite3 # 使用 SQLite(最简单)
docker compose up -d # 启动
# 浏览器打开 http://localhost:3000
# 首次访问进入安装向导
二进制安装
# 下载最新版
wget https://dl.gitea.com/gitea/1.23/gitea-1.23-linux-amd64
chmod +x gitea-1.23-linux-amd64 # 添加执行权限
sudo mv gitea-1.23-linux-amd64 /usr/local/bin/gitea # 移到系统路径
# 创建用户和目录
sudo adduser --system --shell /bin/bash --group git
sudo mkdir -p /var/lib/gitea /etc/gitea
sudo chown git:git /var/lib/gitea /etc/gitea
# 启动
sudo -u git gitea web # 前台运行
# 或创建 systemd 服务后台运行
安装向导配置
# 首次访问 http://localhost:3000 时的关键配置:
# 1. 数据库类型:SQLite3(小团队)/ MySQL / PostgreSQL
# 2. 站点标题:你的 Git 服务名称
# 3. 仓库根目录:/data/gitea-repositories
# 4. SSH 端口:22 或 2222
# 5. 管理员账号:立即创建!
# 6. 邮件服务:配置 SMTP(可选,用于通知和密码重置)
基本使用
创建仓库和推送代码
# 在 Web 界面创建仓库后,用 Git 推送代码:
# SSH 方式(推荐)
git remote add origin ssh://git@your-server:2222/username/repo.git
git push -u origin main # 推送代码
# HTTPS 方式
git remote add origin https://your-server:3000/username/repo.git
git push -u origin main
Gitea Actions(CI/CD)
# 在仓库中创建 .gitea/workflows/ci.yml
name: CI # 工作流名称
on: [push, pull_request] # 触发条件
jobs:
test:
runs-on: ubuntu-latest # 运行环境
steps:
- uses: actions/checkout@v4 # 拉取代码
- name: Run tests # 步骤名
run: |
npm install # 安装依赖
npm test # 运行测试
# 启用 Gitea Actions 需要在 app.ini 中配置:
# [actions]
# ENABLED = true
#
# 还需要部署 act_runner(Actions 执行器)
docker run -d --name runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitea/act_runner:latest
仓库镜像
# 从 GitHub 镜像仓库到 Gitea:
# 1. 新建仓库 → 选择 "迁移/从远程仓库导入"
# 2. 填入 GitHub 仓库 URL
# 3. 勾选 "镜像仓库"
# 4. 设置同步间隔
# Gitea 会自动定期同步 GitHub 仓库的变更
高级用法
配置文件(app.ini)
; /data/gitea/conf/app.ini
[server]
ROOT_URL = https://git.example.com/ ; 外部访问 URL
SSH_PORT = 2222 ; SSH 端口
DOMAIN = git.example.com ; 域名
[service]
DISABLE_REGISTRATION = true ; 关闭注册(安全!)
REQUIRE_SIGNIN_VIEW = true ; 必须登录才能查看
[mailer]
ENABLED = true ; 启用邮件
SMTP_ADDR = smtp.gmail.com ; SMTP 服务器
SMTP_PORT = 587 ; SMTP 端口
FROM = gitea@example.com ; 发件人
[actions]
ENABLED = true ; 启用 Gitea Actions
OAuth2 / LDAP 认证
# 管理面板 → 认证源 → 添加认证源
# 支持:LDAP / OAuth2 / SMTP / PAM
#
# OAuth2 配置示例(GitHub 登录):
# - 类型:OAuth2
# - 提供者:GitHub
# - Client ID:从 GitHub 获取
# - Client Secret:从 GitHub 获取
# - 重定向 URL:https://git.example.com/user/oauth2/github/callback
常见报错
| 报错信息 | 原因 | 解决方案 |
|---|
Permission denied (publickey) | SSH 密钥未配置 | 在用户设置中添加 SSH 公钥 |
Repository not found | 仓库不存在或无权限 | 检查仓库路径和权限 |
Database locked | SQLite 并发写入冲突 | 大团队建议换 MySQL/PostgreSQL |
Actions runner offline | act_runner 未连接 | 检查 runner 容器状态和注册 token |
502 Bad Gateway | Gitea 未启动或反向代理错误 | 检查 Gitea 服务和 Nginx/Traefik 配置 |
速查表
# === Docker 安装 ===
docker run -d -p 3000:3000 -p 2222:22 \
-v gitea-data:/data --name gitea gitea/gitea:latest
# === 默认端口 ===
# 3000 → Web 界面
# 22/2222 → SSH
# === 资源需求 ===
# 最低:2 CPU + 512MB RAM(SQLite)
# 推荐:2 CPU + 1GB RAM
# === 数据库支持 ===
# SQLite(最简单)| MySQL | PostgreSQL | TiDB | MSSQL
# === 关键配置路径 ===
# app.ini:/data/gitea/conf/app.ini
# 仓库:/data/gitea-repositories/
# 日志:/data/gitea/log/
# === Gitea CLI ===
gitea admin user create --username admin --password pass --email a@b.com
gitea admin user list # 列出用户
gitea dump # 备份所有数据
同类对比
| 特性 | Gitea | GitLab CE | Forgejo | GitHub |
|---|
| 内存需求 | 512MB | 4GB+ | 512MB | N/A |
| 安装复杂度 | 低 | 高 | 低 | N/A |
| CI/CD | Actions(兼容GH) | 内置 | Actions | Actions |
| 包管理 | 20+ 种 | 内置 | 20+ 种 | Packages |
| 开源协议 | MIT | MIT(CE) | GPL | 闭源 |
| 适合规模 | 1-50人 | 50+人 | 1-50人 | 任意 |
选型建议:小团队自托管 Git 首选 Gitea(轻量、功能全);Forgejo 是 Gitea 的社区分支,更纯粹的开源治理;大团队需要完整 DevOps 选 GitLab。