1956 字
10 分钟
Docker 部署 Git 托管工具 Gitea
简介
Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来,几乎所有代码都已更改。对于Fork的原因可以看 这里。
Gitea 是一个轻量级的自托管 Git 服务,不仅可以用来管理自己的代码也可以用来管理自己的笔记,使用 Docker 部署可以快速搭建属于自己的代码管理仓库。本文将详细介绍如何使用 Docker 部署 Gitea。
对比 其它 Git 托管工具
| 特性 | GitHub | GitLab | Gitea | Gogs | Gitee | Bitbucket |
|---|---|---|---|---|---|---|
| 部署方式 | 云服务 | 云服务/自部署 | 自部署 | 自部署 | 云服务/自部署 | 云服务/自部署 |
| 资源占用 | - | 较高 | 低 | 低 | - | 中等 |
| CI/CD | GitHub Actions | 内置完整CI/CD | 基础支持 | 基础支持 | Gitee Go | Bitbucket Pipelines |
| 易用性 | 非常好 | 好 | 好 | 好 | 好 | 好 |
| 社区生态 | 最丰富 | 丰富 | 一般 | 一般 | 国内较好 | 中等 |
| 访问速度 | 国外服务器 | 取决于部署位置 | 本地部署 | 本地部署 | 国内服务器 | 取决于部署位置 |
| 中文支持 | 一般 | 一般 | 一般 | 一般 | 优秀 | 一般 |
| 学习曲线 | 低 | 中 | 低 | 低 | 低 | 低 |
选择建议
- 个人/小团队: 推荐 Gitea 或 Gitee,轻量且功能完整
- 企业级项目: 推荐 GitLab,功能全面且专业
- 开源项目: 推荐 GitHub 或 Gitee,社区生态好
- 国内项目: 推荐 Gitee,访问速度快,中文支持好
- 自托管需求: 推荐 Gitea,轻量级且易于维护
- Atlassian 用户: 推荐 Bitbucket,集成度高
前置要求
- 已安装 Docker 和 Docker Compose
- 服务器具备公网访问能力(可选)
- 基本的 Linux 命令行操作知识
部署步骤
1. 创建工作目录
mkdir giteacd gitea2. 使用 docker-compose 部署 Gitea
2.1. 创建 Docker Compose 配置文件
创建 docker-compose.yml 文件:
version: "3"
networks: gitea: external: false
volumes: gitea: driver: local
services: server: image: gitea/gitea:1.22 container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 restart: always networks: - gitea volumes: - gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "8000:3000" - "8001:22"2.2. 启动服务
docker-compose up -d3. 使用 Docker CLI 部署 Gitea
# 首先运行 MySQL 容器docker run -d \ --name=gitea-db \ -e MYSQL_ROOT_PASSWORD=gitea \ -e MYSQL_USER=gitea \ -e MYSQL_PASSWORD=gitea \ -e MYSQL_DATABASE=gitea \ -v /var/lib/mysql:/var/lib/mysql \ mysql:8
# 等待数据库启动完成后,运行 Gitea 容器docker run -d \ --name=gitea \ --link gitea-db:db \ -p 8000:3000 \ -p 8001:22 \ -v $(pwd)/data:/data \ -e USER_UID=1000 \ -e USER_GID=1000 \ -e GITEA__database__DB_TYPE=mysql \ -e GITEA__database__HOST=db:3306 \ -e GITEA__database__NAME=gitea \ -e GITEA__database__USER=gitea \ -e GITEA__database__PASSWD=gitea \ --restart=always \ gitea/gitea:1.22参数说明
-d: 后台运行容器--name=gitea: 指定容器名称为 gitea-p 3000:3000: 映射 Web 界面端口-p 2222:22: 映射 SSH 端口-v gitea:/data: 挂载数据卷用于持久化存储-e USER_UID=1000: 设置容器内用户 UID-e USER_GID=1000: 设置容器内用户 GID--restart=always: 设置容器自动重启您可以通过环境变量配置 Gitea 的一些设置:
(默认值以粗体显示)
APP_NAME:“Gitea: Git with a cup of tea”:应用程序名称,在页面标题中使用。RUN_MODE:prod:应用程序运行模式,会影响性能和调试。“dev”,“prod”或”test”。DOMAIN:localhost:此服务器的域名,用于 Gitea UI 中显示的 http 克隆 URL。SSH_DOMAIN:localhost:该服务器的域名,用于 Gitea UI 中显示的 ssh 克隆 URL。如果启用了安装页面,则 SSH 域服务器将采用以下形式的 DOMAIN 值(保存时将覆盖此设置)。SSH_PORT:22:克隆 URL 中显示的 SSH 端口。SSH_LISTEN_PORT:%(SSH_PORT)s:内置 SSH 服务器的端口。DISABLE_SSH:false:如果不可用,请禁用 SSH 功能。如果要禁用 SSH 功能,则在安装 Gitea 时应将 SSH 端口设置为0。HTTP_PORT:3000:HTTP 监听端口。ROOT_URL:"":覆盖自动生成的公共 URL。如果内部 URL 和外部 URL 不匹配(例如在 Docker 中),这很有用。LFS_START_SERVER:false:启用 git-lfs 支持。DB_TYPE:sqlite3:正在使用的数据库类型[mysql,postgres,mssql,sqlite3]。DB_HOST:localhost:3306:数据库主机地址和端口。DB_NAME:gitea:数据库名称。DB_USER:root:数据库用户名。DB_PASSWD:“*empty*” :数据库用户密码。如果您在密码中使用特殊字符,请使用“您的密码”进行引用。INSTALL_LOCK:false:禁止访问安装页面。SECRET_KEY:"" :全局密钥。这应该更改。如果它具有一个值并且INSTALL_LOCK为空,则INSTALL_LOCK将自动设置为true。DISABLE_REGISTRATION:false:禁用注册,之后只有管理员才能为用户创建帐户。REQUIRE_SIGNIN_VIEW:false:启用此选项可强制用户登录以查看任何页面。USER_UID:1000:在容器内运行 Gitea 的用户的 UID(Unix 用户 ID)。如果使用主机卷,则将其与/data卷的所有者的 UID 匹配(对于命名卷,则不需要这样做)。USER_GID:1000:在容器内运行 Gitea 的用户的 GID(Unix 组 ID)。如果使用主机卷,则将其与/data卷的所有者的 GID 匹配(对于命名卷,则不需要这样做)。
4. 访问 Gitea
在浏览器中访问 http://your-server-ip:3000 进入 Gitea 初始化配置页面。
配置说明
端口配置
3000: Gitea Web 界面端口2222: Git SSH 访问端口(避免与系统 SSH 冲突)
数据持久化
使用 Docker Volume gitea 来持久化存储数据,包括:
- 仓库数据
- 数据库文件
- 配置文件
- 用户上传的文件
环境变量
USER_UID和USER_GID: 设置容器内运行用户的 UID 和 GID
初始化配置
首次访问时需要进行初始化配置:
- 数据库设置:选择 SQLite3(默认,适合小型部署)
- 站点配置:
- 站点标题和路径
- SSH 服务器域名和端口(2222)
- Gitea HTTP 地址和端口(3000)
- 可选设置:根据需要配置管理员账号
高级配置
使用外部数据库
对于生产环境,建议使用外部数据库(如 MySQL 或 PostgreSQL):
version: "3"
networks: gitea: external: false
services: server: image: gitea/gitea:1.22 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" - "2222: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启用 HTTPS
可以使用 Nginx 或 Traefik 等反向代理来启用 HTTPS:
# docker-compose.yml 添加 nginx 服务 nginx: image: nginx:alpine container_name: nginx ports: - "80:80" - "443:443" volumes: - ./nginx/conf:/etc/nginx/conf.d - ./nginx/ssl:/etc/nginx/ssl - ./nginx/logs:/var/log/nginx depends_on: - server networks: - gitea创建 nginx/conf/default.conf 文件,并添加以下内容:
server {
server_name 域名;
include /etc/nginx/conf.d/server.conf.insert; # 增加身份验证 auth_basic "my site auth."; auth_basic_user_file /etc/nginx/conf/auth_password;
location / { proxy_pass http://gitea:3000; proxy_set_header Host $host; }
include /etc/nginx/conf.d/server.conf.append;
}docker-compose 部署日常维护
备份数据
# 备份数据卷docker run --rm -v gitea:/data -v $(pwd):/backup alpine tar czf /backup/gitea-backup.tar.gz -C /data .升级版本
- 修改
docker-compose.yml中的镜像版本 - 执行升级命令:
docker-compose pulldocker-compose up -dDocker CLI 部署日常维护
# 启动容器docker start gitea
# 停止容器docker stop gitea
# 重启容器docker restart gitea
# 查看实时日志docker logs -f gitea
# 查看最近的日志docker logs --tail 100 gitea# 进入容器 shelldocker exec -it gitea /bin/bash# 停止并删除现有容器docker stop giteadocker rm gitea
# 拉取新版本镜像docker pull gitea/gitea:1.22
# 使用相同参数重新运行容器docker run -d \ --name=gitea \ -p 3000:3000 \ -p 2222:22 \ -v gitea:/data \ -e USER_UID=1000 \ -e USER_GID=1000 \ --restart=always \ gitea/gitea:1.22故障排除
常见问题
- 端口冲突:修改
docker-compose.yml中的端口映射 - 权限问题:检查
USER_UID和USER_GID设置 - 访问问题:确认防火墙设置和端口开放情况
日志查看
# 查看 Gitea 容器日志docker logs gitea总结
通过 Docker 部署 Gitea 可以快速搭建一个轻量级、功能完整的 Git 代码管理仓库。相比其他 Git 平台,Gitea 具有资源占用小、易于部署和维护的优势,特别适合个人开发者和小型团队使用。
根据实际需求,可以进一步配置外部数据库、HTTPS 支持等功能来提升安全性和性能。
相关
Docker 部署 Git 托管工具 Gitea
https://3log.us.kg/posts/blog/tech/service/docker/docker-部署-git-托管工具-gitea/