Ubuntu 虚拟机上搭建属于自己的代码托管平台 Gitea
为什么要搭代码托管平台?
代码的保险箱+时光机:写代码怕删错、改崩?它能记住每一次修改,删错了一键恢复到之前的正常版本,不用找备份
团队协作不打架:几个人一起写代码,不会出现你改的内容被我覆盖的情况,每个人在自己的小空间写,最后轻松合并
自动化的开关:后续学自动化部署,比如代码写完自动测试、自动上线,它是第一步,相当于发令枪
简单说:像代码管家
前期准备
已安装 Ubuntu 虚拟机,确保能正常上网
宿主机能和 Ubuntu 连通
步骤一:Ubuntu 环境准备
1.1 更新系统+安装基础工具
系统更新,避免后续安装出错:
sudo apt update && sudo apt upgrade -y安装 Git:代码管理的基础工具
sudo apt install git -y1.2 安装 Docker
# 安装 Docker 依赖
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
# 添加 Docker 官方密钥(放心,安全的)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker 核心程序(Docker Compose 依赖 Docker)
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io -y
# 启动 Docker 并设置开机自启(下次开机不用手动启动)
sudo systemctl start docker
sudo systemctl enable docker
# 给当前用户授权(避免每次输 docker 都要加 sudo)
sudo usermod -aG docker $USER提示:最后一步执行完,一定要关闭当前终端,重新打开一个,不然后续输 docker 命令容易报错
1.3 验证是否安装成功
重新打开终端后,输下面两个命令,能看到版本号就说明成功了:
# 验证 Git 版本
git --version
# 验证 Docker 版本
docker --version
# 验证 Docker Compose v2 是否自带
docker compose version结果图

步骤二:Docker Compose 部署 Gitea
2.1 创建文件夹+配置文件
创建一个专门的文件夹,用来保存 Gitea 的配置和代码,避免后续数据丢失:
mkdir -p ~/gitea/{yoko,faye}
#添加权限
chmod -R 755 ~/gitea
# 进入 gitea 文件夹(后续所有操作都在这个文件夹里)
cd ~/gitea
# 创建 Docker Compose 配置文件
cat > ~/gitea/compose.yml << 'EOF'
version: '3'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: always
ports:
- "3000:3000" # Web 访问端口(后续浏览器要用)
- "222:22" # SSH 端口(后续免密码推送要用)
volumes:
- ./yoko:/var/lib/gitea # 数据挂载(yoko文件夹存代码、用户信息)
- ./faya:/etc/gitea # 配置挂载(faya文件夹存Gitea设置)
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro" > docker-compose.yml
EOF
# 解决 Docker 启动时权限问题(出现:permission denied)
sudo chmod 666 /var/run/docker.sock解释:
命令里的
/{yoko,faya}是快捷写法,不用分开输两次命令作用:在
gitea文件夹里,一次性创建两个子文件夹,分别叫 yoko 和 faya,相当于省了一步操作yoko: 用来存你的代码、用户信息
faya: 用来存 Gitea 的配置(比如端口、账号),都是为了防止后续数据丢失
结果图

如果出现镜像拉不下来/超时的情况
sudo tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://mirrors.tuna.tsinghua.edu.cn/docker-registry/"
]
}
EOF
# 重启Docker服务,使镜像源配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker2.2 启动 Gitea
确保当前终端在 ~/gitea 文件夹下
# 启动 Gitea 后台运行:-d
docker compose up -d结果图

2.3 验证 Gitea 是否启动成功
输下面的命令,能看到 gitea 相关的内容,且状态是Up,就说明启动成功了:
docker compose ps结果图

步骤三:Gitea 网页初始化
宿主机上操作,不用在 Ubuntu 里弄
3.1 找到 Ubuntu 的 IP 地址
# Ubuntu 终端,输下面的命令
ip a结果图

3.2 访问 Gitea 网页
打开宿主机的浏览器,在地址栏输入:http://你的UbuntuIP:3000
如图:

3.3 关键配置
页面上有很多配置项,不用管大部分,只改下面这几个,其余保持默认:
步骤四:创建第一个代码仓库
登录 Gitea 后:
点击页面右上角的「+」号,新建仓库

仓库名称:自己取
仓库类型:自己选择
其他选项都不用改,点击最下方的创建仓库
结果图

创建完成后,页面会显示一个仓库地址,先复制http开头的那个地址,存到记事本里,后面要用
如图

