跳至主要内容
版本:1.24.6

使用 Docker 安裝 (rootless)

Gitea 在其 Docker Hub 組織中提供自动更新的 Docker 镜像。您可以始终使用最新的稳定標籤,或使用其他处理 Docker 镜像更新的服务。

rootless 镜像使用 Gitea 内部 SSH 功能来提供 Git 协议,但不支持 OpenSSH。

本参考设置指南将使用者引导通過基于 docker-compose 的设置。但是,docker-compose 的安裝超出了本文檔的范围。要安裝docker-compose 本身, 請按照官方的 安裝说明進行操作。

基础设置

最简單的设置只需建立一个卷和一个网络,並将 docker.gitea.com/gitea:latest-rootless 镜像作為服务启动。由于没有可用的数据库,可以使用 SQLite3 来初始化一个。

建立一个名為 dataconfig:

mkdir -p gitea/{data,config}
cd gitea
touch docker-compose.yml

然后将以下内容粘贴到名為 docker-compose.yml 的文件中:

version: "2"

services:
server:
image: docker.gitea.com/gitea:1.24.6-rootless
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"

請注意,卷應由在配置文件中指定的 UID/GID 的使用者/组所有。默认情况下,Docker 中的 Gitea 将使用 uid:1000 gid:1000。如果需要,您可以使用以下命令设置这些文件夹的所有权:

sudo chown 1000:1000 config/ data/

如果未為卷设置正确的权限,容器可能無法启动。

對於稳定版本,您可以使用 :latest-rootless:1-rootless,或指定特定的版本,如: 1.24.6-rootless。如果您想使用最新的开发版本,则可以使用 :dev-rootless 標籤。如果您想运行發佈分支的最新提交,可以使用 :1.x-dev-rootless 標籤,其中 x 是 Gitea 的次要版本号(例如:1.16-dev-rootless)。

自定义端口

要将集成的 SSH 和 Web 服务器绑定到不同的端口,請调整端口部分。通常只需更改主机端口並保持容器内的端口不变。

version: "2"

services:
server:
image: docker.gitea.com/gitea:1.24.6-rootless
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"
+ - "80:3000"
+ - "22:2222"

MySQL 数据库

要将 Gitea 与 MySQL 数据库结合使用,請对上面建立的 docker-compose.yml 文件進行以下更改。

version: "2"

services:
server:
image: docker.gitea.com/gitea:1.24.6-rootless
+ environment:
+ - GITEA__database__DB_TYPE=mysql
+ - GITEA__database__HOST=db:3306
+ - GITEA__database__NAME=gitea
+ - GITEA__database__USER=gitea
+ - GITEA__database__PASSWD=gitea
restart: always
volumes:
- ./data:/var/lib/gitea
- ./config:/etc/gitea
- /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
+ volumes:
+ - ./mysql:/var/lib/mysql

PostgreSQL 数据库

要将 Gitea 与 PostgreSQL 数据库结合使用,請对上面建立的 docker-compose.yml 文件進行以下更改。

version: "2"

services:
server:
image: docker.gitea.com/gitea:1.24.6-rootless
environment:
+ - GITEA__database__DB_TYPE=postgres
+ - GITEA__database__HOST=db:5432
+ - GITEA__database__NAME=gitea
+ - GITEA__database__USER=gitea
+ - GITEA__database__PASSWD=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"
+ depends_on:
+ - db
+
+ db:
+ image: docker.io/library/postgres:14
+ restart: always
+ environment:
+ - POSTGRES_USER=gitea
+ - POSTGRES_PASSWORD=gitea
+ - POSTGRES_DB=gitea
+ volumes:
+ - ./postgres:/var/lib/postgresql/data

命名卷 (Named Volumes)

要使用命名卷 (Named Volumes) 而不是主机卷 (Host Volumes),請在 docker-compose.yml 配置中定义和使用命名卷。这样的更改将自动建立所需的卷。您不需要担心权限问题,Docker 会自动处理。

version: "2"

+volumes:
+ gitea-data:
+ driver: local
+ gitea-config:
+ driver: local
+
services:
server:
image: docker.gitea.com/gitea:1.24.6-rootless
restart: always
volumes:
- - ./data:/var/lib/gitea
+ - gitea-data:/var/lib/gitea
- - ./config:/etc/gitea
+ - gitea-config:/etc/gitea
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:2222"

MySQL 或 PostgreSQL 容器需要單独建立。

自定义使用者

