news 2026/7/22 2:57:15

自建代码仓库:手把手用 Gitea 搭一个自己的 Git 服务器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自建代码仓库:手把手用 Gitea 搭一个自己的 Git 服务器

每个开发者电脑里都有那么几个"见不得人"的项目:写到一半的练手代码、存着各种私人配置的 dotfiles、不想公开但又想在多台电脑间同步的笔记仓库。扔到公共代码托管平台吧,私有仓库总有点不自在;只在本地放着吧,换台电脑就抓瞎,还没有备份。

我的解法是在自己的云服务器上搭一个私有 Git 服务,用的是 Gitea——一个用 Go 写的开源代码托管平台,界面和主流平台长得很像,上手零成本,关键是极轻量,1 核 1G 的机器跑得飞快。这篇把完整搭建流程写下来,跟着做十五分钟就能用上。

一、准备工作

Gitea 是出了名的省资源,官方说最低 256MB 内存就能跑,入门款服务器完全够用:

项目建议
配置1 核 1G 起步,个人用绰绰有余
系统Ubuntu 22.04 LTS
磁盘20G 起,代码仓库普遍不大
需要放行的端口3000(Web 界面)、222(SSH 推拉代码)

我自己用的是雨云rainyun-com的 1 核 1G 机器,跑 Gitea 大半年了,日常占用不到两百兆内存,注册填码:2026off,可领5折,一个月十来块钱。大厂轻量服务器节点多是优势,同配置月付贵一些,按预算选就行。

二、安装 Docker

用 Docker 部署最干净,Ubuntu 22.04 自带源里就有:

sudoaptupdatesudoaptinstall-ydocker.iosudosystemctlenable--nowdocker

三、一条命令跑起 Gitea

Gitea 官方维护了 Docker 镜像(可以去 Docker Hub 搜 gitea/gitea 看说明):

dockerrun-d\--namegitea\--restart=always\-p3000:3000\-p222:22\-vgitea-data:/data\gitea/gitea:1

参数说明:

  • -p 3000:3000:Web 界面端口
  • -p 222:22:容器内 SSH 映射到宿主机 222,推拉代码走这个端口,和系统自己的 SSH(22 端口)错开
  • -v gitea-data:/data:仓库、配置、数据库全在这个卷里,容器删了重建数据不丢

然后去云服务器控制台的安全组放行 3000 和 222 两个端口。

四、初始化配置

浏览器地址栏输入你的服务器 IP 加端口(形如服务器IP:3000),会进入安装向导,几个关键项:

  • 数据库:选 SQLite3,个人用完全够,零额外维护
  • SSH 服务器端口:改成 222(刚才映射的端口),这步别漏,不然网页里显示的仓库地址端口是错的
  • 管理员账号:在页面底部展开填上,不填的话第一个注册的人会自动成为管理员

点安装,几秒钟后就能看到熟悉的主界面了。

五、把本地代码推上去

先把自己的 SSH 公钥加到 Gitea:网页右上角头像 → 设置 → SSH 密钥,粘贴本地~/.ssh/id_rsa.pub的内容(没有的话用ssh-keygen生成一个)。

然后在 Gitea 网页上新建一个仓库,回到本地项目目录:

gitinitgitadd.gitcommit-m"first commit"gitremoteaddorigin ssh://git@服务器IP:222/你的用户名/仓库名.gitgitpush-uorigin main

刷新网页,代码已经躺在自己的服务器上了。以后换电脑、重装系统,git clone一下就全回来。

如果你已经有一个在别的平台上的仓库想搬过来,也不用重新 init,直接改远程地址再全量推就行:

gitremote set-url origin ssh://git@服务器IP:222/你的用户名/仓库名.gitgitpush--allgitpush--tags

六、网页端不只是个仓库列表

Gitea 的网页端功能比想象中全,几个高频用法:

  • Issue 和 PR:和主流平台一样的协作流程,小团队够用了
  • Wiki:每个仓库自带文档区,项目的使用说明顺手就写了
  • Web 编辑器:临时改个错别字不用拉代码,网页上直接改直接提交
  • 迁移工具:新建仓库时选"迁移",粘贴别处仓库的地址,整个仓库含提交记录一把梭搬过来