步骤五:本地代码推送
这一步在宿主机上操作,不管是 Windows、macOS 还是 Linux,步骤都一样,全程用终端/命令提示符,和部署方式无关
5.1 新建文件夹+测试文件
在你的电脑上,新建一个文件夹
打开这个文件夹,新建一个文本文档,命名为 README.md(后缀是 .md,不是 .txt)
在文档里随便写点内容,保存关闭
如图

5.2 方式1:用 Visual Studio Code 推送
你的电脑已安装 VS Code 没安装的话,去官网下载安装,免费且简单
打开 VS Code → 点击新建的 gitea 文件夹,打开后,把 README.md 文件拖进VS Code

首次使用 VS Code 操作 Git,会提示“安装 Git 插件”,点击 安装

点击 VS Code 左侧的 源代码管理图标,快捷键 Ctrl+Shift+G

点击 初始化仓库 ,对应终端的
git init命令,此时会提示“已初始化 Git 仓库”,左侧会显示 README.md 文件,标有 U,代表未跟踪

点击 README.md 文件右侧的
+号是暂存更改,对应终端的git add .命令,此时文件标有 A,代表已暂存

在上侧输入框中,输入提交备注 如:
My first test file,输入完成后点击上方的√,提交更改,对应终端的git commit命令

提交完成后,点击左侧 …→远程→添加远程仓库

在弹出的输入框中,输入远程仓库名称,默认填 origin 即可,不用改,按回车
再弹出输入框,粘贴你之前复制的 Gitea 仓库 http://你的UbuntuIP:3000/admin/demo.git,按回车,完成远程仓库关联
最后,点击左侧 …→ 推送,对应终端的
git push命令,弹出窗口输入 Gitea 的用户名admin和密码你设置的管理员密码,点击确定,等待推送完成即可,默认推送至 main 分支,无需额外操作

方式2:用终端/命令提示符推送
打开文件夹,按住 Shift 键,右键点击空白处,选择「在此处打开终端」Windows 或 新建终端(macOS/Linux)
在终端里,进入你所创建的文件夹,输入以下命令,注意:第4条命令要替换成你刚才复制的仓库地址
# 1. 初始化本地仓库(告诉电脑,这个文件夹要用来存代码)
git init
# 2. 将测试文件添加到仓库(相当于“打包”文件)
git add .
# 3. 提交代码(备注一下这次提交的内容,括号里的内容可以改)
git commit -m "Initial commit: My first test file"
# 4. 关联 Gitea 仓库(替换成你复制的 HTTP 地址)
git remote add origin http://你的UbuntuIP:3000/你的用户名/the-first-repo.git
# 5. 推送代码到 Gitea(首次推送加 -u,后续不用)
git push -u origin main5.3 关键提示
执行第5条命令后,会弹出一个窗口,让你输入 Gitea 的「用户名」和「密码」(就是你之前设置的管理员账号密码),输入后点击确定,等待推送完成
如果看到类似下面的内容,就说明推送成功了:

进阶操作:配置 SSH 密钥(免密码推送,可选)
如果觉得每次推送都要输账号密码麻烦,可以配置 SSH 密钥,配置后推送不用输密码
1. 宿主机生成 SSH 密钥
打开宿主机的终端
ssh-keygen -t ed25519 -C "你的Gitea注册邮箱"
# 查看密钥内容 (保存后续有用)
cat ~/.ssh/id_ed25519.pub密钥生成路径(找到这个文件):
Windows:
C:\Users\你的用户名\.ssh\id_ed25519.pubmacOS/Linux:
~/.ssh/id_ed25519.pub
2. 复制公钥到 Gitea
用记事本打开上面的 .pub 文件,全选里面的内容,复制;
登录 Gitea → 点击右上角头像 → 选择设置 → 左侧找到 SSH/GPG 密钥 → 点击SSH 增加密钥
标题随便填(比如“宿主机密钥”),将复制的内容粘贴到密钥内容框,点击增加密钥

3. 测试免密码推送
回到宿主机的终端,输入下面的命令(替换成你的 SSH 地址,在 Gitea 仓库页面复制SSH开头的地址):
# 先移除之前的 HTTP 地址
git remote remove origin
# 添加 SSH 地址(替换成你的地址,格式:ssh://git@UbuntuIP:222/用户名/demo.git)
git remote add origin ssh://git@172.16.197.133:222/admin/demo.git
# 测试推送(不用输密码)
git push origin main出现以下内容代表 SSH 密钥配置好了
