手把手教你玩转 Gitea|使用 Docker 安装 Gitea

时间:2022-09-29 21:04:11

使用 Docker 安装 Gitea 的过程非常简单的,堪比“一键式”安装。Gitea 安装使用系列教程将会从多种方式进行全方位的实操演示。

????视频演示中使用腾讯云实验环境安装 Docker 并快速启动 Gitea

环境准备

服务器配置

OS Version CPU RAM
Debian Linux bullseye 2 Core 4GB

本文所采用的服务器配置如下,建议内存最少在 1GB 以上。OS 版本可以是 Debian、Ubuntu、Fedora 以及 CentOS,本文优先使用 Debian,其他系统发行版的会在后续文章中酌情演示。

Docker 运行环境

最新的 Docker Engine 和 Docker Desktop 集成了 docker compose 命令行工具。更多信息请参阅:

选择镜像

Gitea 提供了标准的容器镜像(gitea/gitea),统一支持 SQLite、MySQL、PostgreSQL 和 SQL Server 作为数据库后端。每个版本的镜像同时支持两种主流的处理器体系结构 amd64arm64/v8

镜像标签

  • 最新的稳定版
    latest
  • 固定在某个稳定版
    1.17.2, 1.17, 1
  • 最新的开发版,随 Gitea 代码合并同步更新
    dev

Rootless 镜像

Rootless 镜像使用 Gitea 内建的 Go SSH 提供 Git 服务,代替了 OpenSSH。

在选用 rootless 镜像时,加上镜像标签 -rootless。支持的镜像标签如下:

  • latest-rootless, 1-rootless
  • 1.17.2-rootless
  • dev-rootless

安装 Gitea

环境变量

在集群模式安装 Gitea 时,您可以通过环境变量为 Gitea 容器指定一些共享的初始值,例如 UID/GID、数据库连接参数、共享密钥等。诸如数据库和 Gitea 的一些功能配置选项最终都会在安装引导界面结束后写入到 app.ini 文件并保存。因此,如果是作为单实例部署的 Gitea,您无需关心如何设置这些环境变量,稍后的初始化安装过程会为您自动生成这些配置。初始化完成后,您可以在多个 Gitea 实例间共享同一份配置文件和数据缓存来实现服务器集群。

阅读更多:https://docs.gitea.io/en-us/install-with-docker/

启动 Gitea

创建工作目录

首先创建一个 gitea 工作目录,后续工作都在这个目录下完成。

mkdir ~/gitea && cd ~/gitea

# 预先创建 data 和 config 目录,稍后用于数据挂载
mkdir data config
chown 1000:1000 data config

创建 docker-compose.yml

使用下面的模板创建 docker-compose.yml,这里使用到的镜像是 gitea/gitea:1.17.2-rootless

rooless 版本的镜像默认使用 UID/GID 1000:1000 作为程序运行的用户组,为了保证 gitea 程序挂载权限正确的数据目录,我们在前面的步骤中预先创建了 dataconfig 目录。

version: "3"

services:
  server:
    image: gitea/gitea:1.17.2-rootless
    container_name: gitea
    restart: always
    volumes:
      - ./data:/var/lib/gitea
      - ./config:/etc/gitea
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:2222"

几个重要的参数说明:

  • volumes: 数据挂载
    • ./data:/data,将主机当前目录下的 data 目录挂载到容器内的 /var/lib/gitea 目录。/data 是 Gitea 标准容器的数据存储点,包含了 Git 仓库、SQLite 数据库文件、缓存文件等。
    • ./config:/etc/gitea 挂载 Gitea 的 app.ini 配置文件所在的目录。
    • /etc/timezone:/etc/timezone:ro 用于指定时区
    • /etc/localtime:/etc/localtime:ro 同上,用于指定本地时间
  • ports: 端口映射
    • 3000:3000 HTTP 端口,从左到右的顺序是从主机映射到 Docker 容器。在此,您可以通过 http://127.0.0.1:3000 直接访问到 Gitea 的 Web 界面,或通过反向代理引擎提供更具有扩展性的 SSL 集成,例如 Nginx。
    • 2222:2222 SSH 端口。这里主机侧暴露的端口为 2222 避免了与默认 SSH 服务端口冲突。禁用 SSH 时删除端口转发即可。如果您希望将主机完全作为 Gitea 服务器,可以将主机配置文件 /etc/ssh/sshd_config 中的端口 Port 22 更改为其他值,使得 Docker 可以使用 Gitea 内建的 Go SSH 或 OpenSSH 占用 22 端口作为 Git 服务。

启动 Gitea 实例

使用 docker compose 命令拉取镜像并启动 Gitea 实例:

docker compose up -d

docker compose ps 查看容器:

NAME     COMMAND                   SERVICE    STATUS     PORTS
gitea    "/usr/local/bin/dock…"    server     running    2222/tcp, 0.0.0.0:3000->3000/tcp

docker compose logs -f 查看容器日志:

$ docker compose logs -f
gitea  | 2022/09/26 14:50:31 cmd/web.go:106:runWeb() [I] Starting Gitea on PID: 1
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:21:PreloadSettings() [I] AppPath: /usr/local/bin/gitea
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:22:PreloadSettings() [I] AppWorkPath: /var/lib/gitea
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:23:PreloadSettings() [I] Custom path: /var/lib/gitea/custom
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:24:PreloadSettings() [I] Log path: /var/lib/gitea/data/log
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:25:PreloadSettings() [I] Configuration file: /etc/gitea/app.ini
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:26:PreloadSettings() [I] Prepare to run install page
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:29:PreloadSettings() [I] SQLite3 is supported
gitea  | 2022/09/26 14:50:31 cmd/web.go:217:listen() [I] [63314bb7-6] Listen: http://0.0.0.0:3000
gitea  | 2022/09/26 14:50:31 cmd/web.go:221:listen() [I] [63314bb7-6] AppURL(ROOT_URL): http://localhost:3000/

当看到上述日志的时候可以认为实例已经启动了,在浏览器中输入 http://localhost:3000/ 即可登陆 Gitea 实例进行初始化设置。

登录 Gitea

首次安装 Gitea 后,在浏览器中输入 http://localhost:3000/ 访问初始化页面,按需设置服务器信息。第一个注册的用户账号为管理账号。

手把手教你玩转 Gitea|使用 Docker 安装 Gitea

至此已经用 Docker 的方式来成功安装和运行了 Gitea 实例,接下来就可以使用了,诸如代码托管、团队人员管理、配置持续集成工具 DroneJenkins 等。