15. Nexus

1 Nexus介绍

Nexus 是一个强大的 Maven 仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。通常在公司内部会搭建私有的maven仓库, 来存储java编译过程中需要的依赖包. 初次编译时, maven仓库会从官网下载依赖包到本地, 这样经过几次编译后, 本地就会存储大部分的依赖包, 如果本地没有, 那么maven仓库会去官网进行下载.

一般来说, 在公司内部会有专门的编译服务器, 这些服务器的内存和cpu都是配置很高的, 在代码上线时, 开发把代码提交到gitlab, 再由运维人员在jenkins触发编译和代码上线的任务. 编译过程中, 编译服务器会去本地的maven仓库下载依赖包, 如果本地没有, 再去官网下载, 以此来加速编译的速度

2 Nexus部署

maven 官方仓库: http://repo.maven.apache.org
Nexus官方下载页面: https://help.sonatype.com/repomanager3/download/download-archives---repository-manager-3

图片.png

环境:

Ubuntu-1804 10.0.0.139 8G 4C, 官方提示最少4个CPU
Maven 3.6.3 二进制
Nexus 3.31.1

2.1 安装jdk

root@Nexus:~# apt -y install openjdk-8-jdk

2.2 安装Nexus

root@Nexus:~# mkdir /apps
root@Nexus:~# cd /apps
root@Nexus:/apps# ls
nexus-3.31.1-01-unix.tar.gz
root@Nexus:/apps# tar xf nexus-3.31.1-01-unix.tar.gz 
root@Nexus:/apps# ln -sv nexus-3.31.1-01 nexus
'nexus' -> 'nexus-3.31.1-01'
root@Nexus:/apps# ll
total 188388
drwxr-xr-x  4 root root      4096 Jun 30 15:59 ./
drwxr-xr-x 25 root root      4096 Jun 30 15:58 ../
lrwxrwxrwx  1 root root        15 Jun 30 15:59 nexus -> nexus-3.31.1-01/
drwxr-xr-x 10 root root      4096 Jun 30 15:59 nexus-3.31.1-01/
-rw-r--r--  1 root root 192890245 Jun 30 15:56 nexus-3.31.1-01-unix.tar.gz
drwxr-xr-x  3 root root      4096 Jun 30 15:59 sonatype-work/


2.3 启动Nexus

root@Nexus:~# cd /apps/nexus
root@Nexus:/apps/nexus# ./bin/nexus --help
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Usage: ./bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}

2.3 通过Service文件启动

root@Nexus:/apps/nexus# vim /lib/systemd/system/nexus.service

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

