栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

go get 支持gitlab私有库

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go get 支持gitlab私有库

背景
  • 一般公司都会有自己的私有框架或者公共函数库,这些大都会部署在公司私有的gitlab上
  • 通过配置 GOPRIVATE 可以使 go-get 不走代理而直接访问私有库,但是 go get 默认会使用https 去请求私库
问题
  • 私有库不支持https, 仅支持 http
  • 私库端口号不是默认80端口
# 如果80端口被占用或者考虑到暴露80端口可能存在被攻击的风险,通常代码仓库可能不会用默认端口。
# go get 拉取仓库代码时不允许加端口号,不是默认端口时会报 unknown import path
解决办法
  • 私有库不支持https
# 添加 GOINSECURE 环境变量
GOINSECURE=git.private.com  // 此处设置为私库域名
  • 私有库端口不是默认80 端口
# 配置nginx反向代理,将gitlab服务端口转发。
需要注意的是,goget会通过发起https请求去获取仓库的真实路径,所以要伪造一个goget响应,避免验证匹配规则时失败

# 新建nginx配置文件
sudo vim /etc/nginx/conf.d/git.private.com.conf

# 添加如下配置
server {
    listen 80;
    listen 443 ssl;
    server_name gitlab.private.com;
    
    # 伪造goget响应,使得内部验证规则通过
    if ($args ~* "^go-get=1") {
      set $condition goget;
    }
    if ($uri ~ ^/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)(/[p{L}0-9_.-]+)*$) {
      set $condition "${condition}path";
    }
    if ($condition = "gogetpath") {
      return 200 "";
    }

    location / {
            proxy_pass http://git.private.com:9999;
    }

    ssl_certificate   cert/private.com.pem;
    ssl_certificate_key  cert/private.com.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
}
参考
goget取包原理 https://studygolang.com/articles/18726
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/940349.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号