Windows Docker下Gitea保姆级安装教程:用MySQL 5.7做数据库,一次搞定
Windows Docker环境下Gitea与MySQL 5.7的黄金组合部署指南
在当今软件开发领域,版本控制系统的重要性不言而喻。对于个人开发者或小型团队而言,搭建一个轻量级、高性能的自托管Git服务不仅能提高工作效率,还能确保代码资产的安全可控。本文将详细介绍如何在Windows Docker环境中部署Gitea这一优秀的自托管Git服务,并采用MySQL 5.7作为其后端数据库,打造一个稳定可靠的代码托管平台。
1. 环境准备与基础配置
在开始部署之前,我们需要确保系统满足基本要求。Windows 10或11专业版/企业版/教育版(64位)是运行Docker的理想选择,建议版本1903或更高。同时,至少需要4GB内存和20GB可用磁盘空间以保证服务流畅运行。
首先安装Docker Desktop for Windows:
- 从Docker官网下载最新稳定版安装包
- 运行安装程序,勾选"使用WSL 2后端"选项
- 安装完成后重启系统
- 启动Docker Desktop,在设置中确保已启用WSL集成
提示:如果系统不支持WSL 2,也可使用Hyper-V后端,但性能可能略逊一筹
验证Docker安装是否成功:
docker --version docker-compose --version这两个命令应分别返回Docker和Docker Compose的版本信息。
2. MySQL 5.7容器部署
作为Gitea的后端存储,MySQL 5.7提供了良好的性能和稳定性平衡。我们将使用Docker volume来持久化数据库,确保数据安全。
创建专用数据卷:
docker volume create gitea_mysql_data启动MySQL 5.7容器:
docker run -d \ --name gitea_mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=your_secure_password \ -e MYSQL_USER=gitea \ -e MYSQL_PASSWORD=gitea_password \ -e MYSQL_DATABASE=gitea \ -v gitea_mysql_data:/var/lib/mysql \ --restart unless-stopped \ mysql:5.7 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci关键参数说明:
| 参数 | 说明 | 推荐值 |
|---|---|---|
| MYSQL_ROOT_PASSWORD | root用户密码 | 设置强密码 |
| MYSQL_USER | Gitea专用用户名 | gitea |
| MYSQL_PASSWORD | 用户密码 | 与root不同 |
| character-set-server | 字符集 | utf8mb4 |
| collation-server | 排序规则 | utf8mb4_unicode_ci |
验证MySQL容器运行状态:
docker ps -f name=gitea_mysql3. Gitea容器部署与配置
Gitea作为轻量级Git服务,其Docker部署非常简便。我们将使用官方镜像,并配置与MySQL的连接。
创建Gitea数据卷:
docker volume create gitea_data启动Gitea容器:
docker run -d \ --name gitea \ -p 3000:3000 \ -p 2222:22 \ -v gitea_data:/data \ --link gitea_mysql:db \ -e DB_TYPE=mysql \ -e DB_HOST=db:3306 \ -e DB_NAME=gitea \ -e DB_USER=gitea \ -e DB_PASSWD=gitea_password \ -e USER_UID=1000 \ -e USER_GID=1000 \ --restart unless-stopped \ gitea/gitea:latest端口映射说明:
- 3000: Gitea的Web界面
- 2222: SSH服务端口(避免与系统SSH冲突)
环境变量关键配置:
数据库配置
- DB_TYPE: 数据库类型(mysql)
- DB_HOST: 数据库地址(通过--link连接的别名)
- DB_NAME: 数据库名
- DB_USER: 数据库用户
- DB_PASSWD: 数据库密码
系统配置
- USER_UID: 运行用户UID(与宿主机用户匹配)
- USER_GID: 运行用户GID
4. 初始设置与优化
容器启动后,通过浏览器访问http://localhost:3000进入Gitea的初始设置页面。首次安装需要进行以下配置:
数据库设置:
- 确保数据库类型为MySQL
- 主机填写
db:3306(容器链接别名) - 用户名和密码与MySQL容器启动时设置的一致
常规设置:
- 站点标题:自定义您的Gitea实例名称
- 仓库根目录:保持默认
/data/git/repositories - LFS根目录:
/data/git/lfs - 运行用户:
git
管理员账户:
- 务必设置一个强密码的管理员账户
- 建议用户名不要使用
admin等常见名称
服务配置:
- 禁用注册或设置注册限制(根据需求)
- 配置邮件服务(可选但推荐)
完成初始化后,建议进行以下优化:
性能调优:
[server] PROTOCOL = http DOMAIN = localhost HTTP_PORT = 3000 ROOT_URL = http://localhost:3000/ DISABLE_SSH = false SSH_PORT = 22 SSH_DOMAIN = localhost START_SSH_SERVER = true OFFLINE_MODE = false仓库设置:
[repository] ROOT = /data/git/repositories SCRIPT_TYPE = bash DEFAULT_PRIVATE = false DEFAULT_PUSH_CREATE_PRIVATE = true MAX_CREATION_LIMIT = -15. 日常维护与备份策略
为确保Gitea服务稳定运行,需要建立定期维护机制。
数据库备份:
docker exec gitea_mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > gitea_backup_$(date +%Y%m%d).sqlGitea数据备份:
- 停止Gitea容器:
docker stop gitea - 备份数据卷:
docker run --rm -v gitea_data:/data -v $(pwd):/backup alpine tar czf /backup/gitea_data_$(date +%Y%m%d).tar.gz -C /data . - 启动Gitea容器:
docker start gitea
自动备份脚本示例:
#!/bin/bash # MySQL备份 docker exec gitea_mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" gitea' > /backups/gitea_db_$(date +%Y%m%d).sql # 数据备份 docker run --rm --volumes-from gitea -v /backups:/backup alpine tar czf /backup/gitea_data_$(date +%Y%m%d).tar.gz -C /data . # 清理旧备份 find /backups -type f -name "*.sql" -mtime +7 -exec rm {} \; find /backups -type f -name "*.tar.gz" -mtime +7 -exec rm {} \;6. 常见问题排查
容器启动失败:
- 检查端口冲突:
netstat -ano | findstr "3000" - 查看容器日志:
docker logs gitea
数据库连接问题:
- 验证MySQL容器是否运行:
docker ps - 测试MySQL连接:
docker exec -it gitea_mysql mysql -ugitea -p- 检查Gitea数据库配置:
/data/gitea/conf/app.ini
文件权限问题:
- 确保数据卷正确挂载:
docker inspect gitea - 调整文件权限:
docker exec gitea chown -R git:git /data性能优化建议:
- 对于大型仓库,增加MySQL的缓冲池大小
- 考虑使用SSD存储数据卷
- 定期执行
git gc优化仓库
在实际使用中,我发现将Gitea的数据卷挂载到WSL2子系统中可以获得更好的I/O性能。通过\\wsl$\docker-desktop-data路径可以直接访问数据卷内容,便于直接管理和备份。
