Posts nexus私有库的搭建
Post
Cancel

nexus私有库的搭建

昨天在线上重新搭建了一套maven私有库项目。自己又重新走了一遍流程,还是遇到了一些坑的,特此记录下,以备后面查阅的时候有个记录。

下载安装包

私有库采用的是nexus的方案(最新版本 3.30). 下载脚本:

1
wget https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.30.0-01-unix.tar.gz

创建解压路径并解压

1
2
mkdir /usr/local/nexus/
tar -zxvf nexus-3.30.0-01-unix.tar.gz -C /usr/local/nexus/

创建nexus专用用户角色

因为如果直接执行nexus启动脚本的话,会报 warning 错误,警告启用的用户角色是 root,会有安全漏洞。所以我们先创建一个专门为nexus项目工作的角色,并赋予文件夹权限。

1
2
useradd nexus
chown -R nexus:nexus /usr/local/nexus

编辑启动脚本

1
sudo vi /usr/local/nexus/nexus-3.30.0-01/bin/nexus

将文件中下面的一段文字

1
run_as_user=''

修改为

1
run_as_user='nexus'

编辑启动和运行内存(可选)

nexus的内存设置位置如下:(不建议将值修改变小 可能会影响nexus的运行)

1
sudo vi /usr/local/nexus/nexus-3.30.0-01/bin/nexus.vmoptions

主要修改下面2行内容:

1
2
-Xms2703m
-Xmx2703m

修改nexus的启动端口(可选)

1
vi /usr/local/nexus/nexus-3.30.0-01/etc/nexus-default.properties

主要修改下面的端口值

1
application-port=8081

配置https和nginx

ssl免费证书

可以自己去这里申请.

nginx的配置

直接上域名的conf配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
    listen 80;
    server_name maven.example.com;  # rewrite ^ (.*) $ https: //$server_name$1 permanent;   #将所有http请求通过rewrite重定向到https。
    location / {
         rewrite ^ (.*) $ https: //$host$1 permanent;
    }
}


