前言

在当今的软件开发环境中,一个私有的代码托管平台对于团队协作和个人项目管理都至关重要。Gitea 是一个轻量级的代码托管解决方案,类似于 GitHub 和 GitLab,但更加轻便且资源占用低。本文将详细介绍如何使用 Docker 快速部署 Gitea 服务。

为什么选择 Gitea?

  • 轻量级:相比 GitLab,Gitea 占用资源更少
  • 开源免费:完全开源,没有商业限制
  • 功能齐全:支持 Git 仓库管理、Issue 跟踪、Pull Request 等功能
  • 易于部署:支持多种部署方式,特别是 Docker 部署非常简便

基础 Docker 部署

准备工作

首先确保你的系统已经安装了 Docker 和 Docker Compose。如果没有安装,可以参考官方文档进行安装。

创建 docker-compose.yml 文件

在项目目录中创建一个 docker-compose.yml 文件,内容如下:

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: docker.gitea.com/gitea:1.23.7
    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:
      - "3000:3000"
      - "222:22"

启动服务

运行以下命令启动 Gitea 服务:

docker-compose up -d

等待容器启动后,你就可以通过 http://服务器IP:3000 访问 Gitea 的安装界面了。

自定义端口

如果你想使用不同的端口,可以修改 docker-compose.yml 文件中的端口映射部分:

ports:
  - "8080:3000"  # 将主机的8080端口映射到容器的3000端口
  - "2221:22"    # 将主机的2221端口映射到容器的22端口

使用 MySQL 或 PostgreSQL 数据库

默认配置使用 SQLite,适合小型部署。对于生产环境,建议使用 MySQL 或 PostgreSQL。

MySQL 配置示例

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: docker.gitea.com/gitea:1.23.7
    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"
      - "222:22"
    depends_on:
      - db

  db:
    image: docker.io/library/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

使用命名卷

为了更好的数据管理,可以使用命名卷替代主机卷:

version: "3"

networks:
  gitea:
    external: false

volumes:
  gitea:
    driver: local

services:
  server:
    image: docker.gitea.com/gitea:1.23.7
    container_name: gitea
    restart: always
    networks:
      - gitea
    volumes:
      - gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"

初始安装

访问 http://服务器IP:3000 完成安装向导。如果使用了数据库容器,注意将数据库主机地址设置为 db(容器服务名)。

环境变量配置

Gitea 支持通过环境变量配置各种参数,例如:

environment:
  - GITEA__mailer__ENABLED=true
  - GITEA__mailer__FROM=git@example.com
  - GITEA__mailer__PROTOCOL=smtps
  - GITEA__mailer__HOST=smtp.example.com
  - GITEA__mailer__USER=apikey
  - GITEA__mailer__PASSWD=yourpassword

升级 Gitea

升级 Gitea 非常简单:

  1. 修改 docker-compose.yml 中的镜像版本
  2. 拉取新镜像:docker-compose pull
  3. 重启容器:docker-compose up -d

SSH 容器直通配置

为了更好的 SSH 支持,可以配置 SSH 直通:

  1. 确保主机上的 git 用户与容器内的 UID/GID 匹配
  2. 挂载主机的 SSH 目录到容器
  3. 创建 SSH 转发脚本
  4. 配置 authorized_keys 文件

详细步骤可以参考文章中的 SSH 容器直通部分。

结语

通过 Docker 部署 Gitea 是一个简单高效的方式,无论是个人使用还是团队协作,都能快速搭建起一个功能完善的代码托管平台。本文介绍了从基础部署到高级配置的多种方式,希望能帮助你顺利搭建自己的 Gitea 服务。

如果你在部署过程中遇到任何问题,欢迎在评论区留言讨论!