搬瓦工部署 Gitea 私有 Git 仓库

Gitea 是一款轻量级的自托管 Git 服务,使用 Go 语言编写,界面类似 GitHub,功能包括代码托管、Issue 跟踪、Pull Request、Wiki 和内置 CI/CD。相比 GitLab 动辄需要 4GB 内存,Gitea 只需 256MB 即可运行,非常适合在搬瓦工 VPS 上部署私有代码仓库。

一、方案推荐

  • 个人使用:512MB 内存即可,适合少量仓库和单人使用。
  • 小团队:1 核 1GB 内存,可支持多人协作和数十个仓库。
  • 中等规模:2 核 2GB 内存,适合更多仓库和 CI/CD 任务。

具体方案参考 搬瓦工全部在售方案

二、前置准备

  • 已安装 Docker 和 Docker Compose,参考 Docker 安装教程
  • 域名已解析到服务器 IP(可选,也可用 IP 访问)。

三、创建项目目录

mkdir -p /opt/gitea && cd /opt/gitea

四、编写 Docker Compose 文件

nano docker-compose.yml
version: '3.8'

services:
  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword_change_me
      MYSQL_DATABASE: gitea
      MYSQL_USER: gitea
      MYSQL_PASSWORD: dbpassword_change_me
    volumes:
      - db_data:/var/lib/mysql

  gitea:
    image: gitea/gitea:latest
    restart: always
    depends_on:
      - db
    ports:
      - "3000:3000"
      - "2222:22"
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=db:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=dbpassword_change_me
      - GITEA__server__ROOT_URL=https://your-domain.com/
      - GITEA__server__SSH_DOMAIN=your-domain.com
      - GITEA__server__SSH_PORT=2222
    volumes:
      - gitea_data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro

volumes:
  db_data:
  gitea_data:

配置说明:

  • 3000:Web 界面端口。
  • 2222:SSH 端口(避免与系统 SSH 的 22 端口冲突)。
  • ROOT_URL:Gitea 的外部访问地址,替换为你的域名。
  • 所有密码请务必修改为强密码。

轻量方案:如果不想使用 MySQL,可以使用内置的 SQLite 数据库。删除 db 服务,将数据库相关环境变量改为:

- GITEA__database__DB_TYPE=sqlite3

五、启动服务

docker compose up -d

检查服务状态:

docker compose ps

六、完成安装向导

在浏览器中访问 http://服务器IP:3000,进入 Gitea 安装向导。大部分配置已通过环境变量设定,确认无误后点击"安装 Gitea"。

安装完成后注册的第一个用户将自动成为管理员。

七、配置 Nginx 反向代理

