VPS搭建Gitea自建Git代码仓库:从安装到HTTPS和SSH配置完整教程

Docker Compose一条命令跑起Gitea,Nginx反代HTTPS、SSH推送配置和自动备份
发布于
2

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.yml
version: '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/gitea
server {
    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足够存几年的代码(除非仓库里有二进制大文件)。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600

按网上的教程配了SSH密钥、禁了密码登录,结果退出后连不上了——这种翻车事故每年都在重复上演。本文把SSH配置中的常见翻车点和恢复方法系统讲一遍。 翻车一:改了配置文件重启SSH后连不上 最经典的翻车:改了/etc/ssh/sshd_con