如何通过Docker搭建Gitea并配置SSL和SSH直通

首先,容我吐槽一下官网的文档,中文和英文文档不同步也就算了,英文文档都有点让人云里雾里,太多迷惑性的语言了,总之,按照下面的步骤来就对了。

安装Docker

这么基本的东西,百度上随便一搜就有了,关键词“<你的操作系统> docker 安装”,例如“Debian docker 安装”

配置docker-compose.yaml

非常建议看英文版文档,里面是最新的操作:https://docs.gitea.io/en-us/install-with-docker/

具体细节就不啰嗦了,自己看文档吧,这里还是挺简单的;需要注意的是最好找个地方存好,不要到处乱放,单独弄一个目录出来存就好了,比如 /gitea

然后还有一点就是创建一个 git 用户,待会 ssh 直通要用,然后用 cat /etc/passwd 查一下它的 uid 和 gid,把 docker-compose.yaml 中的 USER_UID 和 USER_GID 换成 git 的 ID。最后创建一个映射的 data 目录,并且执行 chown git:git data 来改变它的所属用户(组)

启动Docker

在当前目录下执行 docker-compose up -d 即可。

访问Gitea并安装

Gitea 默认的端口为 3000,访问 http://<ip>:3000 即可,然后会让你进行安装操作,里面的配置随便你设,反正待会也要继续改的23333

配置SSL

由于 Gitea 本身不具备 SSL 能力,需要通过反向代理来实现,这里推荐使用 caddy。caddy 的使用方法请自行百度,建议直接看官方的文档。

SSH直通

这里是比较让人疑惑的,所以做一些比较详细的说明。

首先,我们要明白 Gitea 使用 SSH 的原理,其实英文文档里面是有解释的,这里大概翻译一下:

  1. 用户通过 Gitea 网页添加 ssh key
  2. Gitea 将 ssh key 添加到 .ssh/authorized_keys 中
  3. .ssh/authorized_keys 中,除了第一行是 git 用户本身的公钥外,后面都是 command= 开头的命令行,这些命令行的作用是验证用户添加的 ssh key
  4. 用户通过 ssh 来请求 Gitea 仓库,则会触发 .ssh/authorized_keys 的验证命令,进而识别到 Gitea 中的用户

大致的流程是这样的,也就是说,SSH 直通的原理实际上也只是转发服务器本机的 ssh 请求到 Gitea 的容器中。大致的走向:用户访问 ssh -> 主机收到 ssh 请求 -> 主机验证 ssh key -> 验证成功后执行 command -> 将实际的 command 转发给容器。所以,实际上我们只要在 command 使用的脚本“做手脚”就可以了。Gitea v1.16.0+中,command 的默认命令脚本为 /usr/local/bin/gitea,而之前的版本则是 /app/gitea/gitea,我们创建对应版本的脚本到服务器本机上(至于为什么是本机,因为 ssh 会直接在本机上执行,而我们只是利用这个路径的脚本来转发命令而已),注意路径要一模一样。

理解了这个,基本上整个配置流程就理清楚了。文档中间关于 /home/git/.ssh/authorized_keys 的那一段说明,其实根本不用理会,因为 command= 开头的玩意是 Gitea 自己生成的,我们不用每次添加 ssh key 都要自己操作,都是系统自己完成的。所以实际上那一步只需要做的就是把生成的 id_rsa.pub 复制为 authorized_keys 即可,一个字节都不用改(这与网上的其他教程相符,但是那些教程根本没有提及原因,这里做出充分的说明以便于结合文档查看)。

剩下的就是看文档了,实际上并没有太多坑,只是需要一些时间去理解罢了,希望能够帮到各位快速理解文档本身的意图。

发表评论