Docker方式搭建Maven私服

news/2024/9/22 19:40:07

私服搭建

如下讲解如何基于Docker方式快速搭建Nexus3私服。

编写docker-compose.yaml文件,内容如下:

version: '2'services:nexus3:image: sonatype/nexus3:3.72.0container_name: nexus3restart: alwaysports:- '8081:8081' volumes:- '/data/opt/nexus3/data:/nexus-data'

为了避免因为目录访问权限问题导致Docker容器启动失败,需要修改宿主机的/data/opt/nexus3/data目录权限(可以授予所有权限,如:chmod -R 777 /data/opt/nexus3/data)。

执行docker-compose up启动容器,在浏览器中访问http://宿主机IP:8081地址,点击页面右上角的【Sign In】按钮, 就会出现下图登录弹窗:

Nexus默认登录账号为admin, 并且密码位于文件/nexus-data/admin.password下, 只需在本地配置的挂载目录/data/opt/nexus3/data下查看该文件即可。

$ ls -al /data/opt/nexus3/data/
total 80
drwxrwxrwx  14 root root  4096 Sep 13 09:36 .
drwxr-xr-x   3 root root  4096 Sep 13 09:34 ..
-rw-r--r--   1  200  200    36 Sep 13 09:36 admin.password  # 这就是nuxus的默认密码文件
drwxr-xr-x   3  200  200  4096 Sep 12 21:44 blobs
drwxr-xr-x 347  200  200 12288 Sep 13 09:35 cache
drwxr-xr-x   2  200  200  4096 Sep 12 21:43 db
drwxr-xr-x   3  200  200  4096 Sep 12 21:44 elasticsearch
drwxr-xr-x   3  200  200  4096 Sep 12 21:43 etc
drwxr-xr-x   2  200  200  4096 Sep 12 21:43 generated-bundles
drwxr-xr-x   2  200  200  4096 Sep 12 21:43 instances
drwxr-xr-x   3  200  200  4096 Sep 12 21:43 javaprefs
-rw-r--r--   1  200  200     1 Sep 13 09:35 karaf.pid
drwxr-xr-x   3  200  200  4096 Sep 12 21:44 keystores
-rw-r--r--   1  200  200    14 Sep 13 09:35 lock
drwxr-xr-x   5  200  200  4096 Sep 22 15:39 log
-rw-r--r--   1  200  200     5 Sep 13 09:35 port
drwxr-xr-x   2  200  200  4096 Sep 12 21:43 restore-from-backup
drwxr-xr-x   8  200  200  4096 Sep 13 09:36 tmp

输入默认的账号密码成功登录之后,Nexus就会强制要求修改admin用户的密码, 并且设置基本访问权限,完成之后就正式进入了Nexus私服后台管理页面。

进入Nexus私服的配置界面,需要对默认配置进行几点调整。

修改私服中央仓库的代理仓库

修改私服中央仓库的代理仓库地址是为了加速访问。

将私服配置里中央仓库的代理仓库路径修改为阿里云仓库提供的代理地址:http://maven.aliyun.com/repository/central

创建hosted类型的仓库

创建hosted类型仓库(宿主仓库)是为了在私服中部署自定义组件。

点击Create repository:

然后选择类型为maven2(hosted)

然后输入仓库名称,并在Version policy一栏中选择Release,表示这个仓库的存储依赖为正式发布的组件,然后在Deployment policy一栏中选择Allow redeploy,表示允许部署和更新私服上的组件。

最后点击Create repository,就可以在仓库列表看到自定义的仓库了。
有了release仓库,再按照同样方式操作添加一个snapshot仓库,只需在Version policy一栏调整为Snapshot即可。

添加角色

Nexus默认只有两种角色:nx-anonymousnx-admin,前者只有浏览的权限,后者为管理员权限,一般情况下,还需要正对开发人员创建个角色。
点击Create Role,添加一个Role IDdeveloper的自定义角色,并且只添加自定义仓库的使用权限,删除操作除外。

添加用户

跟权限类似,默认的用户只有两种:adminanonymous,同样需要创建属于开发者的用户对象。
点击Create local user,填入用户名,密码等必填信息之后,关联角色,并保存即可。

用户创建完成之后,就可以用新的用户登录私服,查看对应权限的内容了。

设置仓库组

仓库组既然是“组”的概念,说明它里面可以包含多个仓库。

因为maven用户可以从代理仓库和宿主仓库中下载构建至本地仓库,为了方便从代理仓库和宿主仓库下载构建,maven提供了仓库组。

仓库组可以包含多个宿主仓库和代理仓库,maven用户访问一个仓库组就可以访问该仓库下的所有仓库。

仓库组中的多个仓库是有顺序的,当maven用户从仓库组中下载构建时,会按顺序在仓库组中查找组件,查到了就返回给本地仓库,所以一般将速度快的放前面。

仓库组内部实际是没有内容的,只是起到一个请求转发的作用,将maven用户的下载请求转发给其它仓库处理。

nexus默认有仓库组maven-public

点击maven-public打开如下:

仓库组对外URL:本地maven可以通过这个url从仓库组中下载构件至本地仓库。

仓库组中成员:刚刚新增的private-releaseprivate-snapshot在左边,需要将它们添加到到右边的成员列表中,并且放在最开始的位置,因为前面说过仓库组的查找是有顺序的,将宿主仓库放在最前面,这样查依赖时会最先从宿主仓库中查找,找不到时再从其他仓库查找,这样就能解决从私服下载内部构建组件的问题了(如果不这样设置,就无法下载部署到宿主仓库的组件)。

使用私服下载依赖

有了私服和账号,就需要在本地Maven配置文件setting.xml进行关联配置。

设置server账户信息

servers节点中配置server,用于连接Maven私服时进行认证。

  • id可以自己命名,后面需要与项目中保持一致。
  • username可以是admin,也可以是新创建的用户,密码是新建用户时设置的密码。
<servers><!-- 下载时的认证 --><server><id>test</id><username>user_name</username><password>user_pass</password></server>
</servers>

设置私服仓库地址

以下设置都是在本地Maven的conf/settings.xml文件中进行配置。

设置下载依赖的地址,在mirrors标签下添加如下内容:

<mirrors><!-- 用搭建好的私服的地址 --><mirror><id>central</id><mirrorOf>*</mirrorOf><name>Central Repository</name><!-- 私服仓库组地址 --><url>http://192.168.13.29:8081/repository/maven-public/</url></mirror><!-- 把阿里云的注释掉 --><!-- <mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>-->
</mirrors>

发布本地项目到私服

Maven配置

首先在Maven的settings.xml中配置登录信息(因为Nexus的仓库对于匿名用户是只读的,为了能够部署构件,还需要配置认证信息)。

<servers><!-- 下载时的认证 --><server><id>test</id><username>user_name</username><password>user_pass</password></server><!-- 部署认证 --><server><id>private-release</id> <!-- id 和下面 profiles 中的配置一致--><username>user_name</username><password>user_pass</password></server><!-- 部署认证 --><server><id>private-snapshot</id> <!-- id 和下面 profiles 中的配置一致--><username>user_name</username><password>user_pass</password></server>
</servers>

profiles标签下添加如下内容:

<profiles><profile><id>dev</id><repositories><repository><id>private-release</id><url>http://192.168.13.29:8081/repository/private-release/</url></repository><repository><id>private-snapshot</id><url>http://192.168.13.29:8081/repository/private-snapshot/</url></repository></repositories></profile>
</profiles>

项目配置

在项目的pom.xml文件中进行如下配置:

