Gitea Docker 部署指南

xieshuoshuo 发布于 2025-11-05 319 次阅读 预计阅读时间: 5 分钟


前言

Gitea 是一个轻量级的自托管 Git 服务,类似于 GitHub 和 GitLab。使用 Docker 部署 Gitea 可以简化安装过程,但也会遇到一些典型问题。本文提供完整的部署指南和常见问题解决方案。

完整 Docker Compose 配置

基础版本(使用 SQLite)

version: "3.8"
services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: always
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=sqlite3
      - GITEA__database__PATH=/data/gitea/gitea.db
    volumes:
      - ./gitea/data:/data
      - ./gitea/config:/etc/gitea
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:22"

生产版本(使用 MySQL)

version: "3.8"
services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: always
    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_password
    volumes:
      - gitea_data:/data
      - gitea_config:/etc/gitea
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:22"
    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: gitea_db
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_DATABASE=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea_password
    volumes:
      - db_data:/var/lib/mysql
    command: 
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci

volumes:
  gitea_data:
  gitea_config:
  db_data:

安全版本(使用环境变量文件)

  1. 创建 .env 文件
# 数据库配置
DB_HOST=db
DB_NAME=gitea
DB_USER=gitea
DB_PASSWORD=your_secure_password_here
ROOT_PASSWORD=your_root_password_here

# Gitea 配置
GITEA_DOMAIN=your-domain.com
  1. 对应的 docker-compose.yml
version: "3.8"
services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: always
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=${DB_HOST}:3306
      - GITEA__database__NAME=${DB_NAME}
      - GITEA__database__USER=${DB_USER}
      - GITEA__database__PASSWD=${DB_PASSWORD}
      - GITEA__server__DOMAIN=${GITEA_DOMAIN}
    volumes:
      - gitea_data:/data
      - gitea_config:/etc/gitea
    ports:
      - "3000:3000"
      - "2222:22"
    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: gitea_db
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=${ROOT_PASSWORD}
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql
    command: 
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci

volumes:
  gitea_data:
  gitea_config:
  db_data:

部署步骤

步骤 1:准备环境

# 创建项目目录
mkdir gitea && cd gitea

# 创建必要的目录结构
mkdir -p gitea/data gitea/config

# 设置正确的权限(如果使用绑定挂载)
sudo chown -R 1000:1000 gitea/

步骤 2:创建配置文件

将上述 Docker Compose 配置保存为 docker-compose.yml,并根据需要创建 .env 文件。

步骤 3:启动服务

# 启动所有服务
docker-compose up -d

# 查看启动状态
docker-compose ps

# 查看实时日志
docker-compose logs -f gitea

步骤 4:完成 Web 安装

  1. 打开浏览器访问 http://your-server-ip:3000
  2. 按照安装向导完成配置
  3. 创建管理员账户

安装过程中常见问题及解决方案

问题 1:目录权限错误

错误信息

/var/lib/gitea/git is not writable
mkdir: can't create directory '/var/lib/gitea/git': Permission denied

解决方案

# 停止服务
docker-compose down

# 重新设置目录权限
sudo chown -R 1000:1000 gitea/
sudo chmod -R 755 gitea/

# 或者改用 Docker 卷(推荐)
# 修改 volumes 部分为使用命名卷

问题 2:数据库连接失败

错误信息

Error 1045 (28000): Access denied for user 'gitea'@'IP' (using password: YES)

解决方案

  1. 检查数据库服务状态
   docker-compose logs db
  1. 验证数据库连接
   docker-compose exec db mysql -u gitea -p
  1. 重新创建数据库服务
   docker-compose down -v  # 注意:这会删除所有数据
   docker-compose up -d

问题 3:端口冲突

错误信息

Bind for 0.0.0.0:3000 failed: port is already allocated

解决方案

  1. 更改端口映射
   ports:
     - "3080:3000"  # 将外部端口改为 3080
     - "2222:22"
  1. 检查并关闭占用端口的进程
   sudo netstat -tulpn | grep :3000

问题 4:MySQL 初始化失败

错误信息

MySQL init process failed.

解决方案

  1. 检查 MySQL 日志
   docker-compose logs db
  1. 确保使用正确的认证插件
   command: 
     - --default-authentication-plugin=mysql_native_password
  1. 清理并重新启动
   docker-compose down -v
   docker-compose up -d

问题 5:Gitea 安装页面无法访问

解决方案

  1. 检查防火墙设置
   # 开放端口(如果使用 UFW)
   sudo ufw allow 3000
   sudo ufw allow 2222
  1. 检查容器状态
   docker-compose ps
   docker-compose logs gitea
  1. 等待初始化完成
    Gitea 第一次启动可能需要几分钟时间初始化数据库。

后续管理

备份策略

# 备份数据库
docker-compose exec db mysqldump -u root -p gitea > backup.sql

# 备份 Gitea 数据
tar -czf gitea-backup.tar.gz gitea/data/

更新 Gitea

# 拉取最新镜像
docker-compose pull

# 重启服务
docker-compose down
docker-compose up -d

监控日志

# 查看实时日志
docker-compose logs -f gitea

# 查看特定时间的日志
docker-compose logs --since="2023-01-01" gitea