Nexus構建npm、yum、maven私有倉庫


nuxus是什么

剛接觸nuxus是因為主流技術maven,構建maven環境的時候一般都會用maven+nuxus。那就得先說一下maven是什么?
Maven是一個用於項目構建的工具,通過它便捷的管理項目的生命周期。即項目的jar包依賴,開發,測試,發布打包。
主要管理工作是:依賴管理,項目一鍵構建。maven項目不需要手動導入jar包,通過在pom.xml中添加依賴,引用依賴會自動從maven倉庫下載jar包,方便快捷。

  • 使用maven構建的項目,整個項目的體積小
  • maven項目不需要手動導入jar包,通過在pom.xml中添加依賴,引用依賴會自動從maven倉庫下載jar包,方便快捷。
  • 項目一鍵構建:使用maven可以快速地對項目進行編譯--測試--運行--打包--安裝
  • maven支持跨平台操作,可在window、linux、mac上使用
  • maven遵循規范開發有利於提高大型團隊的開發效率,降低項目的維護成本,屬於主流技術,一般公司都會使用maven來構建項目

如上圖所示nexus就是私有倉庫的一種,架設在局域網中,可解決項目直接連接中央倉庫獲取依賴速度慢或者根本連不上的問題。那既然是倉庫總不至於只能整合maven的是吧。當然不是

看圖說話,nexus可以整合包括maven、npm、pupi、go、rpm、apt-get等常用的倉庫,用官方的話說就是Single source of truth for all of your components, binaries, and build artifacts,並且還可以避免Maven / Java,npm,NuGet和PyPI組件的已知安全和許可證問題。是不是很強大,瞬間解決很多內網項目的困境。
官方地址
官方文檔

安裝

docker安裝

官方文檔

docker pull sonatype/nexus3
mkdir /data/nexus-data && chown -R 200 /data/nexus-data
docker run -d -p 8081:8081 --name nexus -v /data/nexus-data:/nexus-data --restart=always sonatype/nexus3
curl -u admin:admin123 http://localhost:8081/service/metrics/ping   檢測連通性,需要等待初始化完成,大概1分鍾

http://:8081$ip
admin
admin123

服務器安裝

1、下載nexus

useradd nexus
echo "123456" | passwd  --stdin  nexus

wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz --no-check-certificate
下載地址

vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536

2、vim /home/nexus/nexus-3.15.2-01/bin/nexus.rc
run_as_user="nexus"
3、vim /home/nexus/nexus-3.15.2-01/bin/nexus (可選,neuxs用戶下有java的環境變量即可)
INSTALL4J_JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64"
4、vim /home/nexus/nexus-3.15.2-01/etc/nexus-default.properties (可選,如果需要修改端口號)
application-port=8081 設置端口,如果有需要
5、添加到systemctl(可選,需要root權限)
vim /etc/systemd/system/nexus.service

########################
[Unit]
Description=nexus service
After=network.target

[Service]
Type=forking
LimitNOFILE=65536 
ExecStart=/home/nexus/nexus-3.15.2-01/bin/nexus start
ExecStop=/home/nexus/nexus-3.15.2-01/bin/nexus stop
User=nexus
Restart=on-abort

[Install]
WantedBy=multi-user.target
#################################

systemctl daemon-reload
systemctl start nexus.service
6、打開UI驗證
http://:8081$IP
用戶名:admin
密碼:admin123
7、修改數據目錄(可選)
vim /home/nexus/nexus-3.15.2-01/bin/nexus.vmoptions

8、開啟https
生成keystore文件

keytool -genkeypair\
-keystore /home/nexus/nexus-3.15.2-01/etc/ssl/keystore.jks\
-alias nexus\
-keypass nexus@123\
-storepass nexus@123\
-keyalg RSA\
-keysize 2048 \
-validity 5000 \
-dname "CN=*.test.com,OU=TEST,O=TEST,L=Shenzhen,ST=Guangdong,C=CN"\
-ext "SAN=IP:192.168.2.22"\      
-ext "BC=ca:true"

vim /opt/sonatype-work/nexus3/etc/nexus.properties

nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml,${jetty.etc}/jetty-https.xml

application-port-ssl=8443

vim /opt/nexus-3.5.0-02/etc/jetty/jetty-https.xml

systemctl enable nexus
systemctl restart nexus

整合NPM

配置npm倉庫

創建存儲空間