<!-- 指定仓库名称 -->
<distributionManagement><repository><!--id与 maven settings.xml 中的id文件保持一致--><id>private-release</id><!--对应的私服宿主仓库地址--><url>http://192.168.13.29:8081/repository/private-release/</url></repository><snapshotRepository><!--id与 maven settings.xml 中的id文件保持一致--><id>private-snapshot</id><!--对应的私服宿主仓库地址--><url>http://192.168.13.29:8081/repository/private-snapshot/</url></snapshotRepository>
</distributionManagement><build><pluginManagement><plugins><!--发布代码Jar插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><version>2.7</version></plugin><!--发布源码插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.2.1</version><executions><execution><phase>package</phase><goals><goal>jar</goal></goals></execution></executions></plugin></plugins></pluginManagement>
</build>

然后在IDEA中打开Maven菜单,双击deploy按钮即可完成发布。

【参考】
史上最详细的 Maven 私服搭建与使用指南
maven私服搭建详细教程

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

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

相关文章

安全的路很长,致迷茫的你

最近有一些朋友找到我,跟我聊,说自己感觉很迷茫,不知所措,不知道未来该怎么办?安全该怎么做?OKR该怎么写?其实我想反问他以下几个问题: 1.漏洞研究了几个? 2.样本分析了几个? 3.这段时间看了多少安全技术类文档? 4.目前流行的恶意样本家族都有哪些? 5.目当流行的影…

我对什么都感兴趣,可我迷茫了

我收到一个同学给我的邮件问了个在我看来属于“太阳系”级的难题,比宇宙终极难题还差那么些^^他问: ----------------- 这几天一直挺困惑。说下我的问题,你有空的时候帮我解答下吧。 今天问自己个问题,找个自己的特长现在开始发展它。 基本上以后主要就靠这个特长工作。 但…

进程控制2

使用waitpid(pid, status,0);填入子进程的pid,阻塞父进程,直到子进程结束了,然后把子进程的pcb结构体的状态码读取出来。使用WIFEXITED(status)判断子进程是否正常退出,WEXITSTATUS(status)读取退出码来判断运行是否正常结束。 因为进程结束有3种情况:1.进程正常退出,并正…

redis八股

redis 八股文 基础内容 Redis面试题,56道Redis八股文(1.9万字97张手绘图),面渣逆袭必看👍 | 二哥的Java进阶之路 (javabetter.cn) Redis 常见面试题 | 小林coding (xiaolincoding.com) redis数据类型 Redis 常见面试题 | 小林coding (xiaolincoding.com) Redis 常见数据类…

[网鼎杯 2020 朱雀组]Nmap

这题考察的是nmap写一句话木马的知识 可以输入形如 <?php eval($_POST[1]);?> -oG 1.php 来写入一句话 经过测试这题过滤了php,我们就是用短标签绕过 -oG b.phtml ` 这段命令的作用是:将扫描结果保存到b.phtml中,同时这个phtml文件还包含了前面的一句话木马 目的就是…

电力煤矿液体泄漏识别系统

电力煤矿液体泄漏识别系统对电力煤矿危化品生产区域管道机械实时检测,当电力煤矿液体泄漏识别系统检测到机械管道出现液体泄漏时,系统立即抓拍存档并告警同步回传给报警信息给后台监控人员,让工作人员及时处理,电力煤矿液体泄漏识别系统实现危险区域跑冒滴漏异常自动监控抓…

河道水尺水位监测系统

河道水尺水位监测系统利用计算机视觉技术对河道湖泊水尺水位进行7*24小时全天候实时监测,当河道水尺水位监测系统监测到河道水位异常变化时,系统立即抓拍存档同步回传图片给后台监控平台,提醒后台工作人员及时处理异常情况,避免更大损失的发生。河道水尺水位监测系统适用于…

7-4DeepFM模型

DeepFM继承了Wide&Deep的主体结构,将高低特征进行融合。其主要创新点有2个。一是将Wide部分替换成了 FM结构,以更有效的捕获特征交互interaction;二是FM中的隐向量 和 Deep部分的 embedding 向量共享权重,减少模型复杂性。推荐系统和广告CTR预估主流模型的演化有两条主…