Gogs与主机共享22端口

在使用Docker安装Gogs时,一般会把容器的22端口映射到主机的其它端口(比如10022)
在以SSH方式clone项目时,URL长这样

ssh://git@git.example.com:10022:username/project.git

但我们想要的是类似于GitHub那样的,这时需要把Gogs的SSH端口设置为22

git@git.example.com:username/project.git

下面说一下主要步骤

创建git用户
[root]$ useradd git
[root]$ id git # 获取uid和gid
uid=1002(git) gid=1002(git) groups=1002(git)
[root]$ usermod -aG docker git # 把git用户加入docker组
[root]$ su git
[git]$ mkdir -p ~/gogs/data # 在git用户下创建gogs/data文件夹,作为gogs容器主要数据的挂载目录
安装Gogs
[git]$ docker run -d –name=gogs -p 10022:22 -p 10080:3000 -v ~/gogs/data:/data -e “PUID=1002” -e “PGID=1002” –restart=always gogs/gogs # PUID PGID与上面获取的uid gid保持一致
[git]$ ln -s ~/gogs/data/git/.ssh ~/ # 将gogs的.ssh目录软连接到本地的.ssh
现在可以通过服务器外网ip:10080进入安装页面,也可以等反代设置好后通过域名进行访问
我用的数据库是Sqlite3,不需要额外配置,如果你选择的是其它数据库,可以参考这篇文章
相关配置可以参考官方文档

生成SSH key
[git]$ ssh-keygen -t rsa -b 4096 -C “git@git.example.com
[git]$ cd ~/.ssh
[git]$ cat id_rsa.pub >> authorized_keys
[git]$ chmod 600 authorized_keys
在authorized_keys最前面添加

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1y……….YGedddqAN6w== git@git.example.com
Caddy反向代理
[root]$ mkdir caddy && cd $_
在caddy目录下创建Caddyfile文件,下面是参考配置

git.example.com {
tls git@example.com # 填写你的邮箱,用于申请证书
proxy / your-ip:10080
header / Strict-Transport-Security “max-age=31536000;” # 开启HSTS
gzip
}
启动caddy
[root]$ docker run -d –name=caddy -v ~/caddy/Caddyfile:/etc/Caddyfile -v ~/.caddy:/root/.caddy -p 80:80 -p 443:443 –restart=always abiosoft/caddy
配置git用户登录问题
[root]$ mkdir -p /app/gogs/
[root]$ cat >/app/gogs/gogs <<’END’

#!/bin/sh
ssh -p 10022 -o StrictHostKeyChecking=no git@127.0.0.1 \
“SSH_ORIGINAL_COMMAND=\”$SSH_ORIGINAL_COMMAND\” $0 $@”
END
[root]$ chmod 755 /app/gogs/gogs
这样就差不多完成了,下面需要在本地生成SSH密匙,然后在web端把密匙添加到Gogs
如果需要修改Gogs的配置,比如安装的时候DOMAIN写的IP现在要修改为域名,可以到/home/git/gogs/data/gogs/conf/找到app.ini,修改完后重启gogs容器

坚持原创技术分享,您的支持将鼓励我继续创作!
0%