前言
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:
安全版本(使用环境变量文件)
- 创建
.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
- 对应的
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 安装
- 打开浏览器访问
http://your-server-ip:3000 - 按照安装向导完成配置
- 创建管理员账户
安装过程中常见问题及解决方案
问题 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)
解决方案:
- 检查数据库服务状态:
docker-compose logs db
- 验证数据库连接:
docker-compose exec db mysql -u gitea -p
- 重新创建数据库服务:
docker-compose down -v # 注意:这会删除所有数据
docker-compose up -d
问题 3:端口冲突
错误信息:
Bind for 0.0.0.0:3000 failed: port is already allocated
解决方案:
- 更改端口映射:
ports:
- "3080:3000" # 将外部端口改为 3080
- "2222:22"
- 检查并关闭占用端口的进程:
sudo netstat -tulpn | grep :3000
问题 4:MySQL 初始化失败
错误信息:
MySQL init process failed.
解决方案:
- 检查 MySQL 日志:
docker-compose logs db
- 确保使用正确的认证插件:
command:
- --default-authentication-plugin=mysql_native_password
- 清理并重新启动:
docker-compose down -v
docker-compose up -d
问题 5:Gitea 安装页面无法访问
解决方案:
- 检查防火墙设置:
# 开放端口(如果使用 UFW)
sudo ufw allow 3000
sudo ufw allow 2222
- 检查容器状态:
docker-compose ps
docker-compose logs gitea
- 等待初始化完成:
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

Comments NOTHING