goproxy.io内部私有化部署

最近在公司内部搭建了一个goproxy.io的服务,总结并记录一下备忘。

goproxy.io本身已经比较成熟,对部署也非常友好,按照官方的文档一步一步搭建应该都会比较顺利。当然我也不是对官方文档的无意义复制粘贴,我将从以下三个方面进行阐述:

goproxy.io服务的搭建(假设IP为10.0.1.2

  • 安装go环境(要求1.13及以上版本)

    $ yum install golang -y
    
  • 安装git

    $ yum install git -y
    
  • 安装goproxy

    $ mkdir -p /opt/goproxy && cd /opt/goproxy
    $ git clone https://github.com/goproxyio/goproxy.git
    $ cd goproxy
    $ make
    $ mv ./bin/goproxy /usr/local/bin/goproxy
    
  • 启动goproxy服务(监听8080端口)

    $ mkdir -p /opt/goproxy/go_cache
    $ goproxy -cacheDir /opt/goproxy/go_cache -exclude example.io -proxy https://goproxy.io -listen 0.0.0.0:8080
    

解决go get方式拉取私有库的问题

  • 明确下目标。所谓的go get方式拉取私有库,指的是能通过go get -u -v -insecure example.io/xxx/yyy方式拉取到内部私有仓库中的go代码。example.io指的是内部的私有域名。

  • 假设已经按照以上步骤在10.0.1.2安装了goproxy.io服务。

  • 安装govanityurls服务(监听80端口)
    tonybai在其博文中说的很清楚了,我也就不重复了。贴一张他博文中的配图,一图胜千言。

  • 将内部私有域名example.io解析到安装了以上服务的10.0.1.2

开发人员本地环境配置

  • 临时开启Go Module

    $ export GO111MODULE=on
    
  • 永久开启Go Module

    go env -w GO111MODULE=on
    
  • 设置go源代码库拉取的代理地址(http://10.0.1.2:8080)

    $ go env -w GOPROXY="http://10.0.1.2:8080,https://goproxy.cn,direct"
    
  • 可选:设置私有库(10.0.1.2上的goproxy服务本身也会将私有库重定向至gitlab.example.com)

    $ go env -w GOPRIVATE="example.io"  
    
  • 追加~/.gitconfig配置(修改为通过git下载源代码)

    $ git config --global url."ssh://git@gitlab.example.com".insteadOf "http://gitlab.example.com"
    
  • 测试拉取外网的公开库

    $ go get -u -v github.com/go-xorm/xorm 
    
  • 测试拉取内网的私有库(默认拉取master分支的最近一次提交)

    $ go get -u -v -insecure example.io/voidint/tsdump
    
  • 测试拉取内网的私有库的指定版本(强烈建议为每个版本打上tag)

    $ go get -u -v -insecure example.io/voidint/tsdump@v1.0.0
    

参考