劳伦的奇妙冒险


客亦知夫水与月乎?

哀吾生之须臾,
羡长江之无穷。

Nexus3 服务器部署

本文用于记录 Nexus(v3.21.1)在私人服务器上的部署过程,以便日后参考。

Nexus 的官方名称为 Nexus Repository Manager,简称为 NXRM,因此 Nexus 3 又称 NXRM3。

服务器环境:CentOS Linux 7,x86-64。



安装与运行

1. 下载和解压缩

由于使用 wget 下载时会出现 connection timeout 问题,因此改为下载到本地后用 sftp 上传到服务器。

官网下载页面

# after sftp login
sftp> put /Users/Lawrence/Downloads/nexus-3.21.1-01-unix.tar.gz /opt/archives/

在 shell 下验证 CheckSum 后解压缩到指定文件夹:

# 先验证 Checksum
[root@spannerc_c01 ~]# cd /opt/archives
[root@spannerc_c01 archives]# md5sum nexus-3.21.1-01-unix.tar.gz
af03e07d0a7af89800aa593e49b5b94a  nexus-3.21.1-01-unix.tar.gz

# 解压缩文件到指定文件夹
[root@spannerc_c01 archives]# mkdir /opt/nexus3
[root@spannerc_c01 archives]# tar zxvf nexus-3.21.1-01-unix.tar.gz -C /opt/nexus3/

# 创建命令的 Symbolic Link
[root@spannerc_c01 archives]# ln -s /opt/nexus3/nexus-3.21.1-01/bin/nexus /usr/bin/nexus
[root@spannerc_c01 archives]# whereis nexus

2. 创建新用户(可选)

在 Linux 服务器运行则按照官方文档建议的 good practice,将 NXRM 作为系统服务以其他用户运行。因此需要先创建新用户并赋予相应权限:

以 root 运行 NXRP3 会提示警告:

WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************

创建新用户 ‘nexus’ 并赋予相应权限:

# 创建用户 'nexus' 并设置用户密码。用户组名默认与用户名相同
[root@spannerc_c01 ~]# useradd nexus
[root@spannerc_c01 ~]# passwd nexus
Changing password for user nexus.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

# 只把文件夹所属组改为 nexus(相当于 chgrp 命令),并允许该组用户有 write 权限
[root@spannerc_c01 ~]# chown -R :nexus /opt/nexus3/
[root@spannerc_c01 ~]# chmod g+w -R /opt/nexus3/

3. 运行 Nexus

3.1 测试启动

# 登录 nexus 用户尝试启动
[root@spannerc_c01 ~]# su -l nexus
[nexus@spannerc_c01 ~]$ nexus run

由于服务器配置较低,其中物理内存只有2G,而 NXRM3 默认配置 jvm 约为 2.5G 因此无法分配内存而报错:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x000000074f550000, 1890254848, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1890254848 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /opt/nexus3/nexus-3.21.1-01/hs_err_pid2913.log

修改 jvm 配置文件:

[nexus@spannerc_c01 ~]$ vim /opt/nexus3/nexus-3.21.1-01/bin/nexus.vmoptions

其中 -Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m 三个参数分别为 jvm 的初始/最小值、最大值与 Direct Memory 区的最大值,均改为较小值如 300m(会使得 MinorGC 更频繁),其中 -Xms 与 -Xmx 两个参数在官方文档中要求一致。编辑完成后再次启动 NXRM (系统要求的官方文档地址:System Requirements):

[root@spannerc_c01 ~]# nexus run

# 省略大量的 console 输出
-------------------------------------------------

Started Sonatype Nexus OSS 3.21.1-01

-------------------------------------------------

3.2 浏览器访问

基本配置文件:/opt/nexus3/nexus-3.21.1-01/etc/nexus-default.properties

# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/

可见默认端口为 8081,虚拟目录为 /,因此访问目录为 http://127.0.0.1:8081/

3.3 修改管理员密码

[root@spannerc_c01 ~]# cat /opt/nexus3/sonatype-work/nexus3/admin.password

浏览器中以 admin 和上述密码进行登录,并根据提示依次修改 admin 密码和设置游客权限。admin.password 会在密码修改后自动被删除。

3.4 正式运行

退出 nexus 用户回到 root 用户,在配置文件中指定运行的 NXRM 的用户:

[root@spannerc_c01 ~]# vim /opt/nexus3/nexus-3.21.1-01/bin/nexus.rc

取消注释并指定用户名:run_as_user="nexus"

最后直接在 root 下启动 NXRM:

[root@spannerc_c01 ~]# nexus start
Starting nexus

# 确认程序正常启动的两种方式
[root@spannerc_c01 ~]# ps aux | grep nexus
[root@spannerc_c01 ~]# tail -f /opt/nexus3/sonatype-work/nexus3/log/nexus.log

4. 小结

NXRM3 的安装部署整体上比较简单,只是需要创建相应用户以及相应的权限设置的操作。由于部分文件和文件夹在 NXRM 运行时才创建,所以当后续启动报错时可以检查一下是否权限问题并及时修改权限(chown chmod)。


服务器配置

1. 系统服务

将 NXRM 作为系统服务:(官方文档 Run as a Service

[root@spannerc_c01 ~]# sudo ln -s /opt/nexus3/nexus-3.21.1-01/bin/nexus /etc/init.d/nexus

然后在 /etc/systemd/system/ 目录中创建文件 nexus.service,其内容为:

[Unit]
Description=nexus service
After=network.target
  
[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/opt/nexus3/nexus-3.21.1-01/bin/nexus start
ExecStop=/opt/nexus3/nexus-3.21.1-01/bin/nexus stop
User=nexus
Restart=on-abort
  
[Install]
WantedBy=multi-user.target

使配置文件生效:

[root@spannerc_c01 ~]# sudo systemctl daemon-reload
[root@spannerc_c01 ~]# sudo systemctl enable nexus.service # 允许开机启动服务
[root@spannerc_c01 ~]# sudo systemctl start nexus.service

如果 nexus 服务配置后无法启动服务,可参考官方文档的 pid 一节进行检查。

2. 反向代理与 SSL

Run Behind a Reverse Proxy

使用 nginx 作为反向代理。配置 SSL 后浏览器访问报错,检查一堆 proxy_set_header 是否都已设置。

upstream nexus_dashboard {
    server 127.0.0.1:8081;
}

server {
    listen 443 ssl http2;
    server_name  www.example.com;

    #access_log  logs/host.access.log  main;
    ssl_certificate "ssl_certificate.crt";
    ssl_certificate_key "ssl_certificate_key.key";

    ssl_session_timeout  10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://nexus_dashboard/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto "https";
    }

}
最近的文章

Java 8 基础教程

原文地址:Modern Java - A Guide to Java 8作者: winterbe这篇文章原本在我的博客发布。 你也该看看我的 Java 11 指南(包括 Java 9, 10, 11 的新语法特性以及新 API 的介绍)。欢迎阅读。这篇指南会一步步地引导你过一遍所有的 Java 8 新特性。通过简短的示例代码,你会学习到如何使用接口的默认方法、lambda 表达式、方法引用以及可重复注解(annotation)。文章结束时你将会熟悉大部分 API 的变化,如 stream...…

java stream translation继续阅读
更早的文章

十种基础排序算法

1. 比较排序 1.1 选择排序 1.2 冒泡排序 1.3 归并排序 1.4 快速排序 算法过程 渐进复杂度 示例代码 退化的情况 与归并排序比较 总结 1.5 插入排序 1.6 希尔排序 1.7 堆排序 2. 非比较排序 2....…

algorthm sorting继续阅读