Sonatype Nexus 部署手册

news2024/11/7 7:35:05

文章目录

    • 一、前言
    • 二、软件环境
      • 2.1 版本变更:
        • 2.1.1 变更存储的原因
        • 2.2.2 H2作为存储的注意点
    • 三、资源配置
    • 四、开始部署
      • 4.1 部署jdk17
      • 4.2 离线部署nexus
        • 4.2.1 下载
        • 4.2.2 部署
          • 1. 上传到服务器
          • 2. 解压
          • 3. 添加用户
          • 4. 修改启动参数
          • 5. 迁移sonatype-work ,并授权
          • 6. 创建软链接
          • 7. 创建nexus.service
    • 五、登录
      • 5.1 获取初始化密码:
      • 5.2 禁用匿名访问
      • 5.3 Nexus was not configured with an encryption key and is using the Default key
        • 5.3.1 创建 JSON 密钥文件
        • 5.3.2 启用重新加密
        • 5.3.3 通过 API 创建重新加密任务
        • 5.3.4 重启nexus
    • 六、快速部署脚本
      • 6.1 上传安装包
      • 6.2 部署脚本deploy_nexus.sh
      • 6.3 授权脚本并运行
      • 6.4启动完成

一、前言

Nexus有诸多优点,比如集中管理版本,依赖缓存,安全访问等,用来做maven库,npm库,docker镜像库等。公司内部一般都会使用。当然也有其他优秀的产品,主要看公司开发人员的规模,访问量大小。

本篇博客以最新的nexus版本为例,演示如何部署,文章最后也提供了快速部署脚本;可供大家参考。

二、软件环境

操作系统: ubuntu24.04

nexus: 3.73.012 java17

2.1 版本变更:

在3.70.x 之前的版本是用OrientDB作为存储;

3.71.0及之后的版本是用 postgresql 或者 H2 作为存储的;

使用外部 PostgreSQL 数据库需要付费的 Pro 许可证,由于本公司内部人员规模不大,所以采用他默认的嵌入式 H2 数据库。

2.1.1 变更存储的原因

https://help.sonatype.com/en/upgrading-to-nexus-repository-3-71-0-and-beyond.html

image-20241031201555242

2.2.2 H2作为存储的注意点

https://help.sonatype.com/en/sonatype-nexus-repository-system-requirements.html

image-20241031202109080

不过也不用担心,10W个组件一般用不了;目前我们研发部几个部门公用才5W多的组件

image-20241031202256444

至于20000个请求一般来说也不会超过,而且超过只是对性能有影响。

三、资源配置

官网推荐的系统配置

image-20241031202642233

CPU: 8核

内存: 16 GB

磁盘: 300 GB

sda[系统盘] 100GB, 默认分区

sdc[数据盘] 200GB 挂载点 /data

四、开始部署

4.1 部署jdk17

参考 : 离线部署jdk8,jdk17, jdk21

4.2 离线部署nexus

4.2.1 下载

下载地址: https://download.sonatype.com/nexus/3/nexus-3.73.0-12-unix.tar.gz

image-20241031200406289

4.2.2 部署
1. 上传到服务器

image-20241031203143009

2. 解压

tar -zxf nexus-3.73.0-12-unix.tar.gz -C /opt

3. 添加用户
# 添加用户
groupadd nexus
useradd -r -g nexus -s /bin/false nexus
4. 修改启动参数

如何修改jvm参数,可参考官方文档: Nexus Repository Memory Overview

image-20241031204847744

vim /opt/nexus-3.73.0-12/bin/nexus.vmoptions

image-20241031205342807

5. 迁移sonatype-work ,并授权
mkdir /data && mv /opt/sonatype-work/ /data
chown -R nexus:nexus /data/sonatype-work
chown -R nexus:nexus /opt/nexus-3.73.0-12
6. 创建软链接

ln -s /opt/nexus-3.73.0-12/bin/nexus /etc/init.d/nexus

7. 创建nexus.service

vim /etc/systemd/system/nexus.service

[Unit]
Description=nexus service
After=network.target
  
[Service]
Type=forking
LimitNOFILE=65536
Environment="JAVA_HOME=/usr/share/jdk-17.0.12"
ExecStart=/etc/init.d/nexus start
ExecStop=/etc/init.d/nexus stop 
User=nexus
Restart=on-abort
TimeoutSec=600
  
[Install]
WantedBy=multi-user.target

注: 如果你的java环境配置在了/etc/profile中,nexus是没有权限获取到的,启动会报错; 所以在启动脚本中指定了JAVA_HOME的地址;

激活服务

systemctl daemon-reload
systemctl enable nexus.service
systemctl start nexus.service

启动大概2~3分钟

