二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Nexus系列文章

    • 前言
    • nexus的安装
    • 使用nexus3配置docker私有仓库
    • 使用nexus3配置maven私有仓库
    • 使用nexus3配置npm私有仓库
    • 使用nexus3配置yum私有仓库
    • 使用nexus3配置Python私有仓库
    • 使用nexus3配置golang私有仓库
      • 1,前言说明
      • 2,创建 blob 存储。
      • 3,阿里代理
      • 4,官方代理
      • 5,套娃代理。
      • 6,创建 group 类型的 go 仓库
      • 7,简单验证
      • 8,使用私服
    • maven私服nexus2-14-5迁移到nexus3-7-1
    • maven上传jar包以及SNAPSHOT的一个坑
    • Gradel上传本地包的一些坑及注意点
    • go1-12与1-14之私服使用的差异与变化
    • 通过命令行往python私仓传包
    • 关于yum仓库往nexus私服传包等实践
    • 将maven本地包上传到nexus私服的实践
    • 将npm本地包上传到nexus私服的实践
    • nexus2.x升级到3.x之后仓库地址改变的问题探索
    • 关于gradle中plugins依赖未走私服导致编译失败的原因探析
  • Jenkins系列文章

  • ELK笔记

  • Kubernetes笔记

  • LLM专题

  • 系列专题
  • Nexus系列文章
二丫讲梵
2020-01-05
目录

使用nexus3配置golang私有仓库

文章发布较早,内容可能过时,阅读注意甄别。

# 1,前言说明

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

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

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

image

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

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

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

# 2,创建 blob 存储。

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

image

# 3,阿里代理

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

  • Name: proxy-go-ali
  • Proxy
    • Remote Storage: 远程仓库地址,这里填写: https://mirrors.aliyun.com/goproxy/
  • Storage: go-hub。

其他的均是默认。

整体配置截图如下:

image

申明

原创文章eryajf,未经授权,严禁转载,侵权必究!此乃文中随机水印,敬请读者谅解。

Copyright 二丫讲梵 (opens new window) 版权所有

# 4,官方代理

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

  • Name: proxy-go-gf
  • Proxy
    • Remote Storage: 远程仓库地址,这里填写: https://goproxy.io (opens new window)
  • Storage: go-hub。

其他的均是默认。

整体配置截图如下:

image

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

# 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
1

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

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/;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

现在,我将继续在内网创建一个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
1

以上,依旧挂载了 /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
1
2
3
4
5
6
7
8

其余三项内容都是一个常规密钥对的内容,这里的秘钥是在 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/;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

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

  • Name: proxy-go-athens
  • Proxy
    • Remote Storage: 远程仓库地址,这里填写: https://athens.test.com (opens new window)
  • Storage: go-hub。

其他的均是默认。

整体配置截图如下:

image

# 6,创建 group 类型的 go 仓库

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

整体配置截图如下:

image

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

# 7,简单验证

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

image

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

image

# 8,使用私服

私服配置完毕之后,日常使用当中还会有各种各样的情况,因此单独写了一篇文章来介绍一些使用上的经验。

微信 支付宝
#nexus#go
上次更新: 2024/07/04, 22:40:37
使用nexus3配置Python私有仓库
maven私服nexus2-14-5迁移到nexus3-7-1

← 使用nexus3配置Python私有仓库 maven私服nexus2-14-5迁移到nexus3-7-1→

最近更新
01
睡着的人不关灯
06-12
02
学习周刊-总第215期-2025年第24周
06-12
03
学习周刊-总第214期-2025年第23周
06-05
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式