Skip to content

Gitea 完整部署教程

从零搭建 Gitea 代码托管平台


一、架构设计

1.1 典型部署架构

┌─────────────────────────────────────────────────────────────────────┐
│                         完整网络架构                                  │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│   📱 笔记本 ── EasyTier ── ☁️ 云服务器 ── 公网用户                   │
│       │                   │                                         │
│       │                   └── Gitea (公网: gitea.example.com)       │
│       │                                                                      │
│       └── EasyTier 内网 ── 🏠 内网 Gitea (内网: 192.168.1.x)         │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

1.2 两种部署方案

方案Gitea 位置公网访问内网访问推荐场景
A内网✅ EasyTier数据隐私优先
B云服务器✅ EasyTier公网访问优先

二、云服务器部署 Gitea

2.1 原理讲解

为什么用 Docker?

  • 隔离环境,不影响其他服务
  • 便于迁移和备份
  • 一键部署

为什么用 Nginx 反向代理?

  • Gitea 自带 HTTP 服务,但直接暴露 3000 端口不安全
  • Nginx 可以:HTTPS、负载均衡、限流、访问控制

2.2 开放端口

bash
# 云服务器防火墙
sudo ufw allow 22/tcp    # SSH
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS

# 云服务器安全组也要开放!

2.3 创建目录

bash
mkdir -p ~/gitea/{data,config}

2.4 配置 Docker Compose

bash
cat > ~/gitea/docker-compose.yml << 'EOF'
services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    ports:
      - "3000:3000"
      - "2222:22"
    volumes:
      - ./data:/data
      - ./config:/config
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__server__DOMAIN=git.example.com
      - GITEA__server__ROOT_URL=https://git.example.com/
      - GITEA__server__HTTP_PORT=3000
      - GITEA__server__SSH_PORT=2222
      - GITEA__server__DISABLE_SSH=false
      - GITEA__security__INSTALL_LOCK=true
    restart: unless-stopped
EOF

2.5 启动 Gitea

bash
cd ~/gitea
docker compose up -d

# 查看状态
docker compose ps

# 查看日志
docker logs gitea -f

2.6 初始化配置

  1. 浏览器访问:https://git.example.com(或 http://你的服务器IP:3000
  2. 首次访问会跳转到初始化页面

配置建议

配置项建议值
数据库类型SQLite3(简单)或 PostgreSQL
域名git.example.com
SSH 端口2222
HTTP 端口3000

2.7 配置 Nginx 反向代理

bash
cat > ~/gitea/nginx.conf << 'EOF'
server {
    listen 80;
    server_name git.example.com;
    
    location / {
        proxy_pass http://localhost: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;
    }
}
EOF

需要配置 HTTPS 证书(参考 VitePress 部署教程)。


三、配置 SSH 访问

3.1 本地生成 SSH 密钥

bash
# 本地电脑执行
ssh-keygen -t ed25519 -C "your-email@example.com"

3.2 添加公钥到 Gitea

  1. 登录 Gitea
  2. 点击头像 → 设置SSH 密钥
  3. 添加公钥(~/.ssh/id_ed25519.pub 内容)

3.3 配置 SSH

bash
# 本地电脑配置 SSH
cat >> ~/.ssh/config << 'EOF'
Host gitea
    HostName git.example.com
    User git
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
EOF

3.4 测试连接

bash
ssh -T git@gitea
# 应该显示:Hi xxx! You've successfully authenticated...

四、内网访问(通过 EasyTier)

如果 Gitea 部署在内网,通过 EasyTier 访问:

  1. 确保本地电脑已加入 EasyTier 网络
  2. 配置 SSH 访问内网 IP:
bash
cat >> ~/.ssh/config << 'EOF'
Host gitea-internal
    HostName 192.168.1.x    # Gitea 内网 IP
    User git
    Port 22
    IdentityFile ~/.ssh/id_ed25519
EOF

五、常用命令

bash
# 启动
cd ~/gitea && docker compose up -d

# 停止
docker compose down

# 重启
docker compose restart

# 查看日志
docker logs gitea -f

# 进入容器(调试用)
docker exec -it gitea /bin/bash

六、备份与恢复

备份

bash
# 备份数据目录
tar -czvf gitea-backup-$(date +%Y%m%d).tar.gz ~/gitea/data/

恢复

bash
# 解压备份
tar -xzvf gitea-backup-20240101.tar.gz -C ~/

# 重启服务
cd ~/gitea && docker compose restart

基于 VitePress 构建