> For the complete documentation index, see [llms.txt](https://darren.gitbook.io/project/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://darren.gitbook.io/project/devops/kai-yuan-cang-ku-nexus/yi-nexus-de-an-zhuang.md).

# 一，nexus的安装

### 1，Nexus 介绍。

#### Nexus是什么？

Nexus 是一个强大的maven仓库管理器，它极大地简化了本地内部仓库的维护和外部仓库的访问。

不仅如此，他还可以用来创建yum、pypi、npm、docker、nuget、rubygems 等各种私有仓库。

所支持的类型，可从下图管窥：

![](http://www.eryajf.net/wp-content/uploads/2018/10/2018101600562242.jpg)

如果使用了公共的 Maven 仓库服务器，可以从 Maven 中央仓库下载所需要的构件（Artifact），但这通常不是一个好的做法。\
正常做法是在本地架设一个 Maven 仓库服务器，即利用 Nexus 私服可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个 Artifact。\
Nexus 在代理远程仓库的同时维护本地仓库，以降低中央仓库的负荷, 节省外网带宽和时间，Nexus 私服就可以满足这样的需要。\
Nexus 是一套 “开箱即用” 的系统不需要数据库，它使用文件系统加 Lucene 来组织数据。\
Nexus 使用 ExtJS 来开发界面，利用 Restlet 来提供完整的 REST APIs，通过 m2eclipse 与 Eclipse 集成使用。\
Nexus 支持 WebDAV 与 LDAP 安全身份认证。\
Nexus 还提供了强大的仓库管理功能，构件搜索功能，它基于 REST，友好的 UI 是一个 extjs 的 REST 客户端，它占用较少的内存，基于简单文件系统而非数据库。

#### 为什么要构建 Nexus 私服？

如果没有 Nexus 私服，我们所需的所有构件都需要通过 maven 的中央仓库和第三方的 Maven 仓库下载到本地，而一个团队中的所有人都重复的从 maven 仓库下载构件无疑加大了仓库的负载和浪费了外网带宽，如果网速慢的话，还会影响项目的进程。很多情况下项目的开发都是在内网进行的，连接不到 maven 仓库怎么办呢？开发的公共构件怎么让其它项目使用？这个时候我们不得不为自己的团队搭建属于自己的 maven 私服，这样既节省了网络带宽也会加速项目搭建的进程，当然前提条件就是你的私服中拥有项目所需的所有构件。

总之，在本地构建 nexus私服的好处有：

1）加速构建；\
2）节省带宽；\
3）节省中央 maven 仓库的带宽；\
4）稳定（应付一旦中央服务器出问题的情况）；\
5）控制和审计；\
6）能够部署第三方构件；\
7）可以建立本地内部仓库；\
8）可以建立公共仓库

这些优点使得 Nexus 日趋成为最流行的 Maven 仓库管理器。

### 2，版本选择及下载。

#### 关于版本选择

以前公司使用的版本一直是用的一个2.x的版本，旧的版本各种陈旧，在这种陈旧的情况下，许多地方已经破破烂烂了，比如最重要的功能之一，自动同步远程仓库的依赖，就已经无法使用，看到版本已经更新到3.x，因此就想着搭一个高版本的来体验一下。

这么一体验，发现这个东东，真真的是一个特别好的利器，神器。

#### 关于下载

官网地址：[https://www.sonatype.com/](http://www.eryajf.net/go?url=https://www.sonatype.com/)

[![](http://www.eryajf.net/wp-content/uploads/2018/10/2018101601381890.gif)](http://www.eryajf.net/wp-content/uploads/2018/10/2018101601381890.gif)

* 可以直接通过下边链接下载`最新版本`：[https://www.sonatype.com/oss-thank-you-tar.gz](http://www.eryajf.net/go?url=https://www.sonatype.com/oss-thank-you-tar.gz)<br>
* 可以通过后边的这个链接选择`历史版本`：[https://help.sonatype.com/repomanager3/download/download-archives—repository-manager-3](http://www.eryajf.net/go?url=https://help.sonatype.com/repomanager3/download/download-archives---repository-manager-3)

可能一般网络下在浏览器里边下载比较慢，那么可以复制链接用迅雷下载，就会好一些。

接下来开始整个安装的流程介绍，我们先来介绍普通方式的安装。

### 3，安装jdk-1.8。

nexus的安装依赖jdk环境。最好安装1.8版本的，否则可能会遇到其他不可知问题。此安装不再赘述。

我都是通过这种方式安装的`curl 192.168.106.10/a | sh`，如果看不懂这是什么鬼，可以点击这篇文章了解：[构建运维外挂。](http://www.eryajf.net/1395.html)

### 4，部署nexus。

#### 1，解压。

```
[root@nexus mnt]$tar xf nexus-3.12.1-01-unix.tar.gz[root@nexus mnt]$lsnexus-3.12.1-01  nexus-3.12.1-01-unix.tar.gz  sonatype-work
```

下载到指定目录并解压，我们可以看到解压后有通常两个文件。

| nexus-x.x.x   | Nexus运行所需要的文件，如运行脚本，依赖jar包等  |
| ------------- | ---------------------------- |
| sonatype-work | 该目录包含Nexus生成的配置文件、日志文件、仓库文件等 |

#### 2，启动。

```
cd /mnt/nexus-3.12.1-01/bin./nexus run &
```

大概等待一分钟左右，如果在日志输出当中看到如下显示，则说明启动成功。

```
------------------------------------------------- Started Sonatype Nexus OSS 3.12.1-01 -------------------------------------------------
```

#### 3，访问。

默认监听端口为`8081`，默认用户名密码为`admin/admin123`，因此可以访问以下首页并登陆。

[192.168.157.110:8081](http://www.eryajf.net/go?url=http://192.168.157.110:8081)

这里直接访问了，一般内部使用，就不开启防火墙神马的了。

![](http://www.eryajf.net/wp-content/uploads/2018/10/2018101600565193.jpg)

### 5，优化配置。

```
ln -s nexus-3.21.0-05 nexus
```

#### 1，设置开机自启服务。

```
vim /etc/systemd/system/nexus.service
[Unit]
Description=Sonatype Nexus
After=network.target

[Service]
User=nexus
Type=forking
TimeoutStartSec=0
ExecStart=/home/dev-app/nexus/nexus/bin/nexus start
ExecStop=/home/dev-app/nexus/nexus/bin/nexus stop
RestartSec=20

[Install]
WantedBy=multi-user.target
```

```
systemctl start nexus
systemctl enable nexus
```

#### 2.补充

```
修改nexus存储路径
vim /home/dev-app/nexus/nexus/bin/nexus.vmoptions

-Xms2703m
-Xmx2703m
-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
```

#### 2，配置运行用户。

这个地方可以使用root运行，不过官方文档里边也不建议使用root来运行，因此使用普通用户来运行。

```
[root@nexus ~]$useradd nexus
[root@nexus bin]$vim nexus.rc 
 run_as_user="nexus"
```

配置之后记得更改目录权限，否则下次启动会没有权限。

```
[root@nexus mnt]$chown -R nexus.nexus /home/dev-app/nexus
[root@nexus mnt]$chown -R nexus.nexus /data/nexus3
```

#### 3，配置jdk。

如果这里不配置，一般会使用默认的JAVA\_HOME的变量，如果系统中有多个，那么可以进行配置。

```
[root@nexus bin]$vim nexus 
修改第14行：INSTALL4J_JAVA_HOME_OVERRIDE=/usr/local/jdk1.8.0_144
```

#### 4，修改端口。

一般使用默认的，如果需要修改，则更改`/mnt/nexus-3.12.1-01/etc/nexus-default.properties`里边的配置。

这里不做修改了。

配置完毕之后，重启一下服务。

#### 6，启动之后，解决一个小问题。

![](http://www.eryajf.net/wp-content/uploads/2018/10/2018101600565212.jpg)

注意左上角会有一个告警，这个告警的意思是系统默认的最大文件句柄太小了。

解决办法官网也已经给出了：[解决文件句柄限制。](http://www.eryajf.net/go?url=https://help.sonatype.com/repomanager3/system-requirements#filehandles)

![](http://www.eryajf.net/wp-content/uploads/2018/10/2018101600565336.jpg)

因此我们照官方解决办法来做：

```
echo "nexus  -  nofile 65536" >> /etc/security/limits.conf
```

然后再次重启服务即可。

### 6，docker方式安装。

最后介绍一些使用docker的方式如何安装。

如果想使用docker来启动，那么可以参考：[官方镜像介绍。](http://www.eryajf.net/go?url=https://hub.docker.com/r/sonatype/nexus3/)

或用下边方式直接启动。

```
$ mkdir /mnt/nexus-data$ docker run -d -p 8081:8081 --name nexus -v --ulimit nofile=65536:65536 /mnt/nexus-data:/nexus-data sonatype/nexus3
```
