nexus搭建maven倉庫管理

Linux搭建nexus倉庫

1.安裝jdk

1.1 獲取安裝包,解壓到指定目錄:

1 tar xf jdk.tar.gz -C /opt/export

1.2 配置環境變量:

複製代碼
1 # vim /etc/profile
2 export JAVA_HOME=/opt/export/jdk
3 export PATH=$JAVA_HOME/bin:$PATH
4 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
5 export RUN_AS_USER=root  # 後邊啓動nexus須要
6 
7 # source /etc/profile
複製代碼

1.3 出現下面結果,說明部署成功

1 # java -version
2 java version "1.7.0_80"
3 Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
4 Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

2.安裝nexus

2.1下載安裝

下載地址:html

https://www.sonatype.com/download-oss-sonatype
https://help.sonatype.com/repomanager2/download/download-archives---repository-manager-ossjava

1 cd /opt
2 tar xf nexus-2.4.0-09-bundle.tar.gz

解壓後有兩個目錄:linux

1 $ ls /opt/
2 nexus-2.4.0-09  sonatype-work

更改目錄名稱:git

1 mv nexus-2.4.0-09 nexus

2.2 更改nexus配置文件

默認端口爲8081,可根據須要修改:github

複製代碼
 1 $ vim /opt/nexus/conf/nexus.properties
 2 # Jetty section
 3 application-port=8081  # 修改成10890
 4 application-host=0.0.0.0
 5 nexus-webapp=${bundleBasedir}/nexus
 6 nexus-webapp-context-path=/nexus
 7 
 8 # Nexus section
 9 nexus-work=${bundleBasedir}/../sonatype-work/nexus
10 runtime=${bundleBasedir}/nexus/WEB-INF
複製代碼

2.3 關閉防火牆或打開10890端口

1 /etc/init.d/iptables stop
2 chkconfig iptables off

2.4 啓動nexus

1 $ /opt/nexus/bin/jsw/linux-x86-64/nexus start
2 ****************************************
3 WARNING - NOT RECOMMENDED TO RUN AS ROOT
4 ****************************************
5 Starting Nexus OSS...
6 Started Nexus OSS.

若是沒有配置環境變量RUN_AS_USER=root,會報錯:web

1 # /opt/nexus/bin/jsw/linux-x86-64/nexus start
2 ****************************************
3 WARNING - NOT RECOMMENDED TO RUN AS ROOT
4 ****************************************
5 If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script.

2.5 檢查進程和端口 

 3.瀏覽器訪問nexus

1 http://ip地址:8081/nexus
2 登陸,默認用戶名 admin 默認密碼 admin123

 訪問登陸:apache

4.遷移nexus

若是想要將nexus倉庫遷移,只須要打包此目錄,遷移到新nexus主機:vim

1 $ du -sh /opt/sonatype-work/nexus/storage
2 47G    /opt/sonatype-work/nexus/storage/

因爲文件過大,可採用rsync的方式。瀏覽器

本文參考:http://www.javashuo.com/article/p-wqroehgi-mh.html緩存

Nexus高可用方案

描述:因爲nexus進程會由於某些緣由掛掉,爲了避免影響使用,決定作nexus高可用。

準備:根據上一章,準備兩臺服務器搭建nexus,主:192.168.51.204 maven01,備:192.168.51.207 maven02:

1.搭建keepalived

主:

複製代碼
 1 # cat /etc/keepalived/keepalived.conf
 2 ! Configuration File for keepalived
 3 
 4 global_defs {
 5    router_id maven01
 6 }
 7 vrrp_script chk_http_port {              #檢測nexus端口是否存在,不存在進行vip漂移
 8     script "</dev/tcp/127.0.0.1/10890"
 9     interval 1
10     weight -30
11     fall 1
12     rise 1
13 }
14 vrrp_instance VI_1 {
15     state MASTER
16     interface eth0
17     virtual_router_id 88
18     priority 150
19     advert_int 1
20     authentication {
21         auth_type PASS
22         auth_pass 1111
23     }
24     virtual_ipaddress {
25         192.168.51.210
26     }
27     track_script {
28         chk_http_port
29     }
30 }
複製代碼

備:

