Skip to content

Gitea 部署指南

概述

Gitea 是一个轻量级的 DevOps 平台软件,从开发计划到产品成型的整个软件生命周期,它都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。Gitea 最初是从 Gogs 分支而来,几乎所有代码都已更改。

Gitea 简介

核心功能

  • Git 托管: 完整的 Git 仓库管理
  • 代码审查: Pull Request 和代码审查
  • 项目管理: Issue 追踪和看板
  • CI/CD: 内置 Actions 支持
  • 包管理: 支持多种包格式
  • Wiki: 项目文档管理

技术特点

  • 轻量级: 最低配置要求低,适合小型服务器
  • 跨平台: 支持 Linux、macOS、Windows
  • 易安装: 单一二进制文件,安装简单
  • 开源免费: MIT 许可证,完全开源

安装部署

系统要求

yaml
最低配置:
  CPU: 1核
  内存: 512MB
  磁盘: 10GB

推荐配置:
  CPU: 2核+
  内存: 2GB+
  磁盘: 50GB+

软件依赖:
  - Git (>= 2.0)
  - SSH Server
  - 数据库 (可选: MySQL/PostgreSQL/SQLite3)

CentOS 安装

1. 安装 Git

bash
# 更新系统
sudo yum update -y

# 安装依赖
sudo yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel

# 下载 Git 源码
wget https://github.com/git/git/archive/refs/tags/v2.45.1.tar.gz
tar -zxf v2.45.1.tar.gz
cd git-*

# 编译安装
make prefix=/usr/local all
sudo make prefix=/usr/local install

# 验证版本
git --version

2. 创建用户

bash
# 创建 git 用户
groupadd git
useradd git -g git

# 创建目录
mkdir -p /usr/local/gitea
mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea
chmod -R 750 /var/lib/gitea

3. 下载 Gitea

bash
cd /usr/local/gitea

# 下载最新版本
wget -O gitea https://dl.gitea.com/gitea/1.21.3/gitea-1.21.3-linux-amd64

# 设置权限
chmod +x gitea
chown git:git gitea

4. 配置系统服务

创建 /etc/systemd/system/gitea.service:

ini
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
After=mysqld.service
After=postgresql.service

[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea
ExecStart=/usr/local/gitea/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target
bash
# 启动服务
systemctl daemon-reload
systemctl enable gitea
systemctl start gitea

# 查看状态
systemctl status gitea

Debian/Ubuntu 安装

1. 安装依赖

bash
sudo apt update
sudo apt install -y git

2. 创建用户

bash
sudo adduser --system --shell /bin/bash \
  --gecos 'Git Version Control' \
  --group \
  --disabled-password \
  --home /home/git git

3. 下载安装

bash
sudo mkdir -p /usr/local/gitea
cd /usr/local/gitea

wget -O gitea https://dl.gitea.com/gitea/1.21.3/gitea-1.21.3-linux-amd64
sudo chmod +x gitea
sudo chown git:git gitea

4. 配置服务

bash
sudo systemctl enable gitea
sudo systemctl start gitea

Docker 安装

使用 Docker Compose

yaml
# docker-compose.yml
version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.21.3
    container_name: gitea
    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=gitea
    restart: always
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"
    depends_on:
      - db

  db:
    image: mysql:8
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
    networks:
      - gitea
    volumes:
      - ./mysql:/var/lib/mysql
bash
# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f

配置管理

初始配置

访问 http://your-server:3000 进行初始配置:

yaml
数据库设置:
  数据库类型: SQLite3 / MySQL / PostgreSQL
  主机: localhost:3306
  用户名: gitea
  密码: your-password
  数据库名称: gitea

应用设置:
  域名: your-domain.com
  SSH 端口: 22
  HTTP 端口: 3000
  基础 URL: http://your-domain.com/

可选设置:
  管理员账号: admin
  管理员密码: your-admin-password
  管理员邮箱: admin@example.com

配置文件

配置文件位于 /etc/gitea/app.ini/var/lib/gitea/custom/conf/app.ini:

ini
[server]
APP_DATA_PATH = /var/lib/gitea/data
DOMAIN = your-domain.com
HTTP_PORT = 3000
ROOT_URL = http://your-domain.com/
DISABLE_SSH = false
SSH_PORT = 22
START_SSH_SERVER = false

[database]
DB_TYPE = mysql
HOST = 127.0.0.1:3306
NAME = gitea
USER = gitea
PASSWD = your-password

[repository]
ROOT = /var/lib/gitea/data/gitea-repositories

[security]
INSTALL_LOCK = true
SECRET_KEY = your-secret-key
INTERNAL_TOKEN = your-internal-token

[service]
DISABLE_REGISTRATION = false
REQUIRE_SIGNIN_VIEW = false

[mailer]
ENABLED = true
HOST = smtp.example.com:587
FROM = gitea@example.com
USER = your-email@example.com
PASSWD = your-email-password

反向代理配置

Nginx 配置

nginx
server {
    listen 80;
    server_name your-domain.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;
        
        client_max_body_size 100M;
    }
}

