记录Nexus 3.0的搭建

Nexus搭建

一、前言

  • 总结一下搭建的Nexus 3.0 过程,和遇到的各种坑
  • 参考资料:官方帮助文档

二、搭建Nexus

2.1 环境

  • 官方系统要求,大家一定要仔细看一下这篇文档,Nexus默认配置Java虚拟机内存较大,如果部署机器配置较低,可能会启动不了, 这是一个大坑。
系统环境软件版本
CentosNexus 3.20.1-01

2.2 下载、解压 Nexus

tar xzvf nexus-3.20.0-04-unix.tar.gz -C /usr/local/

2.3 Nexus的目录结构

nexus-3.20.0-04-unix.tar.gz # 主要目录
├── nexus-3.20.0-04
  	├──bin   # nexus的启动命令,虚拟机配置文件
       etc   # nexus 配置文件,更改端口
└── sonatype-work
		├── nexus3 
			├──	 admin.password # nexus 系统默认密码
            ├──	 log # nexus 系统日志文件

2.4 安装Nexus

1577325810(1).jpg

2.4.1 创建nexus用户
  • Nexus不建议使用root用户运行软件,所以我们首先是创建nexus用户
useradd nexus
chown -R nexus:nexus /usr/local/nexus-3.20.0-04
chown -R nexus:nexus /usr/local/sonatype-work
2.4.2 修改Nexus启动文件
  • 编辑nexus文件,添加jdk路径,在文件14的行的位置(费)
vim /usr/local/nexus-3.20.0-04/bin/nexus
INSTALL4J_JAVA_HOME_OVERRIDE=/usr/local/jdk1.8.0_221 # 14行的位置添加jdk路径
# 使用sed命令直接修改
sed -i '14s/$/\/usr\/local\/jdk1.8.0_221/g' /usr/local/nexus-3.20.0-04/bin/nexus && sed -i '14s/.*INS/INS/g' /usr/local/nexus-3.20.0-04/bin/nexus
  • 编辑nexus.rc文件,修改用户为nexus
vim /usr/local/nexus-3.20.0-04/bin/nexus.rc 
run_as_user="nexus" 
2.4.3 配置Nexus系统服务
  • 官方提供了三种方式搭建系统服务,因为centos7已经使用systemctl代替service,所以我们使用systemd 模式启动
  • 创建nexus.service文件 vim /etc/systemd/system/nexus.service,写入如下内容
[Unit]
Description=nexus service
After=network.target
  
[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/usr/local/nexus-3.20.0-04/bin/nexus start
ExecStop=/usr/local/nexus-3.20.0-04/bin/nexus stop
User=nexus
Restart=on-abort
  
[Install]
WantedBy=multi-user.target
  • 重新加载服务

     systemctl daemon-reload
    
2.4.4 启动Nexus服务
systemctl enable nexus.service # 开启开机自动启用
systemctl start nexus.service
  • 打开浏览器输入http://[ip]:8081/,出现如下图所示页面表示启动成功

微信截图_20191226111055.png

  • 点击登录,提示我们到指定文件夹查询初始化密码

    微信截图_20191226111332.png

cat /usr/local/sonatype-work/nexus3/admin.password
472c8232-538f-49ca-97f4-8e008ca7bbaf
  • 登录成功,我们nexus就部署完成了

三、Nexus配置

3.1 仓库类型说明
3.1.1 Hosted Repository(托管仓库)
官方解释:A repository with the type hosted, also known as a hosted repository, is a repository that stores components in the repository manager as the authoritative location for these components.
大致含义:一个托管仓库,用于放置组件

系统默认的托管Maven仓库:

  • maven-releases 用于发布正式版本的仓库
  • maven-snapshots 用于发布快照本的仓库
3.1.2 Proxy Repository(代理仓库)
官方解释:A repository with the type proxy, also known as a proxy repository, is a repository that is linked to a remote repository. Any request for a component is verified against the local content of the proxy repository. If no local component is found, the request is forwarded to the remote repository. The component is then retrieved and stored locally in the repository manager, which acts as a cache. Subsequent requests for the same component are then fulfilled from the local storage, therefore eliminating the network bandwidth and time overhead of retrieving the component from the remote repository again.
大致含义:代理仓库,是一个可以连接远端仓库,任何对于库的请求都会被在本地仓库进行验证,如果本地仓库不不能在,会转发改请求到远端仓库,将请求回来的库放置到本地管理,仓库作为一个缓冲,避免了多次远端服务请求

系统默认的代理Maven仓库:

  • maven-central

设置远端中央仓库,这里我们可以原有的仓库改成ali的仓库地址http://maven.aliyun.com/nexus/content/groups/public或者着可以添加的新的proxy代理仓库

自定义代理Maven仓库:

  • maven-ali

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V4yWl1Jz-1578296169971)(C:\Users\warren\AppData\Roaming\Typora\typora-user-images\image-20191227142630360.png)]

3.1.3 Repository Group(仓库组)
官方解释:A repository with the type group, also known as repository group, represents a powerful feature of Nexus Repository Manager. They allow you to combine multiple repositories and other repository groups in a single repository. This in turn means that your users can rely on a single URL for their configuration needs, while the administrators can add more repositories and therefore components to the repository group.
大致含义:仓库组是Nexus仓库管理的一个特性,允许你结合不同到仓库到一个简单仓库,然后一个url来满足访问不同的仓库的需求,同样可以在里面添加库

