1. Gitea基础概念与核心价值
Gitea是一款轻量级的自托管Git服务,采用Go语言编写。相比GitLab这类重量级方案,它最突出的特点是资源占用极低——在树莓派上都能流畅运行。我最早接触Gitea是在2018年,当时团队需要为嵌入式开发搭建内部代码仓库,服务器只是一台老旧的NUC迷你主机,实测运行GitLab时内存经常爆满,而切换Gitea后内存占用长期稳定在200MB以下。
从架构上看,Gitea实现了完整的Git仓库管理功能:
- 用户权限体系(支持LDAP集成)
- Issue跟踪系统
- Pull Request工作流
- Web钩子通知
- 内置CI/CD(通过Actions功能)
特别适合以下场景:
- 中小企业内部代码托管
- 个人开发者搭建私有Git服务
- 教育机构教学环境部署
- 需要与第三方系统深度集成的场景(因其API设计非常友好)
提示:虽然Gitea可以单机部署,但生产环境建议至少配备2核CPU+2GB内存的服务器,并定期备份
gitea-repositories目录。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 本地化部署实战指南
2.1 环境准备与依赖安装
以CentOS 8为例,基础环境需要:
bash复制sudo dnf install -y git mysql-server nginx
sudo systemctl enable --now mysqld nginx
数据库配置建议使用MySQL/MariaDB(SQLite仅适合测试):
sql复制CREATE DATABASE gitea CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost';
FLUSH PRIVILEGES;
2.2 二进制安装与配置
下载最新版二进制(当前稳定版为1.17.3):
bash复制wget -O gitea https://dl.gitea.io/gitea/1.17.3/gitea-1.17.3-linux-amd64
chmod +x gitea
创建系统服务(/etc/systemd/system/gitea.service):
ini复制[Unit]
Description=Gitea
After=syslog.target network.target mysqld.service
[Service]
User=git
Group=git
WorkingDirectory=/var/lib/gitea
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
[Install]
WantedBy=multi-user.target
关键配置项(/etc/gitea/app.ini):
ini复制[server]
DOMAIN = your.domain.com
HTTP_PORT = 3000
ROOT_URL = https://your.domain.com/
2.3 Nginx反向代理配置
建议使用HTTPS增强安全性(Let's Encrypt证书):
nginx复制server {
listen 443 ssl;
server_name your.domain.com;
ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3. 日常使用核心操作手册
3.1 仓库管理基础命令
初始化本地仓库并推送到Gitea:
bash复制git init
git add .
git commit -m "Initial commit"
git remote add origin http://your.domain.com/username/repo.git
git push -u origin master
处理冲突的黄金法则:
- 先执行
git pull --rebase - 解决冲突后
git add标记已解决 git rebase --continue- 最后
git push
3.2 分支策略实战
推荐的分支模型:
code复制main - 生产环境代码(保护分支)
release/* - 预发布分支
feature/* - 功能开发分支
hotfix/* - 紧急修复分支
创建保护分支的方法:
- 仓库设置 → 分支
- 点击"添加保护分支规则"
- 设置合并权限(建议至少需要1个Code Review)
3.3 协作开发工作流
标准的PR流程:
- 从main分支创建feature分支
- 开发完成后发起Pull Request
- 团队成员进行Code Review
- 通过后使用"Squash Merge"合并
- 删除已合并的feature分支
经验:启用"Require approval before merging"可以强制代码审查,显著提升代码质量。
4. 高级功能深度解析
4.1 Web钩子与自动化
典型场景:代码推送触发Jenkins构建
- 仓库设置 → Web钩子
- 添加Jenkins的GitHub插件URL
- 选择触发事件(推荐仅监听push事件)
调试技巧:
bash复制# 查看实时日志
journalctl -u gitea -f
4.2 Actions自动化实践
示例工作流(.gitea/workflows/test.yaml):
yaml复制name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: make test
资源限制调整(需修改app.ini):
ini复制[actions]
ENABLED = true
DEFAULT_ACTIONS_URL = github.com
4.3 数据备份方案
全量备份脚本示例:
bash复制# 备份数据库
mysqldump -u gitea -p gitea > gitea-db.sql
# 备份配置文件和数据
tar czvf gitea-backup-$(date +%s).tar.gz \
/etc/gitea/app.ini \
/var/lib/gitea/data \
/var/lib/gitea/repositories
推荐备份策略:
- 每日增量备份(只备份变更的仓库)
- 每周全量备份
- 异地备份至少保留3个版本
5. 安全加固与性能调优
5.1 常见漏洞防护
近期需关注的CVE:
- CVE-2022-30781 (SSRF漏洞)
- CVE-2022-39929 (权限提升)
加固措施:
ini复制[security]
INSTALL_LOCK = true
DISABLE_GIT_HOOKS = false
INTERNAL_TOKEN = 改为强随机字符串
5.2 性能优化参数
高负载场景配置建议:
ini复制[database]
MAX_OPEN_CONNS = 100
CONN_MAX_LIFETIME = 3m
[server]
PROTOCOL = unix
UNIX_SOCKET_PERMISSION = 666
监控指标关注点:
- git操作响应时间(应<500ms)
- 内存占用(正常<1GB)
- 数据库连接数(峰值<80%上限)
5.3 故障排查指南
常见问题速查表:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 推送被拒绝 | 分支保护规则冲突 | 检查分支保护设置 |
| Web钩子未触发 | 证书问题/网络隔离 | 测试目标URL可达性 |
| 界面加载慢 | 静态资源未压缩 | 启用Nginx gzip压缩 |
| 登录失败 | LDAP配置错误 | 检查bindDN密码有效期 |
日志分析要点:
bash复制# 查看最近错误
grep -i error /var/lib/gitea/log/gitea.log
# 监控慢查询
grep "SLOW" /var/lib/gitea/log/gitea.log
6. 迁移与升级实战
6.1 从GitLab迁移
标准迁移步骤:
- 在GitLab导出项目(生成.tar.gz)
- Gitea后台创建同名空仓库
- 使用迁移工具:
bash复制gitea migrate \ --clone-addr https://gitlab.com/group/project.git \ --repo-name project \ --issue-tracker true \ --wiki true
注意事项:
- 评论和MR可能无法完整迁移
- LFS文件需要单独处理
- 组权限需要手动重建
6.2 版本升级流程
稳妥的升级方法:
- 停止服务:
systemctl stop gitea - 备份数据和数据库
- 下载新版二进制覆盖旧版
- 执行:
gitea manager flush-queues - 启动服务:
systemctl start gitea
回滚方案:
- 恢复备份的二进制文件
- 还原数据库
- 检查
gitea doctor输出
7. 插件开发与二次开发
7.1 自定义模板开发
覆盖默认模板的方法:
- 创建
custom/templates/目录 - 放置同名模板文件(如
home.tmpl) - 重启Gitea服务
开发建议:
- 始终保留原始模板副本
- 修改后执行
gitea manager regenerate - 使用浏览器开发者工具分析DOM结构
7.2 API集成示例
获取仓库列表的Python示例:
python复制import requests
headers = {"Authorization": "token your_access_token"}
response = requests.get(
"https://your.domain.com/api/v1/user/repos",
headers=headers
)
for repo in response.json():
print(repo["full_name"])
常用API端点:
/api/v1/repos/search仓库搜索/api/v1/issues问题管理/api/v1/orgs组织管理
7.3 开发环境搭建
快速搭建调试环境:
bash复制git clone https://github.com/go-gitea/gitea
cd gitea
make build
./gitea web
调试技巧:
- 设置
RUN_MODE=dev启用详细日志 - 使用
dlv调试Go代码 - 前端修改实时生效(无需重启)