Apache 配置

apache
<VirtualHost *:80>
    ServerName your-domain.com
    
    ProxyPreserveHost On
    ProxyRequests Off
    
    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>

HTTPS 配置

bash
# 使用 Let's Encrypt
sudo apt install certbot python3-certbot-nginx

# 获取证书
sudo certbot --nginx -d your-domain.com

# 自动续期
sudo certbot renew --dry-run

使用指南

创建仓库

bash
# 通过网页创建
# 1. 登录 Gitea
# 2. 点击 "+" 按钮
# 3. 选择 "新建仓库"
# 4. 填写仓库信息

# 通过命令行
curl -X POST \
  -H "Authorization: token YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"my-repo","private":true}' \
  http://your-domain.com/api/v1/user/repos

用户管理

bash
# 创建用户
gitea admin user create --username newuser --password password --email user@example.com

# 修改密码
gitea admin user change-password --username newuser --password newpassword

# 删除用户
gitea admin user delete --username newuser

组织管理

bash
# 创建组织
curl -X POST \
  -H "Authorization: token YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"username":"myorg","full_name":"My Organization"}' \
  http://your-domain.com/api/v1/orgs

Webhook 配置

yaml
# Webhook 设置
Settings -> Webhooks -> Add webhook

Webhook 类型:
  - Gitea
  - Slack
  - Discord
  - Dingtalk
  - Telegram
  - Microsoft Teams

触发事件:
  ☑ Push events
  ☑ Create events
  ☑ Delete events
  ☑ Issues events
  ☑ Pull request events

备份与恢复

备份

bash
# 使用 gitea dump 命令
gitea dump -c /etc/gitea/app.ini

# 手动备份
#!/bin/bash
BACKUP_DIR="/backup/gitea"
DATE=$(date +%Y%m%d)

# 备份数据库
mysqldump -u gitea -p'password' gitea > ${BACKUP_DIR}/gitea-${DATE}.sql

# 备份仓库
tar -czf ${BACKUP_DIR}/repositories-${DATE}.tar.gz /var/lib/gitea/data/gitea-repositories

# 备份配置
cp /etc/gitea/app.ini ${BACKUP_DIR}/app.ini-${DATE}

# 删除旧备份
find ${BACKUP_DIR} -mtime +30 -delete

恢复

bash
# 恢复数据库
mysql -u gitea -p'password' gitea < gitea-backup.sql

# 恢复仓库
tar -xzf repositories-backup.tar.gz -C /

# 恢复配置
cp app.ini-backup /etc/gitea/app.ini

# 重启服务
systemctl restart gitea

性能优化

数据库优化

sql
-- MySQL 优化
SET GLOBAL innodb_buffer_pool_size = 1073741824;
SET GLOBAL max_connections = 200;
SET GLOBAL query_cache_size = 67108864;

缓存配置

ini
[cache]
ENABLED = true
ADAPTER = redis
HOST = network=tcp,addr=127.0.0.1:6379,password=,db=0

日志配置

ini
[log]
MODE = file
LEVEL = Info
ROOT_PATH = /var/log/gitea

[log.file]
FILE_NAME = gitea.log
MAX_SIZE_SHIFT = 28
DAILY_ROTATE = true
MAX_DAYS = 7

常见问题

忘记管理员密码

bash
# 重置密码
gitea admin user change-password --username admin --password newpassword

SSH 连接问题

bash
# 检查 SSH 配置
cat /etc/ssh/sshd_config | grep -i "AllowUsers"

# 添加 git 用户
echo "AllowUsers git" >> /etc/ssh/sshd_config
systemctl restart sshd

性能问题

bash
# 检查系统资源
top
free -h
df -h

# 优化配置
# 增加 cache 大小
# 使用 Redis 缓存
# 优化数据库

总结

Gitea 是一个轻量级、易用的 Git 托管平台:

优势:

  • 轻量级: 资源占用少,适合小型服务器
  • 易部署: 单一二进制文件,安装简单
  • 功能完整: 提供完整的 Git 托管功能
  • 开源免费: MIT 许可证,完全开源

适用场景:

  • 小型团队协作
  • 私有代码托管
  • CI/CD 集成
  • 学习和测试环境

通过合理配置和优化,Gitea 可以满足大多数团队的代码托管需求。