对我个人来说最实用的是"多设备同步"这个场景:台式机写一半的配置,笔记本上git pull接着改,改完推回去,两边永远一致。配合提交历史,误删了什么东西随时能翻回来,比 U 盘和网盘靠谱得多。

七、日常运维两件事

备份:所有数据都在gitea-data这个卷里,定期打包就能万事大吉:

dockerrun--rm-vgitea-data:/data-v~/backup:/backup ubuntutarczf /backup/gitea-$(date+%Y%m%d).tar.gz-C/data.

升级:Gitea 更新挺勤快,升级就是拉新镜像重建容器,数据不受影响:

dockerpull gitea/gitea:1dockerstop gitea&&dockerrmgitea# 重新执行第三步的 docker run 命令

常见问题

问:和直接用公共托管平台的私有仓库比,图什么?
答:一是数据完全在自己手里,断网、账号出问题都不怕;二是没有私有仓库数量和协作者限制;三是访问速度看自己服务器,国内机器拉取很快。当然代价是你要自己维护它——好在 Gitea 基本不用管。

问:三五个人的小团队能用吗?
答:完全能。建个组织,把成员拉进来,按仓库分配权限,Issue、PR、代码评审这些都有。雨云rainyun-com的 1 核 1G 带一个小团队没压力,月付就十几块,人多了再升配置。

问:想要 CI 自动构建怎么办?
答:Gitea 有兼容主流语法的 Actions 功能,配一个 act_runner 就能跑流水线,这篇篇幅有限就不展开了,先把仓库跑起来。

总结

自建 Git 服务这件事,听起来硬核,实际就是一条 Docker 命令加十分钟初始化。换来的东西很实在:私人代码有了安稳的家,多设备同步、版本管理、自动备份一套全齐。如果你也有几个"不想给别人看但又怕丢"的项目,今晚就可以搭起来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 2:57:14

JSON与JSONPATH:数据查询与处理核心技术解析

1. JSON与JSONPATH基础解析JSON(JavaScript Object Notation)作为轻量级数据交换格式,已经成为现代Web开发和API设计的标配。我第一次接触JSON是在2012年开发电商平台接口时,当时XML还是主流,但JSON简洁的键值对结构和…

作者头像 李华
网站建设 2026/7/22 2:55:57

ASP.NET Core集成Swagger实现高效API文档管理

1. 项目概述:为什么API文档如此重要?在开发现代Web API时,良好的文档就像城市中的路标系统。想象一下,你开发了一个功能强大的API,但其他开发者却不知道如何调用它——这就像建造了一座没有出口标识的迷宫。ASP.NET Co…

作者头像 李华
网站建设 2026/7/22 2:55:31

Unity集成Chord实现实时视频内容识别:本地AI驱动的游戏交互新范式

1. 项目概述:当游戏遇见“看懂”视频的AI最近在做一个挺有意思的Unity项目,核心需求是让游戏能“看懂”玩家摄像头里的实时画面。比如,玩家用手机对着客厅,游戏就能识别出电视里正在播放的足球比赛,并自动在游戏里生成…

作者头像 李华
网站建设 2026/7/22 2:54:28

计算机毕业设计之学生成绩管理系统

在各学校的教学过程中,学生的成绩管理是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及,“基于网络的学习模式”正悄无声息的改变着传统的成绩管理模式,学生成绩管理系统的研究和设计也成为教育技术领域的热点课题。采用当前流…

作者头像 李华
网站建设 2026/7/22 2:54:10

Python表达式求值原理与实现详解

1. 表达式求值的基本概念表达式求值是编程语言中最基础也最重要的功能之一。在Python中,表达式求值遵循从左到右的顺序,但在处理赋值操作时,右侧会先于左侧被求值。这种设计确保了表达式能够按照预期的算术优先级顺序进行计算。Python中的表达…

作者头像 李华
网站建设 2026/7/22 2:54:00

从轨迹验证到行为指纹:极验滑块验证码逆向攻防演进与实战

1. 项目概述:一场持续演进的“猫鼠游戏”在网络安全和自动化测试领域,极验滑块验证码的“攻防”演进史,堪称一部精彩绝伦的实战教科书。它不仅仅是一个简单的“拖动滑块完成拼图”的交互,其背后是验证码服务提供商与自动化脚本&am…

作者头像 李华