server {
    listen 443 ssl;
    ssl on;
    ssl_certificate cert / maven.example.com.pem;
    ssl_certificate_key cert / maven.example.com.key;

    server_name maven.example.com;

    location / {
        proxy_pass http: //127.0.0.1:8888;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X - Forwarded - Proto https;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

启动nexus

1
/usr/local/nexus/nexus-3.30.0-01/bin/nexus start

启动后,服务器上会自动生成一个初始密码文件。路径如下:

1
/usr/local/nexus/sonatype-work/nexus3/admin.password

此时使用admin账户和密码进行登录. 第一次登录会要求更改密码,自己按照指示流程进行修改密码即可。

nexus登录 nexus登录

nexus修改密码 nexus修改密码

注意: 安全起见, 此处应该选择 disable anonymous access nexus确定匿名用户权限 nexus确定匿名用户权限

设置新用户并赋予角色

因为不建议使用admin来进行代码库上传的操作, 所以还是自己新建一个用户比较好.

  1. 点击顶部的 create local user 按钮

nexus增加用户 nexus增加用户

  1. 设置用户属性

注意最后的那个权限设置的位置应该选择 nx-admin, 权限最大. 方便. 设置用户属性 设置用户属性

nexus几个库的说明

库的列表如下图:

nexus库 nexus库

其中我们重点关注下面几个库: maven-releases maven-snapshots maven-public aliyun-proxy thirdparty

其中 aliyun-proxythirdparty 是我自己新加的. aliyun-proxy 是增加了一个阿里云的代理库, 提高公共库的下载速度. thirdparty 是为了把本地的第三方jar包或者库手动上传到的一个地方.

maven-public 是其他几个库的总和(如下图–注意aliyun-proxy和thirdparty的). 所以我们在本地的settings.xml文件里面设置设置下载源的时候选择这个即可.

public库 public库包含项

maven-releasesmaven-snapshots 是对应的release和snapshot版本上传的地方. 包括公共库以及自己要部署的项目的文件版本

release库的设置

上面的一顿操作完成后,发现项目无法 mvn deploy. 报错为 maven return code is:400,ReasonPhrase:Repository does not allow updating assets. 这是因为需要 releases 库打开 Allow redeploy 的设置.

release库deploy设置1 release库deploy设置1

release库deploy设置2 release库deploy设置2

如何手动上传jar包到thirdparty库

手动上传jar包1 手动上传jar包1

记得一点要点中 Generate a POM file with these coordinates 这个checkbox。 手动上传jar包2 手动上传jar包2

setting.xml的配置以及java项目的配置

直接上配置内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?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">
  
  <pluginGroups>
    
  </pluginGroups>

  
  <proxies>
    
  </proxies>

  
  <servers>
    
      <server>    
      <!-- 这里面的id要和java项目pom.xml文件的distributionManagement里面的repository的id节点名字一样,否则会报401权限错误 -->
      <id>maven-releases</id>    
      <username>deployer</username>    
      <password>aaaa</password>    
    </server>    
    <server>    
      <id>maven-snapshots</id>    
      <username>deployer</username>    
      <password>aaaa</password>    
    </server>    

  </servers>

 
  <mirrors>
    <mirror>     
      <!-- 这里面的镜像都是为了maven拉取外部库用的. 这个地方要public在最前面, 因为他是个大总和, 啥库都有 -->
      <id>maven-public</id>     
      <mirrorOf>*</mirrorOf>     
      <url>https://maven.example.com/repository/maven-public/</url>     
    </mirror> 
   <mirror>     
      <id>maven-releases</id>     
      <mirrorOf>*</mirrorOf>     
      <url>https://maven.example.com/repository/maven-releases/</url>     
    </mirror>    
    <mirror>     
      <id>maven-snapshots</id>     
      <mirrorOf>*</mirrorOf>     
      <url>https://maven.example.com/repository/maven-snapshots/</url>     
    </mirror>     
  </mirrors> 
  
  
  <profiles>
    <profile>    
      <id>develop</id>
      <properties>
        <environment.type>develop</environment.type>
      </properties>

      <repositories>    
        <repository>    
          <id>maven-public</id>    
          <url>https://maven.example.com/repository/maven-public</url>    
          <releases>
            <enabled>true</enabled>
          </releases>    
          <snapshots>
            <enabled>true</enabled>
          </snapshots>    
        </repository>  
        <repository>    
          <id>maven-releases</id>    
          <url>https://maven.example.com/repository/maven-releases</url>    
          <releases>
            <enabled>true</enabled>
          </releases>    
          <snapshots>
            <enabled>true</enabled>
          </snapshots>    
        </repository>    
        <repository>    
          <id>maven-snapshots</id>    
          <url>https://maven.example.com/repository/maven-snapshots</url>    
          <releases>
            <enabled>true</enabled>
          </releases>    
          <snapshots>
            <enabled>true</enabled>
          </snapshots>    
        </repository>    
      </repositories>    
      <pluginRepositories>    
         <pluginRepository>    
                <id>maven-releases</id>    
                 <url>https://maven.example.com/repository/maven-releases</url>    
                 <releases><enabled>true</enabled></releases>    
                 <snapshots><enabled>true</enabled></snapshots>    
               </pluginRepository>    
               <pluginRepository>    
                 <id>maven-snapshots</id>    
                  <url>https://maven.example.com/repository/maven-snapshots</url>    
                <releases><enabled>true</enabled></releases>    
                 <snapshots><enabled>true</enabled></snapshots>    
             </pluginRepository>    
         </pluginRepositories>    
    </profile> 
  </profiles>

  
     
    
      <activeProfiles>    
      <activeProfile>develop</activeProfile>    
  </activeProfiles>   


</settings>

java项目中的配置

1
2
3
4
5
6
7
8
9
10
<distributionManagement>
    <repository>
        <id>maven-releases</id>
        <url>https://maven.example.com/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>maven-snapshots</id>
        <url>https://maven.example.com/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>
This post is licensed under CC BY 4.0 by the author.
Contents

2020年终总结

-