• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

<九>企业级开源仓库nexus3实战应用–使用nexus3配置golang私有仓库

nexus eryajf 2个月前 (01-05) 208°C 已收录 0个评论
本文预计阅读时间 13 分钟

*系列汇总*

一两个星期之前,你如果在我跟前说起私服的事情,我大概会绕着你走,因为我对这个东西真的一窍不通。事实上也正如此,开发同学曾不止一次的跟我说公司的私服版本太旧了,许多新的依赖编译之后不会从远程仓库自动缓存下来,然后每次就需要手动的上传,不方便极了。我听了之后,一方面确实因为各种忙碌没有抽开时间,但另一方面,则是每当打开私服面对着满屏的英文时,我都觉得眼前私服毕竟还能用,就不折腾了。

直到偶然一个契机,在网上看到一篇介绍nexus3.x的文章,文章写得也比较清晰,我也有兴致细读下去,就这样,开启了我的nexus3私服之旅。

开始我以为这个只是针对maven私服而存在的工具,后来才发现它所支持的,竟然将运维日常所面临的各种私服都包括了,这就极大的引发了我的钻研兴致,从maven私服的研究开始,一发不可收拾的,就又写出了一个nexus3系列教程,涵盖了安装,配置,maven私服,maven私服从2.x到3.x的迁移,docker私服,npm私服,yum私服,纵观全网络,大概也找不到一个人如此这般的,倾尽所有的,知无不言的,言无不尽的将nexus3作为一个系列写成文章的了。而现在,如果再有人与我说起私服的事情,至少我不会跑了,或许更想停下来了,,,哈哈。这就是付出学习所给人带来的心境上的转化!

前言啰嗦几句,愿您在这个小系列中,学习愉快!

想要查看本系列其他文章:请点此处跳转

希望正在读这段话的你能够在这个小系列中获得自信以及喜悦!

1,前言说明

golang是近来非常火热的语言,但是处理其依赖包一直都是一个让人头疼的问题,尤其是在国内,开发者需要下载一些官方的包的时候,就会非常苦恼。尽管已经有了私服 Athens,公司也已经搭建了这个私服,但是小伙伴们使用下来,反馈仍旧不好,大多时候下载官方的包时还是要自己本地开小飞机进行下载。

今天就打算借助于nexus优秀且强大的代理能力,来解决一下这个痛点。

在nexus官方文档配置go代理的文章里,有如下一个拓扑说明了nexus当中go私服的用法:

image-20191229215108777

这张图的意思很明了,也就是nexus私服的建立,同样需要依赖于 Athens,因为在对一些本地包下载的问题上,显然Athens解决的更好一些。于是乎,在目前nexus最新的版本(3.20)中我们看到,其也仅仅支持proxygroup两种类型,group是统一对外提供访问的,不必过多介绍,那么本篇文章,也就将是重点围绕着proxy类型的代理展开来讲的。

目前来看,纵然是nexus官方文档,谷歌百度,也没有比较完备的文档针对nexus当中配置golang项目私服的文章,我这里也算是结合之前配置其他代理的一些经验,分享一下自己配置整理的思路。至少目前公司小伙伴用起来,都是非常开心满意的,被这种简约高速的代理方式,纷纷赞不绝口的。

配置过程中,将添加三个proxy类型的,其中一个是套娃形式的,接下来一一介绍。

2,创建blob存储。

为其创建一个单独的存储空间。

image-20191229223125591

3,阿里代理

首先将国内的阿里仓库添加进来,再一次口头表扬阿里,这造福广大开发者的举措。添加的方式非常简单,与其他项目的代理添加方式一致:

其他的均是默认。

整体配置截图如下:

image-20191229223226661

4,官方代理

首先将国内的阿里仓库添加进来,再一次口头表扬阿里,这造福广大开发者的举措。添加的方式非常简单,与其他项目的代理添加方式一致:

  • Name: proxy-go-gf
  • Proxy
  • Storage: go-hub。

其他的均是默认。

整体配置截图如下:

image-20191229223445996

如上两步都比较简单,直接配置现成的代理即可。接下来进入套娃代理的配置。

5,套娃代理。

这里套娃代理的思路非常简单,主要借助于go语言开源的私服工具Athens来实现。

有时候我们要下一些国外的包,或者GitHub上的包,这个时候可能仅仅配置如上两个代理是不够的,因为我们私服到达如上代理的网络可能会有问题,尤其是官方的代理,而阿里的代理又未必我们想要的全都有,于是,我们需要自建一个能够快速下载国外包的代理。