複製代碼
 1 # cat /etc/keepalived/keepalived.conf
 2 ! Configuration File for keepalived
 3 
 4 global_defs {
 5    router_id maven01
 6 }
 7 vrrp_script chk_http_port {
 8     script "</dev/tcp/127.0.0.1/10890"
 9     interval 1
10     weight -30
11     fall 1
12     rise 1
13 }
14 vrrp_instance VI_1 {
15     state MASTER
16     interface eth0
17     virtual_router_id 88
18     priority 100
19     advert_int 1
20     authentication {
21         auth_type PASS
22         auth_pass 1111
23     }
24     virtual_ipaddress {
25         192.168.51.210
26     }
27     track_script {
28         chk_http_port
29     }
30 }
複製代碼

2.同步數據

描述:對比同步數據方式,1⃣️定時任務rsync同步:不及時,容易遺漏數據。2⃣️nfs共享:可以解決數據一致問題,可是主一旦宕機,備庫起不到任何做用。3⃣️sersync或者inotify+rsync:能夠實現實時同步,最後選用inotify方式。

2.1 部署rsync

2.1.1 備:部署rsync服務端

安裝rsync軟件

1 yum install -y rsync

編寫配置文件

複製代碼
 1 $ cat /etc/rsyncd.conf
 2 #created by yjn at 2018
 3 
 4 uid = rsync
 5 gid = rsync
 6 use chroot = no
 7 max connections = 10
 8 strict modes = yes
 9 pid file = /var/run/rsyncd.pid
10 lock file = /var/run/rsync.lock
11 log file = /var/log/rsyncd.log
12 
13 [nexus]
14 path = /opt/sonatype-work/nexus/storage
15 comment = "nexus backup dir"
16 ignore errors
17 read only = no
18 write only = no
19 hosts allow = 192.168.0.0/16
20 auth users = rsync_backup
21 secrets file = /etc/rsync.password
複製代碼

建立備份目錄的管理用戶

1 useradd -s /sbin/nologin -M rsync

建立安全認證文件

1 echo "rsync_backup:123" >/etc/rsync.password
2 chmod 600 /etc/rsync.password

修改備份目錄屬主

1 chown -R rsync.rsync  /opt/sonatype-work/nexus/storage

啓動rsync服務

1 rsync --daemon
2 說明:rsync服務的端口號爲873端口(tcp)

2.1.2 主:部署rsync客戶端

安裝rsync軟件

1 yum install -y rsync

建立安全認證文件

1 echo "123" >/etc/rsync.password
2 chmod 600 /etc/rsync.password

2.2 部署inotify-tools軟件

inotify軟件的參考資料連接:https://github.com/rvoicilas/inotify-tools/wiki

複製代碼
1 # yum install -y inotify-tools
2 Loaded plugins: fastestmirror, security
3 Setting up Install Process
4 Loading mirror speeds from cached hostfile
5  * base: mirrors.zju.edu.cn
6  * extras: mirror.bit.edu.cn
7  * updates: mirrors.tuna.tsinghua.edu.cn
8 No package inotify-tools available.
9 Error: Nothing to do
複製代碼

沒有這個包,更新epel源:

1 yum install -y epel-release && yum update

2.3 inotify+rsync結合腳本同步nexus

2.3.1 寫同步腳本

複製代碼
#!/bin/bash
###########

