1956 字
10 分钟
Docker 部署 Git 托管工具 Gitea
2025-08-04

简介#

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

Gitea 是一个轻量级的自托管 Git 服务,不仅可以用来管理自己的代码也可以用来管理自己的笔记,使用 Docker 部署可以快速搭建属于自己的代码管理仓库。本文将详细介绍如何使用 Docker 部署 Gitea。

对比 其它 Git 托管工具

特性GitHubGitLabGiteaGogsGiteeBitbucket
部署方式云服务云服务/自部署自部署自部署云服务/自部署云服务/自部署
资源占用-较高-中等
CI/CDGitHub Actions内置完整CI/CD基础支持基础支持Gitee GoBitbucket Pipelines
易用性非常好
社区生态最丰富丰富一般一般国内较好中等
访问速度国外服务器取决于部署位置本地部署本地部署国内服务器取决于部署位置
中文支持一般一般一般一般优秀一般
学习曲线

选择建议

  • 个人/小团队: 推荐 Gitea 或 Gitee,轻量且功能完整
  • 企业级项目: 推荐 GitLab,功能全面且专业
  • 开源项目: 推荐 GitHub 或 Gitee,社区生态好
  • 国内项目: 推荐 Gitee,访问速度快,中文支持好
  • 自托管需求: 推荐 Gitea,轻量级且易于维护
  • Atlassian 用户: 推荐 Bitbucket,集成度高

前置要求#

  • 已安装 Docker 和 Docker Compose
  • 服务器具备公网访问能力(可选)
  • 基本的 Linux 命令行操作知识

部署步骤#

1. 创建工作目录#

Terminal window
mkdir gitea
cd gitea

2. 使用 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. 启动服务#
Terminal window
docker-compose up -d

3. 使用 Docker CLI 部署 Gitea#

Terminal window
# 首先运行 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_MODEprod:应用程序运行模式,会影响性能和调试。“dev”,“prod”或”test”。
  • DOMAINlocalhost:此服务器的域名,用于 Gitea UI 中显示的 http 克隆 URL。
  • SSH_DOMAINlocalhost:该服务器的域名,用于 Gitea UI 中显示的 ssh 克隆 URL。如果启用了安装页面,则 SSH 域服务器将采用以下形式的 DOMAIN 值(保存时将覆盖此设置)。
  • SSH_PORT22:克隆 URL 中显示的 SSH 端口。
  • SSH_LISTEN_PORT%(SSH_PORT)s:内置 SSH 服务器的端口。
  • DISABLE_SSHfalse:如果不可用,请禁用 SSH 功能。如果要禁用 SSH 功能,则在安装 Gitea 时应将 SSH 端口设置为 0
  • HTTP_PORT3000:HTTP 监听端口。
  • ROOT_URL"":覆盖自动生成的公共 URL。如果内部 URL 和外部 URL 不匹配(例如在 Docker 中),这很有用。
  • LFS_START_SERVERfalse:启用 git-lfs 支持。
  • DB_TYPEsqlite3:正在使用的数据库类型[mysql,postgres,mssql,sqlite3]。
  • DB_HOSTlocalhost:3306:数据库主机地址和端口。
  • DB_NAMEgitea:数据库名称。
  • DB_USERroot:数据库用户名。
  • DB_PASSWD“*empty*” :数据库用户密码。如果您在密码中使用特殊字符,请使用“您的密码”进行引用。
  • INSTALL_LOCKfalse:禁止访问安装页面。
  • SECRET_KEY"" :全局密钥。这应该更改。如果它具有一个值并且 INSTALL_LOCK 为空,则 INSTALL_LOCK 将自动设置为 true
  • DISABLE_REGISTRATIONfalse:禁用注册,之后只有管理员才能为用户创建帐户。
  • REQUIRE_SIGNIN_VIEWfalse:启用此选项可强制用户登录以查看任何页面。
  • USER_UID1000:在容器内运行 Gitea 的用户的 UID(Unix 用户 ID)。如果使用主机卷,则将其与 /data 卷的所有者的 UID 匹配(对于命名卷,则不需要这样做)。
  • USER_GID1000:在容器内运行 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_UIDUSER_GID: 设置容器内运行用户的 UID 和 GID

初始化配置#

首次访问时需要进行初始化配置:

  1. 数据库设置:选择 SQLite3(默认,适合小型部署)
  2. 站点配置
    • 站点标题和路径
    • SSH 服务器域名和端口(2222)
    • Gitea HTTP 地址和端口(3000)
  3. 可选设置:根据需要配置管理员账号

高级配置#

使用外部数据库#

对于生产环境,建议使用外部数据库(如 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 部署日常维护#

备份数据#

Terminal window
# 备份数据卷
docker run --rm -v gitea:/data -v $(pwd):/backup alpine tar czf /backup/gitea-backup.tar.gz -C /data .

升级版本#

  1. 修改 docker-compose.yml 中的镜像版本
  2. 执行升级命令:
Terminal window
docker-compose pull
docker-compose up -d

Docker CLI 部署日常维护#

Terminal window
# 启动容器
docker start gitea
# 停止容器
docker stop gitea
# 重启容器
docker restart gitea
# 查看实时日志
docker logs -f gitea
# 查看最近的日志
docker logs --tail 100 gitea# 进入容器 shell
docker exec -it gitea /bin/bash# 停止并删除现有容器
docker stop gitea
docker 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

故障排除#

常见问题#

  1. 端口冲突:修改 docker-compose.yml 中的端口映射
  2. 权限问题:检查 USER_UIDUSER_GID 设置
  3. 访问问题:确认防火墙设置和端口开放情况

日志查看#

Terminal window
# 查看 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/
作者
迟来者
发布于
2025-08-04
许可协议
CC BY-NC-SA 4.0