image-20241031212112250

启动成功;

五、登录

访问 http://ip:8081

image-20241031212345439

5.1 获取初始化密码:

cat /data/sonatype-work/nexus3/admin.password

登录后让你修改密码;

5.2 禁用匿名访问

image-20241031212606583

5.3 Nexus was not configured with an encryption key and is using the Default key

登录进去你会发现有告警;

image-20241031213017726

这个告警在官网中也有说明

Re-encryption in Nexus Repository

这是nexus 3.73.0+ 为了增强安全性,让修改密钥。

官网中有详细步骤;以下是处理步骤

5.3.1 创建 JSON 密钥文件
mkdir -p /usr/local/secrets && vim /usr/local/secrets/file.json

填写以下内容:

{
  "active": "nexus-private-newkey123",
  "keys": [
    {
      "id": "nexus-private-newkey123",
      "key": "JavaOpsPro"
    }
  ]
}

注: active中的值与 keys中的id要对应

5.3.2 启用重新加密

找到并打开 /data/sonatype-work/nexus3/etc/nexus.properties 文件

添加 nexus.secrets.file 属性并将其设置为指向密钥 JSON 文件的完整路径

nexus.secrets.file=/usr/local/secrets/file.json

image-20241031215755948

5.3.3 通过 API 创建重新加密任务

打开网站,F12 随便刷新一个页面,找到请求接口;找到请求头中的token

image-20241031214832560

curl -X 'PUT' \
  'http://192.168.10.4:8081/service/rest/v1/secrets/encryption/re-encrypt' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'NX-ANTI-CSRF-TOKEN: 0.6079550043331956' \
  -H 'X-Nexus-UI: true' \
  -d '{
  "secretKeyId": "nexus-private-newkey123",
  "notifyEmail": "qguo2019@163.com"
}'

image-20241031215052238

5.3.4 重启nexus
systemctl restart neuxs

这步重启也可在5.3.2 后做;官网中没说需要重启,但实践后发现必须重启;否则不生效。

重启后重新登录并验证。

image-20241101095926037

部署完成!

六、快速部署脚本

提供一个快速部署脚本,方便运维人员快速部署使用。请注意环境和版本,适当修改。

6.1 上传安装包

image-20241101084852096

6.2 部署脚本deploy_nexus.sh

#!/bin/bash

# 定义变量
NEXUS_VERSION="3.73.0-12"
JDK_VERSION="17.0.12"
NEXUS_PACKAGE="nexus-${NEXUS_VERSION}-unix.tar.gz"
JDK_PACKAGE="jdk-${JDK_VERSION}_linux-x64_bin.tar.gz"
INSTALL_DIR="/opt"
DATA_DIR="/data"
NEXUS_SERVICE_FILE="/etc/systemd/system/nexus.service"
JAVA_HOME="/usr/share/jdk-${JDK_VERSION}"

# 检查是否为root用户
if [ $EUID -ne 0 ]; then
   echo "脚本必须使用root用户执行"
   exit 1
fi

# 检查Nexus安装包是否存在
if [ ! -f "${NEXUS_PACKAGE}" ]; then
    echo "Nexus安装包 ${NEXUS_PACKAGE} 不存在,请确保已将安装包放置在当前目录。"
    exit 1
fi

# 检查JDK安装包是否存在
if [ ! -f "${JDK_PACKAGE}" ]; then
    echo "JDK安装包 ${JDK_PACKAGE} 不存在,请确保已将安装包放置在当前目录。"
    exit 1
fi

# 安装JDK
if [ ! -d "${JAVA_HOME}" ]; then
    tar -zxf "${JDK_PACKAGE}" -C /usr/share/
fi

# 部署Nexus安装包
tar -zxf "${NEXUS_PACKAGE}" -C "${INSTALL_DIR}"

# 添加用户nexus
groupadd nexus
useradd -r -g nexus -s /bin/false nexus

# 修改启动参数,按照官方推荐的配置
sed -i 's|-Xms2703m|-Xms5G|g' "${INSTALL_DIR}/nexus-${NEXUS_VERSION}/bin/nexus.vmoptions"
sed -i 's|-Xmx2703m|-Xmx5G|g' "${INSTALL_DIR}/nexus-${NEXUS_VERSION}/bin/nexus.vmoptions"
sed -i 's|../sonatype-work|/data/sonatype-work|g' "${INSTALL_DIR}/nexus-${NEXUS_VERSION}/bin/nexus.vmoptions"

# 移动sonatype-work,并授权
mkdir -p "${DATA_DIR}"
mv "${INSTALL_DIR}/sonatype-work/" "${DATA_DIR}"
chown -R nexus:nexus "${DATA_DIR}/sonatype-work"
chown -R nexus:nexus "${INSTALL_DIR}/nexus-${NEXUS_VERSION}"

