今天在测试一个项目的流水线时想使用ssh协议进行克隆,但是发现自己的gitlab中ssh协议带了端口,对于我这种有强迫症的人来说肯定不能忍,今天就来聊聊几种解决方案。
首先我的docker-compose.yaml是这样的:version: "3"services: gitlab: image: "gitlab/gitlab-ce:15.8.2-ce.0" container_name: "gitlab" restart: always privileged: true hostname: "gitlab" environment:# 指定root密码 GITLAB_ROOT_PASSWORD: xxxxxxx GITLAB_OMNIBUS_CONFIG: | gitlab_rails['time_zone'] = 'Asia/Shanghai' external_url 'http://192.168.31.31' gitlab_rails['gitlab_shell_ssh_port'] = 1122 ports: - "443:443" - "1122:22" volumes: - "$PWD/gitlab/config:/etc/gitlab" - "$PWD/gitlab/logs:/var/log/gitlab" - "$PWD/gitlab/data:/var/opt/gitlab" shm_size: "512m" networks: - gitlabnetworks: gitlab: driver: "bridge" driver_opts: com.docker.network.enable_ipv6: "false"因为如果使用22端口,会和宿主机的sshd服务端口冲突,导致服务服务无法启动,所以这里将22端口映射成1122了,这样在使用ssh协议克隆项目时就需要带上端口,类似这样:ssh://git@192.168.31.31:1122/test/vue-test.git像github\gitee等可以看到都是不带端口的:
如果想做到这样有下面一些解决方案,如果大家有其他的方式,也欢迎在评论区留言。方式一:
简单粗暴的方式,就是将宿主机的sshd服务端口改成22之外的其他端口,然后gitlab就用22端口
删除gitlab_rails['gitlab_shell_ssh_port'] = 1122
端口直接映射22端口ports: - "22:22"缺点:有的企业可能为了统一管理并不让修改sshd默认端口
方式二:使用额外的nginx代理服务器进行代理1. nginx代理服务器的ssh服务改成22外的其他端口2. nginx代理22端口
1)安装stream模块yum install epel-releaseyum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpmyum install - y nginxyum install -y nginx-mod-stream 或者 yum install -y nginx-all-streamyum install gcc pcre-devel zlib-devel openssl-develnginx -V | grep stream2)配置tcp代理# cat /etc/nginx/nginx.conf...include /usr/share/nginx/modules/*.conf;...stream {include /etc/nginx/stream.d/*.conf;}
# mkdir /etc/nginc/stream.d# cat /etc/nginc/stream.dupstream gitlab-ssh{ server 192.168.31.31:1122;}
server { listen 22; proxy_connect_timeout 60s; proxy_timeout 60s; proxy_pass gitlab-ssh;}# nginx -t# nginx -s reload
方式三:ssh隧道方式(注:网络搜索的答案,未亲自经验证)1. gitlab服务配置ssh正向代理,192.168.31.32为代理服务器ssh -fCNR 8889:localhost:1122 root@192.168.31.322. proxy机器配置反向代理(原ssh服务需另起端口,比如6622)ssh -p 6622 -fCNL *:22:localhost:8889 localhost方案四:iptables + haproxy1. haproxy服务器将sshd服务改为除22外的其他端口
2. haproxy服务器上把访问22端口的请求都转发到8888端口iptables -t nat -A PREROUTING --dst 192.168.31.32 -p tcp --dport 22 -j DNAT --to-destination 192.168.31.32:88882. haproxy配置文件中/etc/haproxy/haproxy.cfg配置8888端口代理到gitlab服务器的22端口listen gitlabssh bind 0.0.0.0:8888 mode tcp #maxconn 4086 #log 127.0.0.1 local0 debug server gitlab 192.168.31.31:1122
上一条:Altium Designer 24.8.2 版本发布,新功能说明
下一条:如何查看docker应用日志