使用nexus3配置golang私有仓库(go私服)
# 1,前言說明
golang是近來非常火熱的語言,但是處理其依賴包一直都是一個(gè)讓人頭疼的問題,尤其是在國(guó)內(nèi),開發(fā)者需要下載一些官方的包的時(shí)候,就會(huì)非常苦惱。盡管已經(jīng)有了私服 Athens,公司也已經(jīng)搭建了這個(gè)私服,但是小伙伴們使用下來,反饋仍舊不好,大多時(shí)候下載官方的包時(shí)還是要自己本地開小飛機(jī)進(jìn)行下載。
今天就打算借助于nexus優(yōu)秀且強(qiáng)大的代理能力,來解決一下這個(gè)痛點(diǎn)。
在nexus官方文檔配置go代理的文章里,有如下一個(gè)拓?fù)湔f明了nexus當(dāng)中g(shù)o私服的用法:
這張圖的意思很明了,也就是nexus私服的建立,同樣需要依賴于 Athens,因?yàn)樵趯?duì)一些本地包下載的問題上,顯然Athens解決的更好一些。于是乎,在目前nexus最新的版本(3.20)中我們看到,其也僅僅支持proxy和group兩種類型,group是統(tǒng)一對(duì)外提供訪問的,不必過多介紹,那么本篇文章,也就將是重點(diǎn)圍繞著proxy類型的代理展開來講的。
目前來看,縱然是nexus官方文檔,谷歌百度,也沒有比較完備的文檔針對(duì)nexus當(dāng)中配置golang項(xiàng)目私服的文章,我這里也算是結(jié)合之前配置其他代理的一些經(jīng)驗(yàn),分享一下自己配置整理的思路。至少目前公司小伙伴用起來,都是非常開心滿意的,被這種簡(jiǎn)約高速的代理方式,紛紛贊不絕口的。
配置過程中,將添加三個(gè)proxy類型的,其中一個(gè)是套娃形式的,接下來一一介紹。
# 2,創(chuàng)建blob存儲(chǔ)。
為其創(chuàng)建一個(gè)單獨(dú)的存儲(chǔ)空間。
# 3,阿里代理
首先將國(guó)內(nèi)的阿里倉庫添加進(jìn)來,再一次口頭表揚(yáng)阿里,這造福廣大開發(fā)者的舉措。添加的方式非常簡(jiǎn)單,與其他項(xiàng)目的代理添加方式一致:
- Name: proxy-go-ali
- Proxy
- Remote Storage: 遠(yuǎn)程倉庫地址,這里填寫: https://mirrors.aliyun.com/goproxy/
- Storage: go-hub。
其他的均是默認(rèn)。
整體配置截圖如下:
# 4,官方代理
首先將國(guó)內(nèi)的阿里倉庫添加進(jìn)來,再一次口頭表揚(yáng)阿里,這造福廣大開發(fā)者的舉措。添加的方式非常簡(jiǎn)單,與其他項(xiàng)目的代理添加方式一致:
-
Name: proxy-go-gf
-
Proxy
- Remote Storage: 遠(yuǎn)程倉庫地址,這里填寫: https://goproxy.io
-
- (opens new window)
-
Storage: go-hub。
其他的均是默認(rèn)。
整體配置截圖如下:
如上兩步都比較簡(jiǎn)單,直接配置現(xiàn)成的代理即可。接下來進(jìn)入套娃代理的配置。
# 5,套娃代理。
這里套娃代理的思路非常簡(jiǎn)單,主要借助于go語言開源的私服工具Athens來實(shí)現(xiàn)。
有時(shí)候我們要下一些國(guó)外的包,或者GitHub上的包,這個(gè)時(shí)候可能僅僅配置如上兩個(gè)代理是不夠的,因?yàn)槲覀兯椒竭_(dá)如上代理的網(wǎng)絡(luò)可能會(huì)有問題,尤其是官方的代理,而阿里的代理又未必我們想要的全都有,于是,我們需要自建一個(gè)能夠快速下載國(guó)外包的代理。
這個(gè)代理通過Athens服務(wù)進(jìn)行部署,并且服務(wù)器節(jié)點(diǎn)放置在國(guó)外。為了方便,我們使用docker進(jìn)行部署。
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以上將在對(duì)外的主機(jī)上啟動(dòng)一個(gè)私服,主要用于下載外部的一些依賴包。通過如下規(guī)則配置一個(gè)可供訪問的域名,注意需要添加證書認(rèn)證。
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/;} }現(xiàn)在,我將繼續(xù)在內(nèi)網(wǎng)創(chuàng)建一個(gè)Athens代理,這個(gè)代理主要用于代理內(nèi)網(wǎng)Gitlab當(dāng)中的包,并將上邊對(duì)外的代理一并代理進(jìn)來,前邊所謂的套娃代理,就是從這兒而來。在本地的某臺(tái)主機(jī)上,啟動(dòng)如下服務(wù):
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作為包存儲(chǔ)路徑,接著又掛在了一個(gè)路徑 /data/athens/gitconfig/ssh-keys,這里邊存放著連接本地Gitlab的關(guān)鍵信息,大概如下:
$ 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其余三項(xiàng)內(nèi)容都是一個(gè)常規(guī)密鑰對(duì)的內(nèi)容,這里的秘鑰是在Gitlab當(dāng)中創(chuàng)建的deploy key,我們的代理就是通過這個(gè)key來訪問Gitlab項(xiàng)目的。
當(dāng)本地的代理跑起來之后,同樣需要配置一個(gè)域名用于訪問:
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/;} }配置完畢之后,就能投入使用了,現(xiàn)在直接將這個(gè)對(duì)外的地址,作為一個(gè)代理配置到nexus中。
-
Name: proxy-go-athens
-
Proxy
- Remote Storage: 遠(yuǎn)程倉庫地址,這里填寫: https://athens.test.com
-
- (opens new window)
-
Storage: go-hub。
其他的均是默認(rèn)。
整體配置截圖如下:
# 6,創(chuàng)建group類型的go倉庫
- Name:group-go
- Storage:選擇專用的blob存儲(chǔ)go-hub。
- group : 將左邊可選的4個(gè)倉庫,添加到右邊的members下。
整體配置截圖如下:
注意如上三個(gè)代理的上下順序,一定是最好用的越靠上,所有的group類型的代理都遵循這個(gè)規(guī)律。
# 7,簡(jiǎn)單驗(yàn)證
沒有使用私服之前,里邊是空空如也。
通過設(shè)置GOPROXY將代理指向私服地址,然后進(jìn)行項(xiàng)目的編譯,可以看到對(duì)應(yīng)的依賴的包已經(jīng)緩存到私服當(dāng)中了。
# 8,使用私服
私服配置完畢之后,日常使用當(dāng)中還會(huì)有各種各樣的情況,因此單獨(dú)寫了一篇文章來介紹一些使用上的經(jīng)驗(yàn)。
原文出處鏈接
總結(jié)
以上是生活随笔為你收集整理的使用nexus3配置golang私有仓库(go私服)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GOPROXY环境变量中direct的含
- 下一篇: 使用athens部署企业内部Gitlab