VPS 搭建私有 Git 仓库 (2025) - Gitea 极速部署指南

作为开发者,代码是核心资产。虽然 GitHub 很好用,但免费私有仓库限制多、大文件传输慢、且数据完全依赖第三方。
2025 年,在自己的 VPS 上搭建一个私有 Git 服务已成为主流选择。本文将推荐 Gitea —— 一个轻量级、超快、功能强大的开源 Git 服务。它不仅比 GitLab 省资源(256MB 内存就能跑),还比 Gogs 更新更活跃、功能更全。
本文将教你使用 Docker Compose 快速部署 Gitea,并配置 HTTPS 访问和 SSH 端口穿透,打造一个完全属于你的“私有 GitHub”。
在 2025 年,Gitea 依然是自托管 Git 服务的首选,理由很简单:
- 极度轻量:Go 语言编写,编译成单文件,极低资源占用(树莓派都能跑)。
- 功能完整:Pull Requests、Issues、Wiki、Kanban、LFS、Packages 一应俱全。
- 内置 CI/CD:支持 Gitea Actions,语法兼容 GitHub Actions,这对于自动化构建至关重要。
- 活跃社区:相比已经“停滞”的 Gogs,Gitea 迭代速度快,安全性更有保障(Gogs 近期曾曝出高危漏洞)。
- VPS 配置:1 核 1GB 内存即可(推荐 2 核 2GB 以获得更佳体验)。
- 系统:Ubuntu 20.04+ / Debian 11+。
- 软件:已安装 Docker 和 Docker Compose。
去你的域名服务商(如 Cloudflare)添加一条 A 记录:
git.yourdomain.com->你的 VPS IP- 代理状态:关闭(仅 DNS),让 Caddy 自动申请 SSL。
我们将使用 Docker Compose 一键拉起 Gitea 和 Caddy(作为反向代理)。
mkdir -p ~/gitea/{data,config,caddy/data,caddy/config}
cd ~/gitea
创建一个 docker-compose.yml 文件:
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3 # 个人使用 SQLite 足够,无需独立数据库容器
restart: always
networks:
- gitea
volumes:
- ./data:/data # 持久化数据
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
# - "3000:3000" # Web端口,通过 Caddy 代理,无需对外暴露
- "2222:22" # SSH端口,映射到主机的 2222,避免冲突
caddy:
image: caddy:latest
container_name: caddy
restart: always
networks:
- gitea
ports:
- "80:80"
- "443:443"
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile
- ./caddy/data:/data
- ./caddy/config:/config
创建 ./caddy/Caddyfile,写入你的域名配置:
git.yourdomain.com {
reverse_proxy server:3000
}
注意:将
git.yourdomain.com替换为你实际的域名。
docker compose up -d
访问 https://git.yourdomain.com,你将看到安装向导。只需修改以下关键项,其他保持默认即可:
- 数据库设置:保持 SQLite3。
- 一般设置:
- 站点名称:给你的仓库起个名字,比如 "My Private Git"。
- SSH 服务端口:改为 2222(非常重要!因为我们在 Docker 里把内部的 22 映射到了外部的 2222)。
- SSH 服务域名:填写你的域名
git.yourdomain.com。 - 基础 URL:
https://git.yourdomain.com/。
- 管理员帐号设置:务必创建一个管理员账号,不要留空。
点击“立即安装”,几秒钟后,你的私有 Git 服务就上线了!
很多人在自建 Git 时会卡在 SSH 克隆上,因为 VPS 的 22 端口通常被 SSH 登录占用了。我们在 docker-compose.yml 中将 Gitea 的 SSH 端口映射到了 2222。
你的 Clone 地址会长这样:
ssh://[email protected]:2222/username/repo.git
注意 URL 中多了 :2222。
如果你不想每次都输入端口号,可以在本地电脑的 ~/.ssh/config 文件中配置:
Host git.yourdomain.com
HostName git.yourdomain.com
User git
Port 2222
IdentityFile ~/.ssh/id_rsa
配置后,你就可以像用 GitHub 一样克隆了(无需手动加端口):
git clone [email protected]:username/repo.git
Gitea 1.19+ 版本引入了 Actions,语法兼容 GitHub Actions。要启用它,我们需要添加一个 Runner。
在 services 下添加 runner 服务:
runner:
image: gitea/act_runner:latest
container_name: act_runner
restart: always
depends_on:
- server
volumes:
- ./runner-data:/data
- /var/run/docker.sock:/var/run/docker.sock
environment:
- GITEA_INSTANCE_URL=http://server:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=<你的Token>
- GITEA_RUNNER_NAME=vps-runner
- 进入 Gitea 管理面板 -> Actions -> Runners -> Create new Runner,复制 Token。
- 替换上面的
<你的Token>。 - 重启容器:
docker compose up -d。
现在,你可以在仓库里创建 .gitea/workflows/demo.yaml,开始体验自动构建了!
数据都在 ~/gitea/data 目录下,包含数据库文件 (sqlite.db) 和 Git 仓库文件。
备份命令:
# 打包整个 data 目录
tar -czvf gitea-backup-$(date +%Y%m%d).tar.gz ~/gitea/data
建议配合 Rclone 自动上传到云端对象存储,确保数据万无一失。
通过 Docker + Gitea,我们只用了不到 500MB 的内存,就拥有了一个媲美 GitHub 的全功能私有代码托管平台。
- 安全:代码在自己手里,不用担心第三方服务条款变更。
- 高速:局域网或优质 VPS 加持,大文件 Push/Pull 飞快。
- 省心:SQLite + Docker,维护成本几乎为零。
这是每一位开发者构建个人知识库和代码库的最佳起点。