利用Docker搭建Nexus私有倉庫實現(xiàn)Maven私服
一、前言
相信國內(nèi)的小伙伴都經(jīng)歷過,Gradle、Maven、NPM下拉速度過慢的情況。我們一般的做法是配置阿里云這樣的中央倉庫。加速問題是可以采用這種方式解決,但如果是團(tuán)隊內(nèi)部的庫想進(jìn)行上傳分發(fā),傳到Maven Central這種共用的Maven倉庫就不太合適了。那樣保密性和時效性都將收到破壞。所以在團(tuán)隊內(nèi)部,我們一般都會搭建局域網(wǎng)內(nèi)私有的中央倉庫。支撐這種私有倉庫的軟件就是Nexus,本文將詳細(xì)介紹如何從零搭建、上傳庫、下拉庫整個使用過程。
二、Nexus搭建
現(xiàn)如今萬物皆可Docker,我們沒必要破壞本機(jī)系統(tǒng)原生安裝了。直接新建一個docker-compose.yml文件,寫入如下內(nèi)容:
version: '3.1'
services:
nexus:
restart: always
image: sonatype/nexus3
container_name: nexus
ports:
- 6005:8081
volumes:
- /data/Docker/nexus/data:/nexus-data 注意最后一行volumens映射的位置,如需備份還原,只需要將這個文件夾打包恢復(fù)即可。
寫好后,運行docker-compose up -d運行即可。然后訪問服務(wù)器的6005端口,看到這個界面就算搭建成功了。

三、配置倉庫
搭建好后,會有一些默認(rèn)的倉庫:
maven-central:maven 中央庫,默認(rèn)從 https://repo1.maven.org/maven2/ 拉取 jar
maven-releases:私庫發(fā)行版 jar maven-snapshots:私庫快照(調(diào)試版本)jar
maven-public:倉庫分組,把上面三個倉庫組合在一起對外提供服務(wù)
概念說明:
group:這是一個倉庫聚合的概念,用戶倉庫地址選擇 Group 的地址,即可訪問 Group中配置的,用于方便開發(fā)人員自己設(shè)定的倉庫。maven-public 就是一個 Group 類型的倉庫,內(nèi)部設(shè)置了多個倉庫,訪問順序取決于配置順序,3.x 默認(rèn)為Releases、Snapshots、Central,當(dāng)然你也可以自己設(shè)置。
hosted:私有倉庫,內(nèi)部項目的發(fā)布倉庫,專門用來存儲我們自己生成的 jar 文件 snapshots:本地項目的快照倉庫
releases: 本地項目發(fā)布的正式版本
proxy:代理類型,從遠(yuǎn)程中央倉庫中尋找數(shù)據(jù)的倉庫(可以點擊對應(yīng)的倉庫的Configuration 頁簽下 Remote Storage 屬性的值即被代理的遠(yuǎn)程倉庫的路徑),如可配置阿里云 maven 倉庫
central:中央倉庫
3.1 配置加速庫
我們通過上文了解到,Nexus默認(rèn)會從maven.org拉取我們需要的公共庫。我們需要配置一個阿里云的加速庫,這樣凡是需要公共庫的都會優(yōu)先從阿里云加速下載。在設(shè)置中,點擊創(chuàng)建倉庫。

可以看到,我們可以創(chuàng)建多種倉庫,Docker、Maven、NPM、Yum都可以。本文就以Maven為例了,其他倉庫都類似。

可以寫個名字,然后在Remote Storage的地址欄中,輸入阿里云的Maven倉庫:http://maven.aliyun.com/nexus/content/groups/public/

寫好后,就可以保存了。然后再進(jìn)入maven-public組的設(shè)置,將我們剛剛創(chuàng)建的aliyun-repository代理庫添加到右邊,并調(diào)到第一個位置。這樣一些公共庫比如Spring就會默認(rèn)從阿里云那邊下載,并且Nexus會自帶緩存功能,只有第一次需要下載。后續(xù)將直接從局域網(wǎng)的Nexus下載,大大加快了下載速度。(非常適合沒有外網(wǎng)開發(fā)的團(tuán)隊)

3.2 創(chuàng)建私有倉庫
配置好Maven的基礎(chǔ)加速庫后,我們就來創(chuàng)建一個團(tuán)隊內(nèi)部使用的Maven倉庫。我們繼續(xù)點擊創(chuàng)建倉庫,這里選擇maven2(hosted)。

Version policy下面有Release(正式版)、Snapshots(測試版)、Mixed(混合)三個選項,其實和我們平時引用第三方的庫是一樣的,只是我們一般會引用第三方庫的正式版。Deployment policy這里我選擇了Allow redeploy可以覆蓋上傳,你可以根據(jù)自身情況調(diào)整下面這些參數(shù)。

