使用nexus3配置golang私有仓库(go私服)
# 1,前言說明
golang是近來非常火熱的語言,但是處理其依賴包一直都是一個讓人頭疼的問題,尤其是在國內,開發者需要下載一些官方的包的時候,就會非常苦惱。盡管已經有了私服 Athens,公司也已經搭建了這個私服,但是小伙伴們使用下來,反饋仍舊不好,大多時候下載官方的包時還是要自己本地開小飛機進行下載。
今天就打算借助于nexus優秀且強大的代理能力,來解決一下這個痛點。
在nexus官方文檔配置go代理的文章里,有如下一個拓撲說明了nexus當中go私服的用法:
這張圖的意思很明了,也就是nexus私服的建立,同樣需要依賴于 Athens,因為在對一些本地包下載的問題上,顯然Athens解決的更好一些。于是乎,在目前nexus最新的版本(3.20)中我們看到,其也僅僅支持proxy和group兩種類型,group是統一對外提供訪問的,不必過多介紹,那么本篇文章,也就將是重點圍繞著proxy類型的代理展開來講的。
目前來看,縱然是nexus官方文檔,谷歌百度,也沒有比較完備的文檔針對nexus當中配置golang項目私服的文章,我這里也算是結合之前配置其他代理的一些經驗,分享一下自己配置整理的思路。至少目前公司小伙伴用起來,都是非常開心滿意的,被這種簡約高速的代理方式,紛紛贊不絕口的。
配置過程中,將添加三個proxy類型的,其中一個是套娃形式的,接下來一一介紹。
# 2,創建blob存儲。
為其創建一個單獨的存儲空間。
# 3,阿里代理
首先將國內的阿里倉庫添加進來,再一次口頭表揚阿里,這造福廣大開發者的舉措。添加的方式非常簡單,與其他項目的代理添加方式一致:
- Name: proxy-go-ali
- Proxy
- Remote Storage: 遠程倉庫地址,這里填寫: https://mirrors.aliyun.com/goproxy/
- Storage: go-hub。
其他的均是默認。
整體配置截圖如下:
# 4,官方代理
首先將國內的阿里倉庫添加進來,再一次口頭表揚阿里,這造福廣大開發者的舉措。添加的方式非常簡單,與其他項目的代理添加方式一致:
-
Name: proxy-go-gf
-
Proxy
- Remote Storage: 遠程倉庫地址,這里填寫: https://goproxy.io
-
- (opens new window)
-
Storage: go-hub。
其他的均是默認。
整體配置截圖如下:
如上兩步都比較簡單,直接配置現成的代理即可。接下來進入套娃代理的配置。
# 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.confserver {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.confserver {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
- Remote Storage: 遠程倉庫地址,這里填寫: https://athens.test.com
-
- (opens new window)
-
Storage: go-hub。
其他的均是默認。
整體配置截圖如下:
# 6,創建group類型的go倉庫
- Name:group-go
- Storage:選擇專用的blob存儲go-hub。
- group : 將左邊可選的4個倉庫,添加到右邊的members下。
整體配置截圖如下:
注意如上三個代理的上下順序,一定是最好用的越靠上,所有的group類型的代理都遵循這個規律。
# 7,簡單驗證
沒有使用私服之前,里邊是空空如也。
通過設置GOPROXY將代理指向私服地址,然后進行項目的編譯,可以看到對應的依賴的包已經緩存到私服當中了。
# 8,使用私服
私服配置完畢之后,日常使用當中還會有各種各樣的情況,因此單獨寫了一篇文章來介紹一些使用上的經驗。
原文出處鏈接
總結
以上是生活随笔為你收集整理的使用nexus3配置golang私有仓库(go私服)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GOPROXY环境变量中direct的含
- 下一篇: 使用athens部署企业内部Gitlab