inotifywait -mrq /opt/sonatype-work/nexus/storage  --format '%w%f'  -e create,delete,close_write,moved_to|\
while read line
do
  rsync -az --delete  /opt/sonatype-work/nexus/storage/*  rsync_backup@192.168.51.207::nexus --password-file=/etc/rsync.password &>/dev/null
done
複製代碼

2.3.2 後臺執行:

1 sh /yjn/scripts/backup.sh &

2.3.3 發現報錯:

1 Failed to watch /opt/sonatype-work/nexus/storage; upper limit on inotify watches reached!
2 Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.

  注意:inotify默認監控同步文件的個數是有限制的,8192,經過配置文件/proc/sys/fs/inotify/max_user_watches能夠調整監控的個數。此問題明顯就是文件太多,致使沒法監控。

 2.3.4 解決

1 echo 8192000 > /proc/sys/fs/inotify/max_user_watches

此時再執行腳本,沒有報錯信息,驗證能夠同步。

轉自 http://www.javashuo.com/article/p-hpykvysy-m.html

-------- 

 

一 前提準備

1 maven環境 3.5+,java環境 1.8+。

##maven環境變量


M2_HOME ##建立maven環境變量
F:\Mysoft\maven\apache-maven-3.5.2-bin\apache-maven-3.5.2 ##安裝路徑 bin文件夾父目錄

%M2_HOME%\bin; ##加入path
2 安裝好nexus3 window安裝nexus(maven私服)

二 實現目標

1 配置maven本地倉庫

2 配置遠程倉庫

名稱 類型 做用
倉庫組(group) maven2-group 虛擬倉庫組,用於集中管理倉庫
第三方依賴倉庫(3dr) maven2-hosted 本地倉庫,用於管理公網無資源的第三方jar,例如oracle驅動
穩定發行倉庫(releases) maven2-hosted 本地倉庫,用於管理穩定發行的jar
內測快照倉庫(snapshots) maven2-hosted 本地倉庫,用於管理內測發行的jar
代理中央倉庫(proxy) maven2-proxy 代理中央倉庫,用於指定公網倉庫地址,例如指定阿里雲maven中央倉庫
3 配置使用maven私服,以及發佈下載jar

三 架構圖

一、結構圖

 

如圖:爲maven-nexus-proxymaven的交互架構圖
藍色虛線爲使用外網代理私服的路線
紅色虛線爲使用內網資源轉移下載路線


##外網

maven本地倉庫 指定本地位置緩存下載的jar 默認爲官方中央倉庫 可配置爲私服代理(阿里私服)
nexus私服倉庫 經過代理倉庫下載緩存jar 提供給局域網內各個maven資源
maven本地倉庫 能夠經過發佈jar到nexus私服進行管理 提供給其餘用戶使用

##內網

maven本地倉庫 指定本地位置緩存下載的jar 必須配置私服 不然下載時超時
nexus私服倉庫 經過代理倉庫下載緩存jar 若是內網有穿透的機子能夠使用代理,若無則要經過存儲媒介在外網下載jar後 內網上傳至nexus私服倉庫 提供給局域網內各個maven資源
maven本地倉庫 能夠經過發佈jar到nexus私服進行管理 提供給其餘用戶使用
2 部署圖

 

##根據開發規範細分私服如上

一、3rd 私服本地庫:用於存放三方包,包括oracle驅動,公司外部支持jar
二、releases 私服本地庫:用於存放穩定版本的jar 內網環境下能夠上傳外網下載的jar
三、snapshots 私服本地庫:用於存放內測版本的jar 能夠設置更新策略爲實時
四、proxy 私服代理庫:用於存放外網中央倉庫地址 內網環境下通常不存在
五、group 私服公共庫:將多個庫虛擬成一個庫 供方便引用和管理

注意:開發上傳外網資源能夠存在穩定版本release庫,則公司內部jar在內網中如同外網jar
開發正在開發的小版本庫能夠上傳內測snapshot庫,通常狀況使用svn去管理
開發使用的公司外部jar,須要上傳3rd庫,以便其餘用戶下載
開發下載插件和依賴jar均使用公共庫group便可
 四 配置nexus

一、檢測maven環境

mvn -v ##須要配置 JAVA_HOME,M2_HOME


二、啓動nexus並登錄

http://localhost:8082/ ##nexus服務ip:port 帳號密碼默認 admin admin123
 

若是不修改默認有4個庫  1個proxy,1個group,1個release和1個snapshot,3rd在低版本有 nexus3默認沒有了 

若是須要使用,須要按實際狀況配置,一下可選爲*

 

(1)* 配置倉庫 

可點擊新建倉庫(略)

 

(2)* 配置proxy

點擊maven-central 進入配置

配置外網代理maven倉庫,例如 http://maven.aliyun.com/nexus/content/groups/public/ 阿里雲

 

選擇緩存文件位置,默認只有一個在nexus安裝路徑 

 

(3)配置maven-snapshot和maven-release

啓用maven-snapshot與maven-release發佈功能 (snapshot修改相同)

 

(4)*配置maven-public倉庫  

能夠將現有倉庫聚合

 

三、*配置用戶

用戶默認爲admin,admin123

 

(1)* 新增一個zhangsan

 

五 配置maven

(若是配置在maven setting中則爲全局配置  若是配置爲項目pom中則爲項目配置)

一、修改maven setting.xml配置

##文件座標
F:\mysoft\apache-maven-3.5.2-bin\apache-maven-3.5.2\conf\setting.xml
 關鍵配置


<!--maven 私服管理配置-->
<servers>
<server>
<id>maven-releases</id>
<!--保持id惟一 用於引用-->
<username>admin</username>
<password>admin123</password>
<!--這個密碼就是你設置的密碼-->
</server>
<server>
<id>maven-snapshots</id>
<!--保持id惟一 用於引用-->
<username>admin</username>
<password>admin123</password>
<!--這個密碼就是你設置的密碼-->
</server>
</servers>
詳細配置(可省略)

<!--maven本地倉庫配置-->
<localRepository>F:\mysoft\apache-maven-3.5.2-bin\maven_repository</localRepository>


<!--maven 私服管理配置-->
<servers>
<server>
<id>maven-releases</id>
<!--保持id惟一 用於引用-->
<username>admin</username>
<password>admin123</password>
<!--這個密碼就是你設置的密碼-->
</server>
<server>
<id>maven-snapshots</id>
<!--保持id惟一 用於引用-->
<username>admin</username>
<password>admin123</password>
<!--這個密碼就是你設置的密碼-->
</server>
</servers>


<!--如下是中央倉庫配置 如同使用proxy指定下載點 再無私服公共倉庫時直接到中央倉庫下載-->
<mirrors>
<!--如下是默認配置,本來爲註釋-->
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
<!--能夠新增 配置私服公共倉庫 配置阿里雲公共倉庫-->
</mirrors>


<!--如下是通常不配置 由於項目多個狀況下仍是使用pom文件配置最佳-->
<!--動態配置參數-->
<profiles>
<!--各個環境配置-->
<profile>
<id>env-test</id>
<!--省略 倉庫分類指定,版本庫刷新等,詳見pom.xml-->
</profile>
<profile>
<id>env-dev</id>
</profile>
</profiles>

<!--激活配置參數-->
<activeProfiles>
<activeProfile>env-dev</activeProfile>
</activeProfiles>
二、修改項目pom.xml文件 (父pom便可)

(1)配置下載使用maven公共庫maven-group

<!--倉庫配置 如同maven 配置鏡像-->
<repositories>
<repository>
<id>maven-public</id>
<name>maven-public</name>
<url>http://localhost:8082/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</repository>
</repositories>
<!--插件庫配置 -->
<pluginRepositories>
<pluginRepository>
<id>mmaven-public</id>
<name>maven-public</name>
<url>http://localhost:8082/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
(2)配置發佈到maven本地庫 maven-releases以及maven-snapshots

<!--配置倉庫管理-->
<distributionManagement>
<!--設置發佈穩定倉庫-->
<repository>
<id>maven-releases</id>
<!--id必須與setting中對應 使用setting配置用戶-->
<name>User Project Release</name>
<url>http://localhost:8082/repository/maven-releases/</url>
</repository>
<!--設置發佈的快照庫-->
<snapshotRepository>
<id>maven-snapshots</id>
<!--id必須與setting中對應 使用setting配置用戶-->
<name>User Project SNAPSHOTS</name>
<url>http://localhost:8082/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
(3)使用profile(可省略)

<profiles>
<profile>
<id>env-dev</id>
<!--命名惟一-->
<repositories>
<repository>
<id>maven-public</id>
<name>maven-public</name>
<url>http://localhost:8082/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-public</id>
<name>maven-public</name>
<url>http://localhost:8082/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>User Project Release</name>
<url>http://localhost:8082/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>User Project SNAPSHOTS</name>
<url>http://localhost:8082/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
</profile>
<!--如下省略其餘profile-->
</profiles>


六 使用(以idea爲例)

(1)配置使用maven 

 file--》setting--》maven--》指定安裝的maven

 

(2)使用maven工具

ctrl+shift+A   輸入  maven projects  點擊則右邊側邊欄出現maven project管理工具

 

 

一、下載遠程倉庫文件

 

二、發佈release

 

##
注意release版本發佈 版本號必須不能以snapshot結尾


三、上傳第三方文件

語法:
mvn deploy:deploy-file
-DgroupId= <group-id>\包名前綴 com.公司名
-DartifactId= <artifact-id>\包項目名 xxx項目
-Dversion= <version>\包版本號 v1.0.0.1(純數字最佳)
-Dpackaging= <type-of-packaging>\打包類型 通常爲jar
-Dfile= <path-to-file>\須要上傳文件的路徑
-DrepositoryId= <id-to-map-on-server-section-of-settings.xml>\serverid(setting指定)
-Durl= <url-of-the-repository-to-deploy>

例子:

mvn deploy:deploy-file -DgroupId=com.oracle
-DartifactId=jdbc -Dversion=1.0 -Dfile=ojdbc6.jar
-DrepositoryId=maven-release -Durl=http://ip:prot/repository/maven-releases/

--------------------- 版權聲明:本文爲CSDN博主「MarsAres」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/qq_22211217/article/details/81075978

相關文章
相關標籤/搜索