創(chuàng)建好后就可以直接使用了。但在此之前,我們最好配置一下開發(fā)賬號,因為上傳庫的時候需要有賬號密碼。如果直接把系統(tǒng)管理員的賬號給開發(fā)者會比較危險,畢竟現(xiàn)在刪庫跑路的很多。
四、配置權(quán)限
在設(shè)置頁面的Roles里先創(chuàng)建一個角色:

然后只給這個開發(fā)這個角色,固定倉庫的瀏覽和編輯權(quán)限。

最后創(chuàng)建用戶,然后將該用戶名、密碼和該倉庫的地址給到開發(fā)者就可以了。

倉庫地址可以點擊列表中Copy得到:

五、上傳Jar包
上傳Jar包到私有倉庫的方式其實有很多種,我們一般項目中一般會采用Maven或Gradle腳本來進(jìn)行。Maven大家應(yīng)該都比較熟了,我這里就用安卓人狂喜的Gradle來演示一下。在build.gradle中編寫如下腳本即可上傳。

方便大佬復(fù)制:
group 'com.niubi'
version '1.0-SNAPSHOT'
//加載插件
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'idea'
//配置打Jar包的參數(shù)
javadoc {
failOnError false
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
options.addStringOption('charSet', 'UTF-8')
}
//打包文檔
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from 'build/docs/javadoc'
}
//打包源代碼
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives jar
archives javadocJar
archives sourcesJar
}
uploadArchives {
repositories {
mavenDeployer {
// 開發(fā)版
snapshotRepository(url: "http://XXX:6005/repository/GfptLib/") {
authentication(userName: "xxx", password: "xxx")
}
/*// 正式版
repository(url: "http://XXX:8081/repository/maven-releases/") {
authentication(userName: "xxx", password: "xxx")
}*/
// 只發(fā)布jar包
addFilter('jar') {artifact, file ->
artifact.ext == 'jar'
}
pom.groupId = "$project.group"
pom.artifactId = "$project.name"
pom.version = "$project.version"
}
}
}和Maven一樣,我們寫好后,可以直接在IDEA的Gradle窗口中看到這個命令,雙擊即可運行上傳:

運行成功后,就可以在Maven倉庫中看到該Jar包,并可以將該jar包引用到項目中去。
六、使用Jar包
和引用第三方庫的用法一樣,只需要將剛剛上傳jar包的坐標(biāo)寫對后就可以使用:
compile("com.niubi:util:latest.integration")當(dāng)然,在倉庫依賴地址中,我們需要加入自己的Maven私服地址:
// 【倉庫設(shè)置】
repositories {
// 使用本地倉庫
mavenLocal()
// 使用團(tuán)隊私服倉庫
maven {
url "http://xxx:6005/repository/GfptLib/"
}
maven {
url "http://xxx:6005/repository/maven-public/"
}
// 使用 Gradle 的自身默認(rèn)配置加載倉庫
mavenCentral()
}重新編譯一下,就可以下載到我們剛剛上傳的Jar包了。
到此這篇關(guān)于Docker輕松搭建Nexus私有倉庫,實現(xiàn)Maven私服的文章就介紹到這了,更多相關(guān)Docker搭建Nexus私有倉庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker mysql修改root賬號密碼并賦予權(quán)限
本文主要介紹了docker mysql修改root賬號密碼并賦予權(quán)限,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
docker?搭建?vulhub?靶場環(huán)境的詳細(xì)過程
Vulhub是一個基于docker和docker-compose的漏洞環(huán)境集合,進(jìn)入對應(yīng)目錄并執(zhí)行一條語句即可啟動一個全新的漏洞環(huán)境,讓漏洞復(fù)現(xiàn)變得更加簡單,讓安全研究者更加專注于漏洞原理本身,這篇文章給大家介紹docker?搭建?vulhub?靶場環(huán)境的過程,感興趣的朋友一起看看吧2022-08-08
Docker 數(shù)據(jù)卷操作的實現(xiàn)
這篇文章主要介紹了Docker 數(shù)據(jù)卷操作的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
如何通過Dockerfile 創(chuàng)建 kali-novnc
這篇文章主要介紹了如何通過Dockerfile 創(chuàng)建 kali-novnc,在Dockerfile所在目錄運行相關(guān)命令操作即可完成,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-04-04
內(nèi)網(wǎng)環(huán)境下registry搭建步驟詳解
這篇文章主要為大家介紹了內(nèi)網(wǎng)環(huán)境下的registry搭建步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Docker Compose搭建Redis主從復(fù)制環(huán)境的實現(xiàn)步驟
在Docker中搭建Redis主從架構(gòu)非常方便,下面是一個示例,演示如何使用Docker Compose設(shè)置一個Redis主從復(fù)制環(huán)境,文中有詳細(xì)的代碼示例,具有一定的參考價值,需要的朋友可以參考下2023-09-09

