Gitea 是一个 Go 语言开发的开源的自托管 Git 服务,相比 GitLab,它具有轻量级、占用资源低的特点,适用于个人、小型团队。
Docker Compose 部署
Gitea 支持使用 SQLite3、MySQL 和 PostgreSQL 数据库,实际部署时推荐使用 MySQL 或 PostgreSQL。在本文中使用 PostgreSQL,使用其他数据库请参考官网配置。
为了使用 ssh 协议拉取 Gitea 托管的仓库,需要额外配置 SSH 容器直通,所以需要提前做一些工作。
在宿主机中创建 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
用户的 UID
和 GID
,下面的 docker-compose.yaml
文件要用到。
在合适的位置建立 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_UID
和 USER_GID
,改为上面 id git
命令获取到的 git
用户对应的 UID
和 GID
。
/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 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