自建代码仓库不求人:手把手教你用Gitea搭建轻量级Git服务

自建代码仓库不求人:手把手教你用Gitea搭建轻量级Git服务

这里有个小技巧分享给大家, 还在为GitHub私有仓库收费发愁?或是觉得GitLab太吃服务器资源?今天咱们就来聊聊Gitea这个开箱即用的代码托管方案。作为一款Go语言编写的轻量级Git服务,它就像是你私人定制的GitHub,5分钟就能在树莓派上跑起来!

为什么选择Gitea而不是其他方案

先说说我的踩坑经历:去年给创业团队搭建内部代码平台时,试过GitLab CE版,结果2GB内存的服务器直接卡成幻灯片。换成Gitea后,同样的机器能流畅支持20人团队协作,内存占用长期稳定在200MB以下。
根据我的经验,
几个主流方案的对比:
让我解释一下为什么这很重要: - GitHub:功能全面但私有仓库收费

  • GitLab:企业级功能但资源消耗大
  • Gogs:Gitea前身,已停止维护
    根据我的经验, - Bitbucket:免费但国内访问不稳定

在实际工作中,我发现… 实际应用价值:对于中小团队或个人开发者,Gitea提供了恰到好处的功能平衡。比如我们团队常用的代码审查、Issue跟踪和Webhook触发CI/CD等功能它都具备,又不会附带用不到的豪华配置。
在实际工作中,我发现…
这里有个小技巧分享给大家, ## 三种典型部署方式详解

Docker compose一键部署(推荐新手)

这是我最常使用的方案,特别适合快速验证环境。准备个docker-compose.yml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
让我解释一下为什么这很重要: version: "3"

services:
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
这里有个小技巧分享给大家, - USER_GID=1000
volumes:
在实际工作中,我发现... - ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:22"
restart: always
让我解释一下为什么这很重要: ```

在实际工作中,我发现... 启动后访问`http://服务器IP:3000`就能看到安装向导。**为什么这很重要**:这种部署方式隔离了环境依赖,卸载时直接删除容器就行,完全不会污染主机环境。
在实际工作中,我发现...
这里有个小技巧分享给大家, ### 二进制包直接运行(适合生产环境)

根据我的经验, 当需要长期稳定运行时,我会选择下载对应系统的二进制包:
让我解释一下为什么这很重要:
在实际工作中,我发现... ```bash
wget -O gitea https://dl.gitea.io/gitea/1.18.0/gitea-1.18.0-linux-amd64
在实际工作中,我发现... chmod +x gitea
让我解释一下为什么这很重要: ./gitea web

配合systemd做成服务后特别稳定。有个小技巧是使用SQLite数据库时,记得定期执行VACUUM命令压缩数据库文件。

Kubernetes集群部署(企业级方案)

根据我的经验,
对于需要高可用的场景,可以用Helm chart部署:

1
2
helm repo add gitea-charts https://dl.gitea.io/charts/
helm install gitea gitea-charts/gitea --set persistence.enabled=true

这种方案的优点是容易扩展节点和实现负载均衡。去年有个电商客户”双十一”前就这么扩容的,轻松扛住了开发团队的集中提交压力。

真实场景下的应用案例

这里有个小技巧分享给大家, ### 案例1:教育机构的教学实验室

你可能想知道… 某高校计算机系需要为200名学生提供Git实践环境。采用Docker Swarm集群部署5个Gita节点:

  • 每个容器限制512MB内存
  • 使用共享NFS存储仓库数据
  • 通过Traefik实现域名自动分配

最终效果是学生通过学号.lab.example.com就能访问个人仓库,教师账号可以查看所有作业提交记录。关键是成本只有传统方案的1/3。

你可能想知道… ### 案例2:硬件团队的嵌入式开发

做物联网设备的团队遇到这样的问题:

  1. 需要管理多个硬件分支的代码
  2. 部分开发在无外网环境的实验室进行
    这里有个小技巧分享给大家, 3. 要兼容老旧的git客户端版本

解决方案是在内网部署Gita v1.16(最后一个支持git 1.8+的版本),配置SSH证书双向同步外网主仓库。现在他们的工作流变成:
这里有个小技巧分享给大家, - 实验室开发 → push到内网节点

  • 每日凌晨自动同步到外网
  • CI服务器从外网拉取更新构建

在实际工作中,我发现… ### 案例3:个人开发者的多设备同步
你可能想知道…
自由开发者小王有这些需求:
在实际工作中,我发现… ✓ MacBook Pro主力开发机
✓ Windows台式机跑测试
✓ iPad Pro随时review代码

你可能想知道… 他在腾讯云轻量服务器装了Gita后:

1
2
3
4
5
# iPad上通过Working Copy配置远程仓库 
git remote add mygita ssh://[email protected]:2222/user/repo.git

# Windows使用认证代理转发SSH密钥
根据我的经验, ssh-add -L | ssh user@跳板机 "cat >> ~/.ssh/authorized_keys"

你可能想知道… 现在三台设备代码状态实时同步,出差用iPad改bug也不怕忘记push了。

这里有个小技巧分享给大家, ## FAQ与避坑指南
根据我的经验,
Q:MySQL和SQLite选哪个?
根据我的经验, A:10人以下团队用SQLite更方便(备份只需复制单个文件),大团队建议MySQL避免锁表问题

Q:如何迁移现有Git仓库?
A:最简单的办法是在管理后台直接”迁移外部仓库”,实测800个commit的项目3分钟搞定

这里有个小技巧分享给大家, Q:Web界面卡顿怎么办?
你可能想知道… 试试这些优化:

  • 关闭不需要的统计功能
  • nginx反向代理启用gzip压缩
    让我解释一下为什么这很重要: - 调整app.ini中的缓存设置
    你可能想知道…
    根据我的经验, 延伸学习资源:
    • Gita官方文档(有中文版)
    • 《Git权威指南》配套实验仓库
    • Linux基金会提供的容器安全课程

下次如果遇到CI/CD集成问题想了解细节的话留言告诉我~或许可以专门写篇关于Drone CI和Gita搭配使用的实战教程?

[up主专用,视频内嵌代码贴在这]