GitHub私有仓库要钱、Gitee限制越来越多、公司代码放别人服务器上不放心——在VPS上用Gitea搭一个私有的Git代码仓库,轻量开源,功能够用。整个部署过程不超过二十分钟。
为什么选Gitea而不是GitLab
GitLab功能比Gitea全——CI/CD、容器仓库、项目管理这些都有。但代价是吃资源:最小安装要4GB内存,1核2G的VPS跑不起来。Gitea是用Go写的,二进制文件不到100MB,1核1G内存就能流畅跑,对个人开发者和小组来说完全够用。
Gitea的功能:代码仓库管理(和GitHub一样的界面)、Issue和PR、Wiki、代码片段、组织管理、Webhook(push后自动触发CI/CD)、支持Git LFS大文件存储。日常开发需要的基本都有。
第一步:VPS安装Docker版Gitea
用Docker Compose部署最快,不需要装数据库和配置环境:
mkdir gitea && cd gitea
nano docker-compose.ymlversion: '3'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:22" # SSH推送用这个端口docker compose up -d打开浏览器访问 http://你的VPS公网IP:3000,首次访问会进安装向导。数据库选SQLite3(单用户或小团队够用,零配置),域名填你的域名或IP,基础URL填 http://你的域名:3000。管理员账号在这里创建——这是第一个也是最高权限的用户。
雨云入门VPS月付几块钱就能跑Gitea,优惠码 admin01 首月五折。建议用2G内存的配置——虽然1G够用,但仓库多了之后Git操作还是会吃一点内存。
第二步:配置HTTPS(Nginx反代)
3000端口加HTTP明文传输不够安全,用Nginx反代加SSL证书:
apt install nginx certbot python3-certbot-nginx -y
nano /etc/nginx/sites-available/giteaserver {
listen 80;
server_name git.你的域名.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
# 申请免费SSL证书
certbot --nginx -d git.你的域名.com然后在Gitea的配置文件(data/gitea/conf/app.ini)里改ROOT_URL和SSH_DOMAIN:
[server]
SSH_DOMAIN = git.你的域名.com
ROOT_URL = https://git.你的域名.com
DOMAIN = git.你的域名.com第三步:配置SSH推送
Gitea容器里内置了SSH服务器(监听2222端口),本地git push走SSH协议:
# 生成SSH密钥(如果还没有)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 在Gitea网页端 → 设置 → SSH/GPG密钥 → 粘贴公钥内容
cat ~/.ssh/id_ed25519.pub
# 克隆仓库(注意端口是2222)
git clone ssh://git@git.你的域名.com:2222/你的用户名/仓库名.git
# 或者在~/.ssh/config里配置简化连接
Host gitea
HostName git.你的域名.com
Port 2222
User git
IdentityFile ~/.ssh/id_ed25519
# 配置后用短命令
git clone git@gitea:你的用户名/仓库名.git第四步:备份策略
Gitea的所有数据(代码仓库、用户信息、Issue等)都在 ./data 目录下。备份就是把这个目录打包:
# 定时备份脚本
#!/bin/bash
cd /path/to/gitea
docker compose exec gitea gitea dump -c /data/gitea/conf/app.ini
tar -czf gitea-backup-$(date +%Y%m%d).tar.gz data/
# 把这个tar.gz同步到对象存储或另一台VPS数据无价——GitHub/GitLab会帮你操心备份,自建的Gitea是自己负责。仓库数据丢了就是真的丢了。
Gitea和GitHub/Gitee的功能对比
| 功能 | Gitea | GitHub免费版 | Gitee免费版 |
|---|---|---|---|
| 私有仓库 | 无限 | 无限 | 有限制 |
| CI/CD | 需接外部(Gitea Actions) | GitHub Actions 2000分钟 | 有 |
| 存储空间 | 看你VPS硬盘 | 无限(单文件100MB限制) | 有限 |
| 协作人数 | 不限 | 不限 | 有限 |
| 访问速度 | 看VPS线路 | 国内慢 | 快 |
常见问题
Gitea忘记管理员密码怎么办?
进Gitea容器重置:docker exec -it gitea gitea admin user change-password –username 你的用户名 –password 新密码。需要有容器的Shell权限。
代码推送到Gitea报Permission denied?
先确认SSH公钥在Gitea网页端添加了。再确认SSH端口是2222不是22。最后检查仓库权限——私有仓库只有仓库成员才能push,检查你的账号是否有写权限。
Gitea占用多少资源?
空载时内存约200MB,有几个仓库和用户后300-500MB。CPU基本不占(Go语言的优势)。一块10GB硬盘的小VPS足够存几年的代码(除非仓库里有二进制大文件)。