1577427730(1).jpg

3.2 是否允许匿名访问
3.2.1 匿名访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gV9DOU8O-1578296169972)(C:\Users\warren\AppData\Roaming\Typora\typora-user-images\image-20191227145236228.png)]

3.2.2 非匿名访问
  • 项目pom.xml加入仓库配置,我们也可以在maven

    <repositories>
    		<repository>
    			<id>nexus</id>
    			<name>nexus Releases</name>
    			<url>http://10.18.0.200:8081/repository/maven-public/</url>
    		</repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>nexus</id>
            <name>nexus Releases</name>
            <url>http://10.18.0.200:8081/repository/maven-public/</url>
        </pluginRepository>
    </pluginRepositories>
    
  • 在本地mavenconf/settings.xml添加server节点

	<server>
        <!--必须与repository的id一直-->
      <id>nexus</id>
      <username>my_login</username>
      <password>my_password</password>
      </servce>
4.2 发布jarNexus
  • pom.xml添加如下节点
<distributionManagement><!-- mvn site:deploy 部署的位置 -->
        <site>
            <id>local</id>
            <name>filesystem</name>
            <url>file:${project.basedir}/site</url>
        </site>
        <repository>
            <id>releases</id><!--正式版本的地址-->
            <name>Internal Releases</name>
            <url>http://10.18.0.220:8081/repository/kcwl-release/</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id><!--快照版本-->
            <name>Internal Releases</name>
            <url>http://10.18.0.220:8081/repository/kcwl-snapshot/</url>
        </snapshotRepository>
    </distributionManagement>
  • 使用maven deploy命令,打包发布版本,如果需要其他组的成员使用的时候,可以看到源码和注释,可以添加源码插件

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.0.1</version>
        <executions>
            <execution>
                <id>attach-sources</id>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    

四、安装Nexus遇到的问题

4.1 Nexus服务启动失败

  • Nexus需要的官方配置非常高,建议都是CPU4+,内存8G起,参见系统配置说明的文档:https://help.sonatype.com/repomanager3/system-requirements,这里有一个大坑是当你配置服务使用的nexus start命令,如果是因为你的内存不够启动不了系统,这里不会出现任何错误的提示,只会显示服务没有启动成功,也不会写入日志

  • 我们在刚开始启动Nexus的时候,可以先使用Nexus run在前台运行服务,如果启动失败,这里会在控制台打出相应的错误信息,比如提示你内存不足

    Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000717000000, 945094656, 0) failed; error='Cannot allocate memory' (errno=12)
    
  • Nexus建议部署到配置较高的电脑上,但如果你的服务器是在没有空余的高配置的服务器,我们可以修改/usr/local/nexus-3.20.0-04/bin/nexus.vmoptions,调低相应的JVM参数

    -Xms2703m # 默认jvm最小内存,我们可以调整成256m
    -Xmx2703m # 默认jvm最大内存,我们可以调整成256m
    -XX:MaxDirectMemorySize=2703m # 同样需要调小
    -XX:+UnlockDiagnosticVMOptions
    -XX:+LogVMOutput
    -XX:LogFile=../sonatype-work/nexus3/log/jvm.log
    -XX:-OmitStackTraceInFastThrow
    -Djava.net.preferIPv4Stack=true
    -Dkaraf.home=.
    -Dkaraf.base=.
    -Dkaraf.etc=etc/karaf
    -Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
    -Dkaraf.data=../sonatype-work/nexus3
    -Dkaraf.log=../sonatype-work/nexus3/log
    -Djava.io.tmpdir=../sonatype-work/nexus3/tmp
    -Dkaraf.startLocalConsole=false
    #
    # additional vmoptions needed for Java9+
    #
    # --add-reads=java.xml=java.logging
    # --add-exports=java.base/org.apache.karaf.specs.locator=java.xml,ALL-UNNAMED
    # --patch-module=java.base=lib/endorsed/org.apache.karaf.specs.locator-4.2.6.jar
    # --patch-module=java.xml=lib/endorsed/org.apache.karaf.specs.java.xml-4.2.6.jar
    # --add-opens=java.base/java.security=ALL-UNNAMED
    # --add-opens=java.base/java.net=ALL-UNNAMED
    # --add-opens=java.base/java.lang=ALL-UNNAMED
    # --add-opens=java.base/java.util=ALL-UNNAMED
    # --add-opens=java.naming/javax.naming.spi=ALL-UNNAMED
    # --add-opens=java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED
    # --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED
    # --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED
    # --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED
    # --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED
    # --add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED
    #
    # comment out this vmoption when using Java9+
    #
    -Djava.endorsed.dirs=lib/endorsed
    
    

4.2 在pom.xml或者setting.xml中配置nexus仓库地址无效

<mirrors>
 <mirror>
		<id>nexus</id>
		<mirrorOf>*</mirrorOf>
		<name>Nexus osc</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>
</mirrors>
  • 如果之前我们在setting.xml中阿里云的maven镜像,并设置mirrorOf*,这时候不管配置什么仓库,所有请求都会被映射到ali的私服地址上

  • mirrorOf的标签应该与repositoryid值想匹配,但是mirrorOf是支持正则表达式的,可以动态映射镜像地址,官网举例:

    * = everything
    external:* = everything not on the localhost and not file based.
    repo,repo1 = repo or repo1
    *,!repo1 = everything except repo1
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值