7. Nexus

作者: 随便写写咯 | 来源:发表于2021-06-30 21:53 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:7. Nexus

          本文链接:https://www.haomeiwen.com/subject/cxdrultx.html