Docker 部署 Nexus 搭建 Maven 私服

Docker   2025-01-12 15:19   444   1  

一、拉取镜像部署

拉取镜像

docker pull sonatype/nexus3

创建挂载文件夹,首次启动,注意 /data/nexus3 目录权限需要修改为 200:200,对应容器内部的 nexus 用户,不然会因权限不足导致启动失败;8081 为网页端口,8082 为镜像上传下载端口

mkdir -p /data/nexus3
chown -R 200:200 /data/nexus3

创建容器

docker run -d -p 8981:8081 -p 8982:8082 --name nexus \
--restart=always --privileged=true \
-e NEXUS_CONTEXT=nexus -e "INSTALL4J_ADD_VM_PARAMS=-Xms128m -Xmx512m -XX:MaxDirectMemorySize=512m -Djava.util.prefs.userRoot=/nexus-data/javaprefs" \
-v /data/nexus3:/nexus-data sonatype/nexus3:latest

INSTALL4JADDVM_PARAMS=-Xms128m -Xmx512m -XX:MaxDirectMemorySize=512m 指定 nexus 的启动内存,否则 nexus 需要 2G 以上内存才能启动。

docker logs -f nexus
docker ps -a|grep nexus

使用 docker logs -f nexus 查看日志,运行到这里 nexus 就启动成功了
image.png
image.png

查询 admin 的密码

docker exec -it nexus /bin/bash
cat /nexus-data/admin.password

e7ba325d-441c-45e3-9982-164138d56194 即为admin的密码
image.png

二、配置私服

1、登录 nexus

浏览器访问

http://192.168.100.129:8981/

第一次登录会要求修改密码
image.png
是否允许用户匿名访问
image.png

2、添加阿里中央仓库的代理

image.png
image.png
将私服配置里中央仓库的代理仓库路径更新为阿里云仓库提供的代理地址:http://maven.aliyun.com/repository/central  这样一来可以更快速地访问在中央仓库上所需要的依赖和插件。
image.png
其他保持默认,然后创建代理仓库。

3、添加一个自己上传 jar 的 release 仓库

image.png
image.png
image.png
其他保持默认,然后创建仓库。

4、添加一个自己上传 jar 的 snapshot 仓库

image.png
image.png
image.png
其他保持默认,然后创建仓库。

5、添加一个公共仓库

image.png
image.png
image.png
image.png
其他保持默认,然后创建仓库。

6、添加角色

image.png
添加一个 Role ID 为 developer 的自定义角色, 并且只添加自定义仓库的使用权限,删除操作除外。
image.png
image.png

7、添加用户

image.png
这里我们创建一个 developer 的用户。
image.png

三、使用私服

1、配置本地 Maven 配置文件 setting.xml

有了私服和用于开发的账号,我们就需要在本地 Maven 配置文件 setting.xml 进行关联。
设置 server 账户信息:
image.png
设置私服仓库地址:(这里的地址,可以通过 Nexus 后台上仓库页面的 cpoy 按钮自动复制得到)
image.png
配置本地仓库地址
image.png
配置私库,这里我们只填一个公共仓库就可以了,因为前面配置 public 的时候我们把 release、snapshot 和阿里的仓库都加到公共仓库里面了。
image.png
激活配置
image.png

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>E:\Maven_Local_Repository</localRepository>
  <pluginGroups>

  </pluginGroups>

  <proxies>

  </proxies>

  <servers>

    <server>
      <id>wxhntmy-central</id>                <!-- 要访问的仓库的ID -->
      <username>developer</username>        <!-- 要访问的仓库的用户名 -->
      <password>developer</password>        <!-- 要访问的仓库的用户密码 -->
    </server>
    <server>
      <id>wxhntmy-snapshot</id>
      <username>developer</username>
      <password>developer</password>
    </server>
    <server>
      <id>wxhntmy-release</id>
      <username>developer</username>
      <password>developer</password>
    </server>
    <server>
      <id>wxhntmy-public</id>
      <username>developer</username>
      <password>developer</password>
    </server>
  </servers>

  <mirrors>

  </mirrors>

  <profiles>
    <!-- 全局JDK1.8配置 -->
    <profile>
        <id>jdk-1.8</id>
        <activation>
            <jdk>1.8</jdk>
        </activation>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.test.skip>true</maven.test.skip> 
            <maven.javadoc.skip>true</maven.javadoc.skip>   
        </properties>
    </profile>

    <!-- Nexus私服配置 -->
    <profile>
        <id>my-nexus</id>
        <repositories>
            <repository>
                <id>wxhntmy-public</id>
                <url>http://192.168.100.129:8981/repository/wxhnym-public/</url>
            </repository>
        </repositories>
    </profile>
  </profiles>

  <!-- 激活配置 -->
  <!-- 测试结果: 影响下载顺序的是profiles标签的配置顺序(后面配置的my-nexus仓库先下载), 而不是activeProfiles的顺序 -->
    <activeProfiles>
        <activeProfile>jdk-1.8</activeProfile>
        <activeProfile>my-nexus</activeProfile>
    </activeProfiles>
</settings>

2、验证下载依赖

默认激活的配置
image.png
点击下载所有依赖
image.png
image.png
可以看到项目依赖已经缓存到 maven 私服了。
image.png

3、把项目打包成 jar 包然后发布到私服

配置私服仓库

      <distributionManagement>
        <!-- 发布版本仓库 -->
        <repository>
            <!-- 这里的id要和maven的settings.xml配置的server的id一样 -->
            <id>wxhntmy-release</id>
            <url>http://192.168.100.129:8981/repository/wxhntmy-release/</url>
        </repository>
        <!-- 快照版本仓库 -->
        <snapshotRepository>
          <!-- 这里的id要和maven的settings.xml配置的server的id一样 -->
            <id>wxhntmy-snapshot</id>
            <url>http://192.168.100.129:8981/repository/wxhntmy-snapshot/</url>
        </snapshotRepository>
    </distributionManagement>

image.png
解释下这2个版本仓库:
image.png
如果pom文件中的version标签中是RELEASES则会发布到稳定版本仓库,如果为SNAPSHOT则发布到快照版本仓库中。
image.png
查看上传的jar,我们刚才上传的是 snapshot 版本。
image.png
jar已经上传成功
image.png
还有jar的用法
image.png


博客评论
dj
说:

good job

1
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。