• 研发提效必备技能:手把手教你基于Docker搭建Maven私服仓库


    沉淀,成长,突破,帮助他人,成就自我。

    大家好,我是冰河~~

    在研发的过程中,很多企业都会针对自身业务特点来定制研发一些工具类库,但是这些工具类库又不会对外公开,那如何在组织内部共享这些类库呢?一种很好的方式就是在公司内部搭建一套Maven私服仓库。

    一、背景知识

    搭建Maven私服仓库可以提高项目构建和部署的效率、稳定性和安全性,同时方便管理内部开发的组件和私有库,比较适用于企业内部或者特定场景下的需求。

    就拿我们星球的分布式IM即时通讯系统来说,对于后端服务,我们将其划分成了 多系统共用模型与工具、即时通讯后端服务、大后端平台、即时通讯SDK、OpenAI大模型接入服务 等。

    其中,多系统共用模型与工具会被其他服务依赖,即时通讯SDK和OpenAI大模型接入服务也会被其他服务依赖,并且多系统共用模型与工具、即时通讯SDK和OpenAI大模型接入服务都是我们开发分布式IM即时通讯系统时的私有库和组件,所以,在设计和研发分布式IM即时通讯系统的过程中,我们也需要搭建一套自己的Maven私服来统一管理这些私有库和组件。

    好了,那接下来,我们就一起搭建Maven私服仓库吧。

    二、环境说明

    • 服务器版本:CentOS7
    • 主机名:binghe102
    • IP地址:192.168.106.102
    • Maven私服镜像:sonatype/nexus3

    三、环境搭建

    基于Docker搭建Maven私服的步骤如下所示。

    3.1下载Nexus3镜像

    在服务器命令行输入如下命令,下载Nexus3镜像。

    docker pull sonatype/nexus3
    

    这里,视网络情况,可能需要耐心等待一会儿。

    3.2 查看Nexus3镜像

    在服务器命令行输入如下命令,查看下载的Nexus3镜像。

    [root@binghe102 ~]# docker images
    REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
    sonatype/nexus3   latest    589f7296a4a2   23 months ago   655MB
    

    可以看到,已经成功下载Nexus3镜像。

    3.3 创建Nexus3挂载文件夹

    在服务器命令行输入如下命令,创建nexus的挂载文件夹。

    mkdir /usr/local/nexus-data && chown -R 200 /usr/local/nexus-data
    

    3.4 启动Nexus3容器

    在服务器命令行输入如下命令,启动Nexus3容器。

    docker run -d -p 8081:8081 --name nexus -v /usr/local/nexus-data:/nexus-data --restart=always sonatype/nexus3
    

    可以看到,在上述启动命令中,我们将Nexus3容器的/nexus-data目录映射到了宿主机的/usr/local/nexus-data目录。此时,Nexus3容器运行过程中,在/nexus-data目录产生的文件和日志都会在宿主机的/usr/local/nexus-data目录中查看到。

    3.5 查看Nexus3容器启动状态

    在服务器命令行输入如下命令,查看Nexus3容器启动状态。

    [root@binghe102 ~]# docker ps
    CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                                       NAMES
    59e27830bbaa   sonatype/nexus3   "sh -c ${SONATYPE_DI…"   2 minutes ago   Up 2 minutes   0.0.0.0:8081->8081/tcp, :::8081->8081/tcp   nexus
    

    可以看到,Nexus3容器启动成功,监听了8081端口。

    四、Nexus3配置

    搭建完Nexus3环境后,我们还需要对其进行配置,具体配置的步骤如下所示。

    4.1 打开Nexus3页面

    Nexus3容器启动时监听的端口和宿主机端口都是8081,所以,我们在浏览器地址栏输入http://192.168.106.102:8081打开Nexus3页面,如图1所示。

    4.2 登录Nexus3

    点击Nexus3右上角的登录,如图2所示。

    点击后会弹出如图3所示的提示框。

    根据提示得知,初始密码的存放位置为/nexus-data/admin.password,因为我们在启动Nexus3容器时,将Nexus3容器的/nexus-data目录映射到了宿主机的/usr/local/nexus-data目录,所以,我们在宿主机的/usr/local/nexus-data目录中也能够查询到admin.password文件。

    所以,在宿主机中输入如下命令即可查看到admin.password文件。

    ll /usr/local/nexus-data
    

    具体如图4所示。

    输入如下命令查看admin.password文件的内容。

    [root@binghe102 ~]# cat /usr/local/nexus-data/admin.password 
    517842df-1a2d-49c9-b4c3-b9ad4cf0fe00
    

    此时,我们就查看到登录Nexus3的admin账号的密码为517842df-1a2d-49c9-b4c3-b9ad4cf0fe00,将admin账号和对应的密码输入到图3所示的提示框中,即可登录Nexus3,如图5所示。

    登录后的界面如图6所示。

    可以看到,首次登录后会自动弹出完成必要设置的提示框,点击Next按钮,设置新密码,如图7所示。

    这里,自行记录新设置的密码,用于后续登录Nexus。

    点击Next按钮,选择nable anonymous access,如图8所示。

    点击Next按钮,如图9所示。

    点击Finish按钮,即可完成设置。

    4.3 配置阿里云代理仓库

    Nexus默认使用的远程仓库为maven-central,从这个远程仓库下载依赖很慢,经常连不上,如图10所示。

    鼠标单机maven-central仓库,查看maven-central仓库配置的远程链接,如图11所示。

    可以看到,maven-central仓库配置的远程链接为https://repo1.maven.org/maven2/,从这个远程仓库下载依赖很慢,经常连不上,所有我们需要配置阿里云远程代理仓库。

    回到图10所示的页面,点击Create repository按钮,如图12所示。

    点击后进入选择仓库类型的页面,这里我们选择maven2(proxy)类型,如图13所示。

    点击选则maven2(proxy)类型后,进入配置远程代理仓库的页面,如图14所示。

    其中,每个配置项如下所示。

    接下来,拖动3-14页面右侧的滚动条,滑到最下面,点击Create repository按钮,如图15所示。

    点击Create repository按钮后,就可以在Repositories列表中看到新配置的阿里云代理仓库了,如图16所示。

    并且Status显示的是Online - Ready to connect,说明阿里云远程仓库配置成功。

    4.4 配置仓库组

    接下来,需要将aliyun-central配置到仓库组,并且将aliyun-central排在maven-central上面。具体步骤如下所示。

    在Repositories列表中,点击maven-public,如图17所示。

    点击后进入如图18所示的页面。

    下拉页面右侧的滚动条,找到如图19所示的配置。

    将aliyun-central移动到右侧,并排在最上面,如图20所示。

    点击Save按钮保存配置。

    4.5 创建用户

    接下来,创建一个用于上传Jar包到仓库的用户,具体步骤如下所示。

    点击Security菜单下的Users菜单,如图21所示。

    点击Users菜单后,点击Create local user按钮,如图22所示。

    随后,按照图23所示设置用户的基本信息。

    这里,自行记录用户的密码,用于后续上传jar文件使用,配置好之后,点击底部的Create local user按钮即可。点击后在Security菜单下的Users菜单的用户列表中,可以查看到新创建的本地用户,如图24所示。

    至此,Nexus3配置完毕。

    五、配置本地Maven仓库

    配置完Nexus后,接下来,还需要对本地的Maven仓库进行配置,主要就是对Maven的的settings.xml文件进行配置。

    5.1 复制settings文件

    复制setting.xml文件为setting-binghe.xml文件,如图25所示。

    5.2 配置servers节点

    在settings-binghe.xml文件中,找到servers节点,在servers节点中,配置5.5节创建的用户,如下所示。

    <server>
        <id>bingheid>
        <username>bingheusername>
        <password>binghe123password>
    server>
    

    5.3 配置mirrors节点

    在settings-binghe.xml文件中,找到mirrors节点,在mirrors节点中,配置仓库地址,如下所示。

    
    <mirror>
        <id>centralid>
        <name>Local Repositoryname>
        <url>http://192.168.106.102:8081/repository/maven-publicurl>
        <mirrorOf>*mirrorOf>
    mirror>
    
    <mirror>
        <id>nexus-aliyunid>
        <mirrorOf>*mirrorOf>
        <name>Nexus aliyunname>
        <url>http://maven.aliyun.com/nexus/content/groups/publicurl>
    mirror>
    

    5.4 配置profiles节点

    在settings-binghe.xml文件中,找到profiles节点,在profiles节点中,配置仓库信息,如下所示。

    <profile>
        <id>maven-publicid>
        <activation>
            <activeByDefault>trueactiveByDefault>
            <jdk>1.8jdk>
        activation>
        <properties>
            <maven.compiler.source>1.8maven.compiler.source>
            <maven.compiler.target>1.8maven.compiler.target>
            <maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
        properties>
        <repositories>
            <repository>
                <id>nexus-publicid>
                <url>http://192.168.106.102:8081/repository/maven-public/url>
                <releases>
                    <enabled>trueenabled>
                    <updatePolicy>alwaysupdatePolicy>
                releases>
                <snapshots>
                    <enabled>trueenabled>
                    <updatePolicy>alwaysupdatePolicy>
                snapshots>
            repository>
        repositories>
    profile>
    

    至此,Maven私服仓库搭建完毕,并且本地Maven也已经配置完毕。

    后续使用Maven构建项目时,指定使用binghe-settings.xml文件即可将依赖的Jar文件和生成的Jar文件上传到Maven私服仓库,如果使用IDEA编译项目,也需要在IDEA中,将Maven的配置文件指定为settings-binghe.xml。

    注意:我已经将settings-binghe.xml文件上传到本节对应源码分支的environment/maven目录下,大家自行获取即可。

    六、项目pom.xml配置

    搭建完Maven私服仓库,配置好本地Maven仓库后,还需要在项目的pom.xml文件中进行相应的配置,具体如下所示。

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.8.1version>
                <configuration>
                    <source>${java.version}source>
                    <target>${java.version}target>
                    <encoding>${project.build.sourceEncoding}encoding>
                configuration>
            plugin>
            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-deploy-pluginartifactId>
                <version>2.8.2version>
            plugin>
            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-source-pluginartifactId>
                <version>3.0.0version>
                <executions>
                    <execution>
                        <phase>installphase>
                        <goals>
                            <goal>jar-no-forkgoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>
    
    <distributionManagement>
        <repository>
            
            
            <id>bingheid>
            <url>http://192.168.106.102:8081/repository/maven-releases/url>
        repository>
        <snapshotRepository>
            
            
            <id>bingheid>
            <url>http://192.168.106.102:8081/repository/maven-snapshots/url>
        snapshotRepository>
    distributionManagement>
    
    

    是不是很简单?你照着文章一步步实操,就可以基于Docker搭建属于自己的Maven私服仓库了。

    七、写在最后

    这些真实场景的项目设计与落地实现,在冰河的知识星球除了分布式IM即时通讯系统外,还有其他5个项目,这些项目的需求、方案、架构、落地等均来自互联网真实业务场景,让你真正学到互联网大厂的业务与技术落地方案,并将其有效转化为自己的知识储备

    好了,今天就到这儿吧,我是冰河,我们下期见~~

  • 相关阅读:
    基于CNN-RNN的医疗文本生成
    JUL 日志
    身份证实名认证接口的三种方式、C#实名认证接口
    Oracle:常用函数CASE WHEN,DECODE,NVL,SUBSTR,listagg,instr,to_char,to_number
    Image (mathematics)
    后缀式求值
    一文详细讲解JAVA开发中的XML
    大数据与人工智能的交融:向量数据库在具体应用案例中的探索
    01PCB设计概述
    想考【软考高级】,但不具备计算机基础?“系规”适合你
  • 原文地址:https://www.cnblogs.com/binghe001/p/17918307.html