# 创建软链接
ln -s "${INSTALL_DIR}/nexus-${NEXUS_VERSION}/bin/nexus" /etc/init.d/nexus

# 创建nexus.service,明确指定JAVA_HOME路径
cat <<EOF > "${NEXUS_SERVICE_FILE}"
[Unit]
Description=nexus service
After=network.target

[Service]
Type=forking
LimitNOFILE=65536
Environment="JAVA_HOME=${JAVA_HOME}"
ExecStart=/etc/init.d/nexus start
ExecStop=/etc/init.d/nexus stop
User=nexus
Restart=on-abort
TimeoutSec=600

[Install]
WantedBy=multi-user.target
EOF

# 激活服务
systemctl daemon-reload
systemctl enable nexus.service
systemctl start nexus.service

echo "Nexus部署完成!"

6.3 授权脚本并运行

chmod +x deploy_nexus.sh
./deploy_nexus.sh

image-20241101092946713

6.4启动完成

image-20241101093140800

image-20241101093346173

后续:nexus的配置和使用请参考另一篇博客
Nexus配置手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2229721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

servlet开发

一、Servelet &#xff08;一&#xff09;Servelet概述 1.概念&#xff1a;Severlet是一门动态web资源开发技术。 2.本质&#xff1a;Severlet本质是一段Java程序&#xff0c;但和Java程序不同的是&#xff0c;Severlet程序无法独立运行&#xff0c;需要放服务器中&#xff…

opencv - py_imgproc - py_houghlines and py_houghcircles 霍夫线和圆变换

文章目录 1.霍夫线变换目标理论 OpenCV 中的霍夫变换概率霍夫变换其他资源 2.霍夫圆变换目标理论 1.霍夫线变换 目标 在本章中&#xff0c; 我们将了解霍夫变换的概念。我们将了解如何使用它来检测图像中的线条。我们将看到以下函数&#xff1a;cv.HoughLines()、cv.HoughLi…

数据结构 ——— 用堆解决TOP-K问题

目录 何为TOP-K问题 用堆解决TOP-K问题 代码实现 何为TOP-K问题 比如&#xff1a;整个专业的前10名&#xff0c;世界500强&#xff0c;富豪榜&#xff0c;游戏中前100的活跃玩家等 对于 TOP-K 问题&#xff0c;能想到的最简单直接的方式就是排序 但是&#xff0c;如果数据…

开发之翼:划时代的原生鸿蒙应用市场开发者服务

前言 随着"纯血鸿蒙" HarmonyOS NEXT在原生鸿蒙之夜的正式发布&#xff0c;鸿蒙生态正以前所未有的速度蓬勃发展。据知已有超过15000个鸿蒙原生应用和元服务上架&#xff0c;覆盖18个行业&#xff0c;通用办公应用覆盖全国3800万多家企业。原生鸿蒙操作系统降低了接…

WAF+AI结合,雷池社区版的强大防守能力

网上攻击无处不不在&#xff0c;为了保护我自己的网站&#xff0c;搜索安装了一个开源免费的WAF 刚安装完成就收到了海外的攻击&#xff0c;看到是海外的自动化攻击工具做的 雷池刚好也有AI分析&#xff0c;于是就尝试使用这个功能&#xff0c;看看这个ai能力到底怎么样 以下…

Elasticsearch —— ES 环境搭建、概念、基本操作、文档操作、SpringBoot继承ES

文章中会用到的文件&#xff0c;如果官网下不了可以在这下 链接: https://pan.baidu.com/s/1SeRdqLo0E0CmaVJdoZs_nQ?pwdxr76 提取码: xr76 一、 ES 环境搭建 注&#xff1a;环境搭建过程中的命令窗口不能关闭&#xff0c;关闭了服务就会关闭&#xff08;除了修改设置后重启的…

CSP2024 游记

又是一年 CSP。。。 10 月 5 日&#xff0c;终于过 S 初赛了。。。 然后开始漫长的备战。。 在考试开始前 1 day&#xff0c;我还在兢兢业业地学习图论。然后发现没有考。。。 10 月 25 日下午 15:30&#xff0c;来到 CQBS 试机。我想&#xff0c;怎么测试性能呢&#xff1…

opencv - py_imgproc - py_grabcut GrabCut 算法提取前景

文章目录 使用 GrabCut 算法进行交互式前景提取目标理论演示 使用 GrabCut 算法进行交互式前景提取 目标 在本章中 我们将了解 GrabCut 算法如何提取图像中的前景我们将为此创建一个交互式应用程序。 理论 GrabCut 算法由英国剑桥微软研究院的 Carsten Rother、Vladimir K…

