7. Nexus

时间:2021-7-4 作者:qvyue

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

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

2.6 验证默认仓库

7. Nexus
图片.png

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

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

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

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

3.1 Nexus仓库配置

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

7. Nexus
图片.png
7. Nexus
图片.png
7. Nexus
图片.png
7. Nexus
图片.png
7. Nexus
图片.png
  • 初次访问仓库是没有资源的, 因为还没有镜像下来
7. Nexus
图片.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包已经被保存到本地了
7. Nexus
图片.png
  • 数据保存位置

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

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

3.3 配置Nexus数据保存目录

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

  • 创建blob store
7. Nexus
图片.png
nexus需要对数据目录有权限, 否则无法创建blob store
root@Nexus:~# chown -R nexus.nexus /data/
7. Nexus
图片.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/

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

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

7. Nexus
图片.png
7. Nexus
图片.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

7. Nexus
图片.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 创建备份任务

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

4.2.1.1 备份数据库

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

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

7. Nexus
图片.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

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

4.2.2.3 数据还原

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

root@Nexus:/apps/nexus/bin# vim nexus.vmoptions
-Dkaraf.data=../sonatype-work/nexus3
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。