这个代理通过Athens服务进行部署,并且服务器节点放置在国外。为了方便,我们使用docker进行部署。

docker run -d -v /data/athens/storage:/data/athens --net=host -e ATHENS_DISK_STORAGE_ROOT=/data/athens  -e ATHENS_STORAGE_TYPE=disk -e ATHENS_TIMEOUT=3000 -e ATHENS_GOGET_WORKERS=100 -e ATHENS_PROTOCOL_WORKERS=100 --name athens-proxy  --restart always    -p 0.0.0.0:3000:3000 gomods/athens

以上将在对外的主机上启动一个私服,主要用于下载外部的一些依赖包。通过如下规则配置一个可供访问的域名,注意需要添加证书认证。

cat athens-out.test.com.conf

server {
    listen 80;
    listen 443 ssl http2;
    server_name  124.156.98.252 athens-out.test.com;

    ssl_certificate     /etc/nginx/secure/test.cer;
    ssl_certificate_key /etc/nginx/secure/test.key;
    ssl_session_timeout 5m;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    access_log /data/log/athens_access.log json;
    error_log /data/log/athens_error.log;

    allow 1.1.1.1; # 这里可以放开公司访问
    deny all;

    location / {
        proxy_pass http://127.0.0.1:3000/;
    }
}

现在,我将继续在内网创建一个Athens代理,这个代理主要用于代理内网Gitlab当中的包,并将上边对外的代理一并代理进来,前边所谓的套娃代理,就是从这儿而来。在本地的某台主机上,启动如下服务:

docker run -d --net=host -v /data/athens/storage:/data/athens -v /data/athens/gitconfig/ssh-keys:/root/.ssh  -e ATHENS_DISK_STORAGE_ROOT=/data/athens -e ATHENS_STORAGE_TYPE=disk  -e  ATHENS_GLOBAL_ENDPOINT="https://athens-out.test.com" --add-host  gitlab.test.com:10.3.0.42 --add-host athens-out.test.com:124.156.98.252 --name athens-proxy --restart always -p 0.0.0.0:3000:3000    gomods/athens

以上,依旧挂载了 /data/athens/storage作为包存储路径,接着又挂在了一个路径 /data/athens/gitconfig/ssh-keys,这里边存放着连接本地Gitlab的关键信息,大概如下:

$ cd /data/athens/gitconfig/ssh-keys/
$ ls
config  id_rsa  id_rsa.pub  known_hosts

$ cat config
Host gitlab.test.com
Hostname gitlab.test.com
StrictHostKeyChecking no
IdentityFile /root/.ssh/id_rsa

其余三项内容都是一个常规密钥对的内容,这里的秘钥是在Gitlab当中创建的deploy key,我们的代理就是通过这个key来访问Gitlab项目的。

当本地的代理跑起来之后,同样需要配置一个域名用于访问:

cat athens.test.com.conf

server {
    listen 80;
    listen 443 ssl http2;
    server_name 10.3.0.41 athens.test.com;

    ssl_certificate     /etc/nginx/secure/test.cer;
    ssl_certificate_key /etc/nginx/secure/test.key;
    ssl_session_timeout 5m;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    access_log /data/log/athens_access.log json;
    error_log /data/log/athens_error.log;

    location / {
        proxy_pass http://127.0.0.1:3000/;
    }
}

配置完毕之后,就能投入使用了,现在直接将这个对外的地址,作为一个代理配置到nexus中。

  • Name: proxy-go-athens
  • Proxy
  • Storage: go-hub。

其他的均是默认。

整体配置截图如下:

image-20191229234043984

6,创建group类型的go仓库

  • Name:group-go
  • Storage:选择专用的blob存储go-hub。
  • group : 将左边可选的4个仓库,添加到右边的members下。

整体配置截图如下:

image-20191229234257516

注意如上三个代理的上下顺序,一定是最好用的越靠上,所有的group类型的代理都遵循这个规律。

7,简单验证

没有使用私服之前,里边是空空如也。

image-20200102095540860

通过设置GOPROXY将代理指向私服地址,然后进行项目的编译,可以看到对应的依赖的包已经缓存到私服当中了。

image-20200102095936348


weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<九>企业级开源仓库nexus3实战应用–使用nexus3配置golang私有仓库
喜欢 (0)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!永远不要忘记,激情的奋进,就是美好的未来!

您必须 登录 才能发表评论!