創建倉庫

這三種分別是:
hosted(私有倉庫):用於發布個人開發的npm組件
proxy(代理倉庫):可以代理npm和淘寶鏡像
group(組合倉庫):對外公開的倉庫,集合了hosted和proxy

創建私有倉庫

創建代理倉庫

創建組合倉庫


注意右邊的框框,需要調優先級。如果私有倉庫在上,用戶下載npm包的時候會優先下載私有倉庫中的,私有倉庫沒有再去代理倉庫中下載。

創建用戶

客戶端使用

1、用戶端設置npm的registry為group倉庫

配置本地倉庫源,有兩種方法

或者

  • cd /home/nexus ;echo "剛才copy的group地址" > .npmrc

在客戶端上,我們配置的私有倉庫是group(組合倉庫)地址,組合倉庫包含了本地庫hosted和代理庫proxy,並設置了優先級。
執行npm install,如果本地庫沒有包的話,就去代理庫里拉,然后放到group倉庫中。

2、客戶端發布自己的npm包到私服(執行的命令均在發布的模塊根目錄下)
npm login –registry=http://npm私服所在服務器的ip地址:8081/repository/npm-hosted/
輸入用戶名,密碼
npm publish –registry=http://npm私服所在服務器的ip地址:8081/repository/npm-hosted/

將自己的只做的包放到hosted(本地庫)上共享

查看

報錯

npm ERR! code E401
npm ERR! Unable to authenticate, need: BASIC realm="Sonatype Nexus Repository Manager"

遇到這個報錯,即使配了正確的用戶名密碼也會報錯。
使用npm config list找到配置文件位置

vim /root/.npmrc
把文件里 _authToken的行全部刪除

集成到jenkins

官方文檔

IQserver

我還納悶呢,度娘一點IQserver的帖子都沒有,翻翻官方,發現是要銀子的。沒得測試了,貼個文檔有機會再說吧
官方文檔
下載地址

yum庫

配置yum私有庫

本地庫host

代理庫proxy(https://mirrors.ustc.edu.cn/centos/)

group庫
和npm的一樣,把剛才創建的host和proxy都加入

復制私有庫地址

編寫nexus的repo放到/etc/yum.repos.d/

cd /etc/yum.repos.d/
mkdir bak
mv * bak
vim nexus.repo

注意$releasever/os/$basearch/不能少,官方介紹

大意是說必須遵守代理源的OS和x86_64體系結構

[nexus]
name=Nexus Repository
baseurl=http://10.60.1.93:8081/repository/yumgroup/$releasever/os/$basearch/
enabled=1
gpgcheck=0

#released updates
[updates]
name=CentOS-$releasever-Updates-163.com
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
 
#additional packages that may be useful
[extras]
name=CentOS-$releasever-Extras-163.com
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://mirrors.163.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
 
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever-Plus-163.com
baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7

構建緩存

yum clean all
yum makecache

驗證緩存
查看repo庫建立的緩存,沒有這個拉不到鏡像

測試私有庫

cd /etc/yum.repos.d/
mkdir bak
mv * bak
vim nexus.repo

[nexus]
name=Nexus Repository
baseurl=http://10.60.1.93:8081/repository/yumgroup/$releasever/os/$basearch/
enabled=1
gpgcheck=0

yum install -y lrzsz

配置kubenate鏡像庫

配置一個代理庫,添加地址https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64


客戶端配置代理庫地址

[nexus]
name=Nexus Repository
baseurl=http://10.60.1.93:8081/repository/kube_ali/
enabled=1
gpgcheck=0

yum makecache
查看代理庫,已建立緩存

客戶端執行yum報錯缺依賴包

懷疑是索引的問題,重建一下索引,解決。

上傳自己的rpm包

有個疑問,感覺host庫的目錄深度設置成0和2沒啥區別,都傳上去了?
單個包

i=conntrack-tools-1.4.4-7.el7.x86_64.rpm
ip=x.x.x.x
curl -v --user 'admin:admin123' --upload-file $i http://$ip:8081/repository/yumhost/$i

多個包

for i in `ls /root/upload/for_zbw/rpms`; do curl -v --user 'admin:admin123' --upload-file $i http://$ip:8081/repository/yumhost/$i; done

客戶端執行,也沒個success,只能查看host庫里邊有沒有東西判斷上傳是否成功。

配置meven倉庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM