私服搭建
如下讲解如何基于Docker方式快速搭建Nexus3私服。
编写docker-compose.yaml
文件,内容如下:
version: '2'
services:
nexus3:
image: sonatype/nexus3:3.72.0
container_name: nexus3
restart: always
ports:
- '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-anonymous
和nx-admin
,前者只有浏览的权限,后者为管理员权限,一般情况下,还需要正对开发人员创建个角色。
点击Create Role
,添加一个Role ID
为developer
的自定义角色,并且只添加自定义仓库的使用权限,删除操作除外。
添加用户
跟权限类似,默认的用户只有两种:admin
和anonymous
,同样需要创建属于开发者的用户对象。
点击Create local user
,填入用户名,密码等必填信息之后,关联角色,并保存即可。
用户创建完成之后,就可以用新的用户登录私服,查看对应权限的内容了。
设置仓库组
仓库组既然是“组”的概念,说明它里面可以包含多个仓库。
因为maven用户可以从代理仓库和宿主仓库中下载构建至本地仓库,为了方便从代理仓库和宿主仓库下载构建,maven提供了仓库组。
仓库组可以包含多个宿主仓库和代理仓库,maven用户访问一个仓库组就可以访问该仓库下的所有仓库。
仓库组中的多个仓库是有顺序的,当maven用户从仓库组中下载构建时,会按顺序在仓库组中查找组件,查到了就返回给本地仓库,所以一般将速度快的放前面。
仓库组内部实际是没有内容的,只是起到一个请求转发的作用,将maven用户的下载请求转发给其它仓库处理。
nexus默认有仓库组maven-public
。
点击maven-public
打开如下:
仓库组对外URL:本地maven可以通过这个url从仓库组中下载构件至本地仓库。
仓库组中成员:刚刚新增的private-release
和private-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私服搭建详细教程