你可以選择使用自定义使用者 (遵循 --user 标志定义 https://docs.docker.com/engine/reference/run/#user)。 例如,要克隆主机使用者 git 的定义,請使用命令 id -u git 並将其添加到 docker-compose.yml 文件中: 請确使用者对保挂载的文件夹具有写权限。

version: "2"

services:
server:
image: docker.gitea.com/gitea:1.24.6-rootless
restart: always
+ user: 1001
volumes:
- ./data:/var/lib/gitea
- ./config:/etc/gitea
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:2222"

启动

要启动基于 docker-compose 的这个设置,請執行 docker-compose up -d,以在后台启动 Gitea。使用 docker-compose ps 命令可以查看 Gitea 是否正确启动。可以使用 docker-compose logs 命令查看日志。

要关闭设置,請執行 docker-compose down 命令。这将停止和终止容器,但卷仍将存在。

注意:如果在 HTTP 上使用的是非 3000 端口,請将 app.ini 更改為匹配 LOCAL_ROOT_URL = http://localhost:3000/

安裝

在通過 docker-compose 启动 Docker 设置后,可以使用喜爱的浏览器访问 Gitea,完成安裝過程。访问 http://<服务器-IP>:3000 並按照安裝向导進行操作。如果数据库是使用上述文檔中的 docker-compose 设置启动的,請注意必須使用 db 作為数据库主机名。

自定义

自定义文件的位置位于 /var/lib/gitea/custom 目錄中,可以在这里找到有关自定义的文件说明。如果使用主机卷(host volumes),很容易访问这些文件;如果使用命名卷(named volumes),则可以通過另一个容器或直接访问 /var/lib/docker/volumes/gitea_gitea/_/var_lib_gitea 来進行访问。在安裝后,配置文件将保存在 /etc/gitea/app.ini 中。

升级

注意

确保您已将数据卷迁移到 Docker 容器之外的其他位置

要将安裝升级到最新版本,請按照以下步骤操作:

# 如果在 docker-compose.yml 中指定了版本,請编辑該文件以更新版本
# 拉取新的镜像
docker-compose pull
# 启动一个新的容器,自动移除旧的容器
docker-compose up -d

从标准镜像升级

  • 备份您的设置
  • 将卷挂载点从 /data 更改為 /var/lib/gitea
  • 如果使用了自定义的 app.ini,請将其移动到新的挂载到 /etc/gitea 的卷中
  • 将卷中的文件夹(gitea)重命名為 custom
  • 如果需要,编辑 app.ini
    • 设置 START_SSH_SERVER = true
  • 使用镜像 docker.gitea.com/gitea:1.24.6-rootless

使用环境变量管理部署

除了上述的环境变量外,app.ini 中的任何设置都可以通過形式為 GITEA__SECTION_NAME__KEY_NAME 的环境变量進行设置或覆盖。这些设置在每次 Docker 容器启动时都会生效。完整信息請参考这里.

这些环境变量可以在 docker-compose.yml 中传递给 Docker 容器。以下示例将启用 SMTP 邮件服务器,如果主机上设置了所需的环境变量 GITEAmailerFROM、GITEAmailerHOST、GITEAmailerPASSWD,或者在与 docker-compose.yml 相同目錄中的 .env 文件中设置了这些环境变量:

...
services:
server:
environment:
- GITEA__mailer__ENABLED=true
- GITEA__mailer__FROM=${GITEA__mailer__FROM:?GITEA__mailer__FROM not set}
- GITEA__mailer__PROTOCOL=smtp
- GITEA__mailer__HOST=${GITEA__mailer__HOST:?GITEA__mailer__HOST not set}
- GITEA__mailer__IS_TLS_ENABLED=true
- GITEA__mailer__USER=${GITEA__mailer__USER:-apikey}
- GITEA__mailer__PASSWD="""${GITEA__mailer__PASSWD:?GITEA__mailer__PASSWD not set}"""

要设置所需的 TOKEN 和 SECRET 值,可以使用 Gitea 的内置生成使用函数.

SSH 容器透传

由于 SSH 在容器内运行,如果需要 SSH 支持,需要将 SSH 从主机透传到容器。一种選择是在容器内运行 SSH,並使用非标准端口(或将主机端口移动到非标准端口)。另一种可能更直接的選择是将主机上的 SSH 命令转发到容器。下面解释了这种设置。

本指南假设您已在主机上建立了一个名為 git 的使用者,並具有运行 docker exec 的权限,並且 Gitea 容器的名稱為 gitea。您需要修改該使用者的 shell,以将命令转发到容器内的 sh 可執行文件,使用 docker exec

首先,在主机上建立文件 /usr/local/bin/gitea-shell,並填入以下内容:

#!/bin/sh
/usr/bin/docker exec -i --env SSH_ORIGINAL_COMMAND="$SSH_ORIGINAL_COMMAND" gitea sh "$@"

注意上述 docker 命令中的 gitea 是容器的名稱。如果您的容器名稱不同,請记得更改。

還應确保正确设置了 shell 包装器的权限:

sudo chmod +x /usr/local/bin/gitea-shell

一旦包装器就位,您可以将其设置為 git 使用者的 shell:

sudo usermod -s /usr/local/bin/gitea-shell git

現在,所有的 SSH 命令都会被转发到容器,您需要在主机上设置 SSH 認證。这可以通過利用 SSH AuthorizedKeysCommand 来匹配 Gitea 接受的密钥。在主机的 /etc/ssh/sshd_config 文件中添加以下代码块:

Match User git
AuthorizedKeysCommandUser git
AuthorizedKeysCommand /usr/bin/docker exec -i gitea /usr/local/bin/gitea keys -c /etc/gitea/app.ini -e git -u %u -t %t -k %k

(从 1.16.0 开始,您将不需要设置 -c /etc/gitea/app.ini 選项。)

剩下的就是重新启动 SSH 服务器:

sudo systemctl restart sshd

注意

这实际上並没有使用 Docker 的 SSH,而是僅僅使用了围绕它的命令。 从理论上讲,您可以不运行内部的 SSH 服务器。