apt install nginx certbot python3-certbot-nginx -y
nano /etc/nginx/sites-available/gitea
server {
    listen 80;
    server_name your-domain.com;

    client_max_body_size 100M;

    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
certbot --nginx -d your-domain.com

client_max_body_size 设为 100M 以允许推送大文件,可根据实际需求调整。

八、SSH 访问配置

Gitea 容器使用 2222 端口提供 SSH 服务。使用 SSH 方式克隆仓库时,需要在 Git 客户端指定端口:

git clone ssh://git@your-domain.com:2222/用户名/仓库名.git

添加 SSH 公钥

在 Gitea Web 界面中,点击头像 > "设置" > "SSH / GPG 密钥" > "添加密钥",粘贴你的公钥:

# 查看本地公钥
cat ~/.ssh/id_rsa.pub

# 如果没有密钥对,先生成一个
ssh-keygen -t ed25519 -C "your-email@example.com"

配置 SSH 别名(简化操作)

编辑本地的 ~/.ssh/config 文件:

Host gitea
    HostName your-domain.com
    Port 2222
    User git
    IdentityFile ~/.ssh/id_rsa

之后可以简化克隆命令为:

git clone gitea:用户名/仓库名.git

九、仓库镜像

Gitea 支持从 GitHub、GitLab 等平台镜像仓库。你可以将 GitHub 上的重要仓库自动同步到自己的 Gitea 实例作为备份。

  1. 在 Gitea 中点击右上角"+",选择"新建仓库迁移"。
  2. 填写源仓库的 URL。
  3. 勾选"此仓库将是一个镜像"。
  4. 设置镜像同步间隔(默认 8 小时)。
  5. 点击"迁移仓库"。

Gitea 会定期从源仓库拉取更新,保持同步。

十、Gitea Actions(CI/CD)

Gitea 内置了兼容 GitHub Actions 语法的 CI/CD 系统。启用方法:

10.1 启用 Actions 功能

在 Docker Compose 中添加环境变量:

- GITEA__actions__ENABLED=true

重新部署:

docker compose down
docker compose up -d

10.2 部署 Runner

Actions 需要 Runner 来执行任务。使用 Docker 部署 Gitea Runner:

# 获取注册令牌:在 Gitea 管理后台 > 系统管理 > Runner
docker run -d --name gitea-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e GITEA_INSTANCE_URL=http://gitea:3000 \
  -e GITEA_RUNNER_REGISTRATION_TOKEN=你的注册令牌 \
  --network gitea_default \
  gitea/act_runner:latest

10.3 创建工作流

在仓库中创建 .gitea/workflows/ci.yml 文件:

name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run tests
        run: echo "Running tests..."

推送到仓库后,Gitea 会自动触发 CI 流水线。

十一、管理与维护

11.1 管理面板

管理员登录后,通过 "站点管理" 可以:

  • 管理用户和组织。
  • 查看所有仓库。
  • 配置系统设置。
  • 查看系统状态和日志。

11.2 数据备份

nano /opt/gitea/backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/opt/backups/gitea"
mkdir -p $BACKUP_DIR

# 使用 Gitea 内置的备份功能
docker exec gitea-gitea-1 gitea dump -c /data/gitea/conf/app.ini -f /data/gitea-dump-$DATE.zip

# 复制备份文件到宿主机
docker cp gitea-gitea-1:/data/gitea-dump-$DATE.zip $BACKUP_DIR/

# 备份数据库
docker exec gitea-db-1 mysqldump -u gitea -pdbpassword_change_me gitea > $BACKUP_DIR/gitea_db_$DATE.sql

# 删除容器内的临时备份
docker exec gitea-gitea-1 rm /data/gitea-dump-$DATE.zip

# 删除旧备份
find $BACKUP_DIR -mtime +30 -delete
chmod +x /opt/gitea/backup.sh
echo "0 3 * * * /opt/gitea/backup.sh" | crontab -

11.3 升级 Gitea

cd /opt/gitea
docker compose pull
docker compose down
docker compose up -d

十二、安全配置

禁止公开注册

添加环境变量:

- GITEA__service__DISABLE_REGISTRATION=true

限制仓库可见性

在管理面板中设置默认仓库可见性为私有,防止代码泄露。

配置防火墙

ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 2222/tcp
ufw allow ssh

十三、常见问题

SSH 连接失败

确认防火墙已开放 2222 端口,检查 SSH 公钥是否正确添加。使用以下命令测试连接:

ssh -T git@your-domain.com -p 2222

推送大文件失败

检查 Nginx 的 client_max_body_size 配置。如果需要管理大文件,建议配置 Git LFS。在 Gitea 中 LFS 默认已启用,只需在客户端安装 Git LFS:

git lfs install
git lfs track "*.psd"
git add .gitattributes

页面加载缓慢

如果仓库数量较多,可以在 Gitea 配置中启用缓存。添加环境变量:

- GITEA__cache__ENABLED=true
- GITEA__cache__ADAPTER=memory

总结

Gitea 是搭建私有代码仓库的理想选择,轻量高效、功能完备。通过 Docker 部署简单快捷,在搬瓦工最低配方案上也能流畅运行。结合 Gitea Actions 可以实现完整的 CI/CD 工作流。购买搬瓦工 VPS 时使用优惠码 NODESEEK2026 享受折扣,更多教程请参考 新手教程 页面。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。