詳解使用?docker?compose?部署?golang?的?Athens?私有代理問(wèn)題
go中私有代理搭建
前言
最近公司的代理出現(xiàn)問(wèn)題了,剛好借這個(gè)機(jī)會(huì)來(lái)學(xué)習(xí)下,athens 如何構(gòu)建私有代理
為什么選擇 athens
私有化代理的選取標(biāo)準(zhǔn)無(wú)非就是下面的幾點(diǎn)
1、托管私有模塊;
2、排除對(duì)公有模塊的訪問(wèn);
3、存儲(chǔ)公有模塊;
athens 的特點(diǎn):
Athens 首先可以配置訪問(wèn)私有倉(cāng)庫(kù);
Athens 的會(huì)存儲(chǔ)每次拉取的包,如果該模塊之前沒(méi)有通過(guò) athens,athens 會(huì)向目標(biāo)地址請(qǐng)求數(shù)據(jù),在返回給客戶端的時(shí)候,會(huì)存儲(chǔ)該模塊到存儲(chǔ)中,這樣實(shí)現(xiàn)了 go mod download
永遠(yuǎn)只會(huì)發(fā)生一次;
Athens 處理存儲(chǔ)的策略為僅追加,一個(gè)模塊被保存,它就永遠(yuǎn)不會(huì)改變,即使開(kāi)發(fā)人員對(duì) tag 進(jìn)行了強(qiáng)推,那么也不會(huì)被刪除;
Athens 也可以配置下載策略,過(guò)濾一些有安全隱患的包。
Athens 支持 disk, mongo, gcs, s3, minio, 外部存儲(chǔ)/自定義,不過(guò)一般建議使用 disk。
使用 docker-compose 部署
官方網(wǎng)站已經(jīng),提供了通過(guò) docker 和 二進(jìn)制部署的方案,這里秉著好記性不如爛筆頭的原則,這里自己也做了記錄
配置私有倉(cāng)庫(kù)的認(rèn)證信息
通過(guò) .netrc
文件來(lái)配置,里面可以放自己的私有倉(cāng)庫(kù)的地址,以及用戶,密碼認(rèn)證信息
# cat .netrc machine gitlab.test.com login test-name password test-pass
有幾個(gè)私有倉(cāng)庫(kù),配置幾個(gè)就可以了
配置下載模式
通過(guò) The download mode
(下載模式配置策略)是現(xiàn)在 ATHENS 中比較推崇的,之前通過(guò) Filtering modules
(過(guò)濾模式)的方法,目前已經(jīng)被棄用了。
來(lái)看下如何配置
# DownloadMode defines how Athens behaves when a module@version # is not found in storage. There are 4 options: # 1. "sync" (default): download the module synchronously and # return the results to the client. # 2. "async": return 404, but asynchronously store the module # in the storage backend. # 3. "redirect": return a 301 redirect status to the client # with the base URL as the DownloadRedirectURL from below. # 4. "async_redirect": same as option number 3 but it will # asynchronously store the module to the backend. # 5. "none": return 404 if a module is not found and do nothing. # 6. "file:<path>": will point to an HCL file that specifies # any of the 5 options above based on different import paths. # 7. "custom:<base64-encoded-hcl>" is the same as option 6 # but the file is fully encoded in the option. This is # useful for using an environment variable in serverless # deployments. # Env override: ATHENS_DOWNLOAD_MODE DownloadMode = "sync"
通過(guò)環(huán)境變量 ATHENS_DOWNLOAD_MODE 可指定,也可以修改指定的 config.dev.toml
來(lái)配置,默認(rèn)是 sync
ATHENS_DOWNLOAD_MODE 可指定的內(nèi)容:
1、通過(guò) file:<path>
指定一個(gè) hcl 文件,里面可以對(duì)不同的倉(cāng)庫(kù),設(shè)置下載模式;
2、通過(guò) custom:<base64-encoded-hcl>
指定一個(gè) base64 編碼的 HCL 文件;
3、指定具體的全局策略,sync, async, none, redirect, or async_redirect
,這是一個(gè)全局的設(shè)置,上面的兩種是可以定制策略組的。
來(lái)看下具體的下載模式
sync: 通過(guò) 同步從 VCS 下載模塊
go mod download
,將其持久化到存儲(chǔ)中,并立即將其返回給用戶。請(qǐng)注意,這是默認(rèn)行為;async:向客戶端返回 404,并異步下載
module@version
并將其持久化到存儲(chǔ)中;none:返回 404 并且什么也不做;
redirect:重定向到上游代理(例如proxy.golang.org),之后什么也不做;
async_redirect:重定向到上游代理(例如
proxy.golang.org
)并異步下載module@version
并將其持久化到存儲(chǔ)中;
下面看下配置策略的 hcl 文件
# cat download.hcl downloadURL = "https://goproxy.cn" mode = "async_redirect" download "gitlab.test.com/*" { mode = "sync" }
部署
這里使用 docker-composer 部署
version: '2' services: athens: image: gomods/athens:v0.11.0 restart: always container_name: athens_proxy ports: - "3000:3000" volumes: - ./.netrc:/root/.netrc - ./athens-storage:/var/lib/athens - ./download.hcl:/root/download.hcl environment: - ATHENS_NETRC_PATH=/root/.netrc - ATHENS_STORAGE_TYPE=disk - ATHENS_DISK_STORAGE_ROOT=/var/lib/athens - ATHENS_GOGET_WORKERS=100 - ATHENS_DOWNLOAD_MODE=file:/root/download.hcl - ATHENS_GONOSUM_PATTERNS=gitlab.test.com
ATHENS_GONOSUM_PATTERNS:配置為私庫(kù)地址,配置的倉(cāng)庫(kù)地址,不會(huì)進(jìn)行安全向校驗(yàn)。
go 處于安全性考慮,為了保證開(kāi)發(fā)者的依賴(lài)庫(kù)不被人惡意劫持篡改,所以引入了 GOSUMDB 環(huán)境變量來(lái)設(shè)置校驗(yàn)服務(wù)器
當(dāng)你在本地對(duì)依賴(lài)進(jìn)行變動(dòng)(更新/添加)操作時(shí),Go 會(huì)自動(dòng)去這個(gè)服務(wù)器進(jìn)行數(shù)據(jù)校驗(yàn),保證你下的這個(gè)代碼庫(kù)和世界上其他人下的代碼庫(kù)是一樣的。如果有問(wèn)題,會(huì)有個(gè)大大的安全提示。當(dāng)然背后的這些操作都已經(jīng)集成在 Go 里面了,開(kāi)發(fā)者不需要進(jìn)行額外的操作。
對(duì)于我們的私有倉(cāng)庫(kù),去公共安全校驗(yàn)庫(kù)校驗(yàn),肯定是不能通過(guò)校驗(yàn)的,我們可以通過(guò) ATHENS_GONOSUM_PATTERNS 這個(gè)環(huán)境變量來(lái)設(shè)置不做校驗(yàn)的代碼倉(cāng)庫(kù), 它可以設(shè)置多個(gè)匹配路徑,用逗號(hào)相隔。
啟動(dòng) docker-compose up -d
客戶端設(shè)置代理 export GOPROXY=http://xxxx:3000
這樣就能使用我們的代理服務(wù)了
因?yàn)檫x擇的 ATHENS_STORAGE_TYPE 為 disk,athens 服務(wù)會(huì)在拉取資源包的同時(shí),也會(huì)下載資源包到配置的 ATHENS_DISK_STORAGE_ROOT 中。
使用秘鑰的方式認(rèn)證私有倉(cāng)庫(kù)
上面通過(guò) .netrc
的方式來(lái)認(rèn)證私有倉(cāng)庫(kù),因?yàn)橘~號(hào)密碼是銘文的總歸不太好,可以使用秘鑰的方式來(lái)認(rèn)證
1、配置秘鑰
首先查看電腦有沒(méi)有秘鑰
# cd .ssh # ls id_rsa id_rsa.pub
沒(méi)有的話通過(guò)下面的命令的生成
# ssh-keygen -t rsa -C "youremail@example.com"
郵箱換成自己的,一路回車(chē)即可
然后將 id_rsa.pub
公鑰的內(nèi)容添加到自己的私有倉(cāng)庫(kù)中,如何添加自己 google 吧,比較簡(jiǎn)單
2、配置 HTTP 與 SSH 重寫(xiě)規(guī)則
# cat gitconfig [url "ssh://git@gitlab.test.com"] insteadOf = https://gitlab.test.com
3、配置 SSH 來(lái)繞過(guò)主機(jī) SSH 鍵驗(yàn)證
# cat config Host gitlab.test.com Hostname gitlab.test.com StrictHostKeyChecking no IdentityFile /root/.ssh/id_rsa
將上面配置的認(rèn)證信息,映射到容器中即可
version: '2' services: athens: image: gomods/athens:v0.11.0 restart: always container_name: athens_proxy ports: - "3000:3000" volumes: - ./athens-storage:/var/lib/athens - ./download.hcl:/root/download.hcl - ./gitconfig:/root/.gitconfig - ./ssh-keys:/root/.ssh environment: - ATHENS_STORAGE_TYPE=disk - ATHENS_DISK_STORAGE_ROOT=/var/lib/athens - ATHENS_GOGET_WORKERS=100 - ATHENS_DOWNLOAD_MODE=file:/root/download.hcl - ATHENS_GONOSUM_PATTERNS=gitlab.test.com
這樣即可實(shí)現(xiàn)秘鑰的認(rèn)證了
需要注意私鑰的權(quán)限,剛開(kāi)始沒(méi)注意,執(zhí)行報(bào)了下面的錯(cuò)誤
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for '/root/.ssh/id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/root/.ssh/id_rsa": bad permissions git@gitlab.test.com: Permission denied (publickey). fatal: Could not read from remote repository.
看報(bào)錯(cuò)就可推斷出,是權(quán)限太大了,需要私鑰文件不能被其他人所訪問(wèn)。
修改權(quán)限就可以了
ssh-keys # chmod 600 id_rsa
具體的 demo 地址,可參見(jiàn)athens私有代理部署
參考
【介紹 ATHENS】
【download】
https://github.com/gomods/athens/blob/main/docs/content/configuration/download.md
【athens構(gòu)建golang私有代理】
https://github.com/boilingfrog/Go-POINT/blob/master/golang/go_environment/athens構(gòu)建golang私有代理.md
【使用 docker-compose 部署 golang 的 Athens 私有代理】
https://github.com/boilingfrog/Go-POINT/blob/master/golang/go_environment/athens構(gòu)建golang私有代理.md
到此這篇關(guān)于使用 docker-compose 部署 golang 的 Athens 私有代理的文章就介紹到這了,更多相關(guān)docker-compose 部署Athens 私有代理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker部署xxl-job-admin出現(xiàn)數(shù)據(jù)庫(kù)拒絕問(wèn)題及解決方法
這篇文章主要介紹了docker部署xxl-job-admin出現(xiàn)數(shù)據(jù)庫(kù)拒絕問(wèn)題,本文給大家分享正確的解決思路,對(duì)docker部署xxl-job-admin相關(guān)知識(shí)感興趣的朋友一起看看吧2023-02-02聊聊使用docker安裝nginx提供web服務(wù)的問(wèn)題
這篇文章主要介紹了使用docker安裝nginx提供web服務(wù),docker pull nginx命令用于拉取最新版本的nginx鏡像,需要的朋友可以參考下2022-04-04基于docker 搭建Prometheus+Grafana的過(guò)程詳解
這篇文章主要介紹了基于docker 搭建Prometheus+Grafana的過(guò)程詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03docker實(shí)現(xiàn)重新打tag并刪除原tag的鏡像
這篇文章主要介紹了docker實(shí)現(xiàn)重新打tag并刪除原tag的鏡像,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11詳解Windows?利用?WSL2?安裝?Docker?的2種方式
這篇文章主要介紹了Windows?利用?WSL2?安裝?Docker?的2種方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10在Docker中使用mongodb數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了在Docker中使用mongodb數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10Docker一行命令完成FTP服務(wù)搭建的實(shí)現(xiàn)
這篇文章主要介紹了Docker一行命令完成FTP服務(wù)搭建的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09