[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/apps/nexus/bin/nexus start
ExecStop=/apps/nexus/bin/nexus stop                                                                                                                                         
User=nexus
Restart=on-abort
TimeoutSec=600

[Install]
WantedBy=multi-user.target
root@Nexus:/apps/nexus# useradd nexus -r 
root@Nexus:/apps/nexus# id nexus
uid=999(nexus) gid=999(nexus) groups=999(nexus)

root@Nexus:/apps/nexus# chown -R nexus.nexus /apps/nexus
root@Nexus:/apps/nexus# chown -R nexus.nexus /apps/nexus/
root@Nexus:/apps/nexus# chown -R nexus.nexus /apps/sonatype-work/
root@Nexus:/apps/nexus# systemctl daemon-reload
root@Nexus:/apps/nexus# systemctl start nexus
root@Nexus:/apps/nexus# systemctl enable --now  nexus
Created symlink /etc/systemd/system/multi-user.target.wants/nexus.service → /lib/systemd/system/nexus.service.
root@Nexus:/apps/nexus# ll /apps
total 188388
drwxr-xr-x  4 root  root       4096 Jun 30 15:59 ./
drwxr-xr-x 25 root  root       4096 Jun 30 15:58 ../
lrwxrwxrwx  1 nexus nexus        15 Jun 30 15:59 nexus -> nexus-3.31.1-01/
drwxr-xr-x 10 nexus nexus      4096 Jun 30 15:59 nexus-3.31.1-01/
-rw-r--r--  1 root  root  192890245 Jun 30 15:56 nexus-3.31.1-01-unix.tar.gz
drwxr-xr-x  3 nexus nexus      4096 Jun 30 15:59 sonatype-work/

root@Nexus:/apps/nexus# ss -ntl
State                 Recv-Q                 Send-Q                                  Local Address:Port                                   Peer Address:Port                 
LISTEN                0                      50                                            0.0.0.0:8081          # 监听8081端口                              0.0.0.0:*                    
LISTEN                0                      128                                     127.0.0.53%lo:53                                          0.0.0.0:*                    
LISTEN                0                      128                                           0.0.0.0:22                                          0.0.0.0:*                    
LISTEN                0                      1                                           127.0.0.1:44679                                       0.0.0.0:*                    
LISTEN                0                      128                                              [::]:22                                             [::]:*   
oot@Nexus:/apps/nexus# lsof -i:8081
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    13729 nexus  905u  IPv4  55904      0t0  TCP *:tproxy (LISTEN)

2.5 web界面登陆

  • 第一次登陆后, 需要初始化Nexus, 并且通过本地文件获取密码
图片.png
  • 密码会保存在服务器本地, 因此, 需要管理员能连接到服务器获取密码
图片.png
root@Nexus:/apps/nexus# cat /apps/sonatype-work/nexus3/admin.password
1b2753ec-1751-4749-b696-e1df2cc77b1e
图片.png
图片.png
图片.png
图片.png
  • 允许匿名访问, 这样编译服务器在访问Nexus时就不需要提供用户和密码, 直接就可以拉去依赖包
图片.png

2.6 验证默认仓库

图片.png

Hosted:本地仓库,通常我们会部署自己的构建到这一类型的仓库,比如公司的第三方库. 是公司自己制作的包, 比如自己制作的rpm, 这些不需要依赖互联网上的包

Proxy:代理仓库,它们被用来代理远程的公共仓库,如 maven 中央仓库(官方
仓库)。 这些仓库会存储一部分依赖包, 如果本地没有, 会去官方仓库下载

Group:仓库组,用来合并多个 hosted/proxy 仓库,当你的项目希望在多个repository 使用资源时就不需要多次引用了,只需要引用一个 group 即可。

3. 使用Nexus构建私有yum仓库

3.1 Nexus仓库配置

配置 nexus 作为公司内网 yum 仓库,通过清华大学镜像安装包, 为企业内部服务器提供Zabbix的rpm包下载

图片.png
图片.png
图片.png
图片.png
图片.png
  • 初次访问仓库是没有资源的, 因为还没有镜像下来
图片.png

3.2 配置本地服务器使用Zabbix仓库

环境: 10.0.0.237 CentOS-7

默认情况CentOS官网没有提供zabbix-server

[17:43:11 root@CentOS-7-1 ~]#yum -y install zabbix-server
Loaded plugins: fastestmirror
Determining fastest mirrors
 * BaseOS: mirrors.163.com
BaseOS                                                                                                                                                                                                        | 3.6 kB  00:00:00     
epel                                                                                                                                                                                                          | 4.7 kB  00:00:00     
extras                                                                                                                                                                                                        | 2.9 kB  00:00:00     
(1/5): epel/group_gz                                                                                                                                                                                          |  96 kB  00:00:00     
(2/5): BaseOS/primary_db                                                                                                                                                                                      | 6.1 MB  00:00:00     
(3/5): epel/updateinfo                                                                                                                                                                                        | 1.0 MB  00:00:00     
(4/5): extras/primary_db                                                                                                                                                                                      | 242 kB  00:00:00     
(5/5): epel/primary_db                                                                                                                                                                                        | 6.9 MB  00:00:04     
No package zabbix-server available.
Error: Nothing to do
  • 添加repo文件
[17:43:23 root@CentOS-7-1 ~]#vim /etc/yum.repos.d/zabbix.repo

[Zabbix]
name=zabbix-repo-proxy
baseurl=http://10.0.0.139:8081/repository/zabbix-repo-proxy/ 
enabled=1
gpgcheck=0      
  • 再次安装, 此时CentOS会去Nexus下载Zabbix安装包, 但是Nexus本地也是没有的, 因此, 会去配置的远程仓库, 这里就是清华源的仓库去下载安装包, 缓存到本地, 并且返回给CentOS
[17:50:04 root@CentOS-7-1 ~]#yum -y install zabbix-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * BaseOS: mirrors.163.com
BaseOS                                                                                                                                                                                                        | 3.6 kB  00:00:00     
Zabbix                                                                                                                                                                                                        | 1.5 kB  00:00:00     
epel                                                                                                                                                                                                          | 4.7 kB  00:00:00     
extras                                                                                                                                                                                                        | 2.9 kB  00:00:00     
Zabbix/primary                                                                                                                                                                                                |  53 kB  00:00:00     
Zabbix                                                                                                                                                                                                                       471/471
Resolving Dependencies
--> Running transaction check
---> Package zabbix-server-mysql.x86_64 0:4.0.32-1.el7 will be installed
--> Processing Dependency: fping for package: zabbix-server-mysql-4.0.32-1.el7.x86_64
--> Processing Dependency: libnetsnmp.so.31()(64bit) for package: zabbix-server-mysql-4.0.32-1.el7.x86_64
--> Processing Dependency: libOpenIPMIposix.so.0()(64bit) for package: zabbix-server-mysql-4.0.32-1.el7.x86_64
--> Processing Dependency: libiksemel.so.3()(64bit) for package: zabbix-server-mysql-4.0.32-1.el7.x86_64
--> Processing Dependency: libOpenIPMI.so.0()(64bit) for package: zabbix-server-mysql-4.0.32-1.el7.x86_64
--> Processing Dependency: libodbc.so.2()(64bit) for package: zabbix-server-mysql-4.0.32-1.el7.x86_64
--> Running transaction check
---> Package OpenIPMI-libs.x86_64 0:2.0.27-1.el7 will be installed
--> Processing Dependency: OpenIPMI-modalias = 2.0.27-1.el7 for package: OpenIPMI-libs-2.0.27-1.el7.x86_64
---> Package fping.x86_64 0:3.10-4.el7 will be installed
---> Package net-snmp-libs.x86_64 1:5.7.2-49.el7 will be installed
---> Package unixODBC.x86_64 0:2.3.1-14.el7 will be installed
---> Package zabbix-server-mysql.x86_64 0:4.0.32-1.el7 will be installed
--> Processing Dependency: libiksemel.so.3()(64bit) for package: zabbix-server-mysql-4.0.32-1.el7.x86_64
--> Running transaction check
---> Package OpenIPMI-modalias.x86_64 0:2.0.27-1.el7 will be installed
--> Processing Dependency: OpenIPMI for package: OpenIPMI-modalias-2.0.27-1.el7.x86_64
---> Package zabbix-server-mysql.x86_64 0:4.0.32-1.el7 will be installed
--> Processing Dependency: libiksemel.so.3()(64bit) for package: zabbix-server-mysql-4.0.32-1.el7.x86_64
--> Running transaction check
---> Package OpenIPMI.x86_64 0:2.0.27-1.el7 will be installed
---> Package zabbix-server-mysql.x86_64 0:4.0.32-1.el7 will be installed
--> Processing Dependency: libiksemel.so.3()(64bit) for package: zabbix-server-mysql-4.0.32-1.el7.x86_64
--> Finished Dependency Resolution
Error: Package: zabbix-server-mysql-4.0.32-1.el7.x86_64 (Zabbix)
           Requires: libiksemel.so.3()(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

  • 下载依赖包
http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/iksemel-1.4-6.sdl7.x86_64.rpm
[18:50:32 root@CentOS-7-1 ~]#yum -y install iksemel-1.4-6.sdl7.x86_64.rpm
[18:51:10 root@CentOS-7-1 ~]#yum -y install zabbix-server

  • 检查仓库, 会发现rpm包已经被保存到本地了
图片.png
  • 数据保存位置

默认使用的是default的blob store, 因此, 会存到default/content目录下

root@Nexus:/apps/sonatype-work/nexus3/blobs/default/content#tree
图片.png

3.3 配置Nexus数据保存目录

生产环境一般都会给Nexus的数据目录挂载一个单独的存储, 这里假定把数据都放到/data目录下

  • 创建blob store
图片.png
nexus需要对数据目录有权限, 否则无法创建blob store
root@Nexus:~# chown -R nexus.nexus /data/
图片.png
存储目录也会自动创建
root@Nexus:~# ll /data
total 12
drwxr-xr-x  3 nexus nexus 4096 Jun 30 19:12 ./
drwxr-xr-x 25 root  root  4096 Jun 30 15:58 ../
drwxr-xr-x  3 nexus nexus 4096 Jun 30 19:12 zabbix-rpm/

图片.png
  • 配置zabbix仓库使用创建的存储

由于仓库创建后无法修改, 因此, 需要把之前创建的zabbix仓库删除, 重新创建, 指定使用新建的zabbix-rpm路径

图片.png
图片.png
  • 修改CentOS上的镜像地址, 因为这里我改了zabbix仓库的名字为zabbix-blob-rpm
[19:18:09 root@CentOS-7-1 ~]#vim /etc/yum.repos.d/zabbix.repo 

[Zabbix]
name=zabbix-repo-proxy
baseurl=http://10.0.0.139:8081/repository/zabbix-blob-rpm/                                                                                                                                                                           
enabled=1
gpgcheck=0

  • 再次在CentOS安装软件测试
[19:19:49 root@CentOS-7-1 ~]#yum -y install zabbix-get

图片.png
  • rpm包的存放位置
root@Nexus:/data/zabbix-rpm/content/vol-30/chap-26# cat a74c0206-4afd-4d80-a490-3368b76fcc59.properties
#2021-06-30 19:19:58,491+0800
#Wed Jun 30 19:19:58 CST 2021
@BlobStore.created-by=anonymous
size=307176
@Bucket.repo-name=zabbix-blob-rpm
creationTime=1625051998491
@BlobStore.created-by-ip=10.0.0.237
@BlobStore.content-type=application/x-rpm
@BlobStore.blob-name=zabbix-get-4.0.32-1.el7.x86_64.rpm
sha1=e3776ad6fab425eec08407cf10d541e01e692a75

4. Nexus数据备份

Nexus的数据不像业务数据不能丢失, 因为其数据都是从官方源镜像下来的, 因此, 即使丢失了, 下载此安装软件时, 重新下载一次即可

4.1 手动备份

  • 只需要把blob store的存储目录打包即可, 配置文件中可以指定数据的存储目录

4.2 使用Nexus提供的备份机制

Nexus 中普通数据信息(安装包)和元数据(properties文件)是分开存储的,普通数据是保存在 blob 中,而元数据保存在数据库中,所以在备份的时候必须同时进行备份普通数据和元数据,才能在后期恢复数据的时候保证数据的最终完整性。

blob 数据:
普通数据信息在 Nexus 中是保存在 blob 中的,所以此部分数据必须进行备份,blob 的典型配置中,此目录对应着 Nexus 的数据目录的 blobs 子目录。

元数据:
元数据在 Nexus 中是在数据库中进行保存的,为了保证数据的完整性,Nexus需要同时将数据库中的数据进行导出和备份

4.2.1 创建备份任务

图片.png
图片.png
  • 需要备份的内容
图片.png

4.2.1.1 备份数据库

图片.png
图片.png
  • 修改备份数据库的权限, nexus账号需要对该目录有权限, 否则无法执行数据写入
root@Nexus:~# chown nexus.nexus /opt/
图片.png

任务运行后, 可以查看运行结果

图片.png
root@Nexus:~# tree /opt
/opt
└── nexus-backup # 这个目录就是备份设定指定的数据库备份目录
    ├── component-2021-06-30-19-52-22-3.31.1-01.bak
    ├── config-2021-06-30-19-52-22-3.31.1-01.bak
    └── security-2021-06-30-19-52-22-3.31.1-01.bak

1 directory, 3 files

4.2.2.2 备份blob

  • 创建任务
图片.png
图片.png
  • 创建blob的备份路径
图片.png
图片.png

4.2.2.3 数据还原

如果需要还原数据, 只需要把备份文件拷贝到指定的数据目录, 重启服务即可

root@Nexus:/apps/nexus/bin# vim nexus.vmoptions
-Dkaraf.data=../sonatype-work/nexus3
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容