Docker 搭建 Gitea

Gitea 是一个 Go 语言开发的开源的自托管 Git 服务,相比 GitLab,它具有轻量级、占用资源低的特点,适用于个人、小型团队。

Docker Compose 部署

Gitea 支持使用 SQLite3、MySQL 和 PostgreSQL 数据库,实际部署时推荐使用 MySQL 或 PostgreSQL。在本文中使用 PostgreSQL,使用其他数据库请参考官网配置。

为了使用 ssh 协议拉取 Gitea 托管的仓库,需要额外配置 SSH 容器直通,所以需要提前做一些工作。

在宿主机中创建 git 用户并设置一个复杂密码。

1
adduser git

在系统中给 git 用户创建 ssh 密钥对。该密钥对将用于向主机验证主机上的 git 用户。这里使用 ed25519 算法。

1
sudo -u git ssh-keygen -t ed25519 -C "Gitea Host Key"

将公钥追加写入到 /home/git/.ssh/authorized_keys

1
cat /home/git/.ssh/id_ed25519.pub >> /home/git/.ssh/authorized_keys

使用 id 命令查看刚刚创建的 git 用户的 UIDGID,下面的 docker-compose.yaml 文件要用到。

1
id git

在合适的位置建立 gitea 的数据文件夹,如 /root/gitea/,进入该目录写入 docker-compose.yaml 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
version: "3"

networks:
gitea:
external: false

services:
server:
image: gitea/gitea:1
container_name: gitea
environment:
- USER_UID=1001
- USER_GID=1001
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- 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
- /home/git/.ssh/:/data/git/.ssh
ports:
- "3000:3000"
- "222:22"
- "127.0.0.1:2222:22"
depends_on:
- db

db:
image: postgres:14
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea
- POSTGRES_DB=gitea
networks:
- gitea
volumes:
- ./postgres:/var/lib/postgresql/data

修改 docker-compose.yaml 文件中的 USER_UIDUSER_GID,改为上面 id git 命令获取到的 git 用户对应的 UIDGID

/home/git/.ssh/:/data/git/.ssh 用于将主机 git 用户的 .ssh 文件夹映射到容器中。否则,SSH 身份验证将无法在容器内运行。

ports 配置中的 "127.0.0.1:2222:22" 将容器中的 22 端口映射到主机的 2222 端口。

在主机中创建 /usr/local/bin/gitea 文件并赋予可执行权限。该文件将发出从主机到容器的 SSH 转发。将以下内容添加到 /usr/local/bin/gitea

1
ssh -p 2222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"

然后拉取并启动容器。

1
docker compose up -d

配置反向代理

参考配置:

1
2
3
4
5
6
7
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

初始化配置

启用本地模式,禁用 Gravatar 头像,禁止用户注册。

如果打开禁用用户注册,需要在下方创建管理员账号。

参考资料

https://docs.gitea.com/zh-cn/installation/install-with-docker

作者

南山崔崔

发布于

2023-08-29

更新于

2024-12-20

许可协议