视频制作软件新手必备:8款剪辑工具剪辑思路分享!

随着视频的高度发展&#xff0c;视频已成为一种重要的工具&#xff0c;用以学习娱乐、记录生活点滴以及传递各类信息。不论是制作个人MV、进行企业宣传&#xff0c;还是创作短视频内容&#xff0c;拥有一款功能恰当的视频剪辑软件都显得至关重要。对于初学者而言&#xff0c;选…

无人机避障——路径规划篇(一) JPS跳点搜索算法A*算法对比

JSP 跳点搜索算法与改进 A*算法对比 一、算法概述: 跳点搜索(Jump Point Search,JPS)算法:一种用于路径规划的启发式搜索算法。它主要用于在网格地图(如游戏地图、机器人运动规划地图等)中快速找到从起点到终点的最短路径。该算法在改进 A*算法的基础上进行了优化,通过跳过一…

解决Linux安装Anaconda后出现的conda: command not found问题

参考链接&#xff1a;解决Linux安装Anaconda后出现的conda: command not found问题-百度开发者中心

AI直播带货场景切换模块的搭建!

AI直播带货&#xff0c;作为电商领域的新宠&#xff0c;正以其独特的魅力和高效的营销手段&#xff0c;引领着销售模式的新变革。 在AI直播带货中&#xff0c;场景切换模块是不可或缺的一部分&#xff0c;它不仅能够提升观众的观看体验&#xff0c;还能更好地展示商品&#xf…

15 Docker容器存储架构:docker存储驱动简介

文章目录 一、Docker 存储驱动探索1.1 存储驱动1.2 存储驱动方式1.3 非持久化存储1.4 持久化存储一、Docker 存储驱动探索 1.1 存储驱动 Storage driver处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户提供了多层数据合并后的统一视图。 [superman@docker ~]$…

Aicbo:一键生成高质量画作,适合初学者的AI绘画助手

越来越多的智能工具开始进入人们的视野&#xff0c;它们不仅简化了创作流程&#xff0c;还极大地提高了作品的质量。在这一背景下&#xff0c;Aicbo作为一款新兴的AI绘画工具&#xff0c;以其独特的优势和免费试用的政策&#xff0c;迅速获得了广泛的关注和好评。本文将从多个角…

STM32 从0开始系统学习5

目录 STM32 GPIO输入的四种模式 Practice And Usage 练习与封装 Detailed And Reference 更加具体的说明 输入浮空模式 输入上拉模式 输入下拉模式 模拟功能 我们下面聊一聊输入的事情&#xff0c;输入指的是我们的处理器从外部端口接受外设发过来的信号。在我们没有接…

使用Git进行版本控制的最佳实践

文章目录 Git简介基本概念仓库&#xff08;Repository&#xff09;提交&#xff08;Commit&#xff09;分支&#xff08;Branching&#xff09; 常用命令初始化仓库添加文件提交修改查看状态克隆仓库分支操作合并分支推送更改 最佳实践使用有意义的提交信息定期推送至远程仓库使…

冒泡排序和二分查找--go

冒泡排序的逻辑 二分查找的逻辑 func bubbleSort(arr *[5]int){//冒泡排序fmt.Println(*arr)temp : 0for j : len(*arr); j > 0; j-- {for i : 0; i < j-1; i {temp (*arr)[i]if((*arr)[i] > (*arr)[i1]){(*arr)[i] (*arr)[i1](*arr)[i1] temp}}} }func binaryF…

flutter区别于vue的写法

View.dart 页面渲染&#xff1a; 类似于vue里面使用 <template> <div> <span> <textarea>等标签绘制页面, flutter 里面则是使用不同的控件来绘制页面 样式 与传统vue不同的是 flutter里面没有css/scss样式表&#xff0c; Flutter的理念是万物皆…

电影《焚城》全国上映 王丹妮诠释新时代女性力量

今日&#xff0c;电影《焚城》全国上映&#xff0c;该片由刘德华、白宇、莫文蔚和王丹妮主演&#xff0c;以一场由高强度放射性物质铯137泄漏引发的城市灾难为背景&#xff0c;深刻描绘了人们在生死存亡关头的抉择与抗争。 王丹妮在片中饰演飒爽独立、智慧勇敢的消防队长Madam …

uniapp:启动界面关闭时长控制

代码控制关闭启动界面 App启动后不会自动关闭启动界面&#xff0c;需要在代码中调用plus.navigator.closeSplashscreen关闭启动界面。"app-plus" : {"splashscreen" : {"alwaysShowBeforeRender" : false,"autoclose" : false,}, }很多…