如果主机的 22 端口已被使用,使用 Docker 安装 Gitea 时只能把容器的 22 端口映射到主机的其它端口(如:10022),这是没有任何问题的。但是以 SSH 方式 clone 项目时,URL 长这样ssh://git@git.example.com:10022:username/project.git
如果我们想要类似以下这样的 URL 时就需要把 Gitea 容器的和主机共享 22 端口git@git.example.com:username/project.git
下面总结一下使用 Docker 安装 Gitea 共享主机 22 端口的主要步骤,Gogs 应该是同理。
创建 git 用户
# Create git user
adduser git
# Make sure user has UID and GID 1000
usermod -u 1000 -g 1000 git
# Create docker group
groupadd docker
# Add git user to docker group
usermod -aG docker git
# Create the gitea data directory
mkdir -p /home/git/gitea/data安装 Gitea
docker run -d --name=gitea -p 10022:22 -p 10080:3000 -v /home/git/gitea/data:/data --restart=always gitea/gitea:latest
# Create a symlink between the container authorized_keys and the host git user authorized_keys
ln -s /home/git/gitea/data/git/.ssh /home/git/生成 SSH key
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
echo "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty $(cat /home/git/.ssh/id_rsa.pub)" >> /home/git/.ssh/authorized_keys
chmod 600 /home/git/.ssh/authorized_keys配置 SSH passthrough
配置 passthrough 连接到 Gitea 容器的 SSH 映射端口 10022
mkdir -p /app/gitea/
cat >/app/gitea/gitea <<'END'
#!/bin/sh
ssh -p 10022 -o StrictHostKeyChecking=no git@127.0.0.1 \
"SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
END
chmod +x /app/gitea/giteaCaddy 反向代理配置
这里使用 Caddy 反向代理配置域名,Caddyfile 配置信息如下:
git.example.com {
encode zstd gzip
reverse_proxy localhost:10080
header / Strict-Transport-Security "max-age=31536000;"
}配置完域名之后,输入域名进行安装,现在就可以修改 【SSH 服务域名】 为 git.example.com,【Gitea 基本 URL】 为 https://git.example.com/,也可以后通过 /home/git/gogs/data/gogs/conf/app.ini 配置文件修改相关配置。
注意事项
- 由于
docker启动容器的默认uid和gid是 1000,所以git用户的uid、gid必须为 1000,如果git用户的uid和gid不是 1000(比如:1002),尝试通过docker run --user 1002:1002、docker run -e "PUID=1002" -e "PGID=1002"等方式启动docker容器都不管用。 - 保证
git用户下的所有文件都属于git用户和git组
[git]$ ls -la /home/git/gitea/data
total 20
drwxrwxr-x 5 git git 4096 Jan 5 14:14 .
drwxrwxr-x 3 git git 4096 Jan 5 13:56 ..
drwxr-xr-x 5 git git 4096 Jan 5 14:20 git
drwxr-xr-x 10 git git 4096 Jan 5 14:40 gitea
drwx------ 2 git git 4096 Jan 5 14:14 ssh
One comment