Nexus部署指南
(一)版本差异
https://www.sonatype.com/products/sonatype-nexus-oss-vs-pro-features
请选择合适的版本。下文使用的是开源版本。
(二)部署方式
压缩包部署
部署要求
操作系统:
- Windows
- Linux (most commonly used)
- MacOS
JVM相关需求:
更多的调优选项,如独立数据库、外置存储、内存等建议,请参考:
https://help.sonatype.com/en/sonatype-nexus-repository-system-requirements.html
注意:
- 外置PG数据库需要nexus专业版支持;
- 如果使用内置的OrientDB,可以用容器部署但不建议部署到K8S等容器管理平台,会造成数据损坏;
- 如一天超过2万请求或组件数量超过10万个,官方建议用外置PG数据库;
- 临时目录$data-dir/tmp禁止挂载为noexec,否则启动报错;
- 当数据目录可用空间小于4GB时,数据库将进入只读模式;
- Nexus存放两类数据:内嵌数据(H2, OrientDB, Elastic Search)和块存储数据(二进制组件包),尽量采用本地硬盘作为存储。外置存储如NFS、CIFS、S3等不能很好的支持内嵌数据的存储。
部署步骤
- 建议使用专有的账号运行nexus,避免使用root运行;
由于采用非root账号运行,文件句柄数默认比较小,因此需要修改文件句柄数:
编辑/etc/security/limits.conf
<userid> - nofile 65536 - 安装JRE,确保java命令生效。
- 下载对应操作系统的压缩包
https://help.sonatype.com/en/download.html 本案以Centos部署,因此下载地址为:
https://download.sonatype.com/nexus/3/nexus-3.64.0-04-unix.tar.gz - 解压后即可使用,不需要安装
# 启动
/opt/nexus/nexus-3.64.0-04/bin/nexus start
# 查看状态
/opt/nexus/nexus-3.64.0-04/bin/nexus status
# 停止
/opt/nexus/nexus-3.64.0-04/bin/nexus stop
当看到nexus is running的时候说明项目已经启动了,默认端口号是8081
访问:http://服务器地址:8081/
用户名:admin
初始密码:在/opt/nexus/sonatype-work/nexus3/admin.password 文件里
容器部署
- 如何安装docker容器引擎,请参考官方手册:
https://docs.docker.com/engine/install/centos/ - Nexus容器官方部署手册:
https://hub.docker.com/r/sonatype/nexus3/ 【鉴于国内偶尔访问不到,下面简单摘抄】 - 1.简易快速操作:
启动:docker run -d -p 8081:8081 --name nexus sonatype/nexus3
停止:docker stop --time=120 nexus (预留时间给数据库完整关闭)
测试:curl http://localhost:8081/
程序默认安装到容器路径/opt/sonatype/nexus,数据默认存放到/nexus-data - 2.JVM参数调整启动方式:
docker run -d -p 8081:8081 --name nexus -e INSTALL4J_ADD_VM_PARAMS=“-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=/some-other-dir” sonatype/nexus3
注:可以将-Djava.util.prefs.userRoot指定到某个持久化存储目录,用于保存Nexus授权,容器重启后不至于丢失授权信息。 - 3.指定持久化存储方式:
$ docker volume create --name nexus-data
$ docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
或:
$ mkdir /some/dir/nexus-data && chown -R 200 /some/dir/nexus-data
$ docker run -d -p 8081:8081 --name nexus -v /some/dir/nexus-data:/nexus-data sonatype/nexus3
(三)目录说明
安装目录
默认叫:nexus-版本
LICENSE.txt , NOTICE.txt
授权及法务相关声明
bin/
启动脚本及启动相关配置文件
etc/
主配置文件所在路径
lib/
Apache Karaf相关的动态链接库
public/
应用程序的公共资源
system/
构成应用程序的所有组件和插件
数据目录
默认叫:…/sonatype-work/nexus3
blobs/
所有块存储的父目录
cache/
缓存的Karaf包信息
db/
OrientDB数据库存放nexus元数据
elasticsearch/
Elasticsearch当前的配置状态
etc/
运行时的参数配置文件,详见参数配置章节
health-check/
Repository Health Check 缓存的报告
keystores/
存放自动生成的key文件用来标识nexus服务器的身份
log/
存放日志文件,默认自动清理超过90天的日志
tmp/
java运行的临时文件夹
(四)参数配置
JVM启动参数配置
$install-dir/bin/nexus.vmoptions
样例:
主配置文件
应用程序的etc目录下:
fabric目录
Ehcache, Elasticsearch, and OrientDB的配置信息
karaf目录
Apache Karaf,主要包括:
- config.properties - The main configuration for the Apache Karaf runtime. This file should not be modified.
- custom.properties - Customizable configuration used by Apache Karaf. This file can be used to pass additional parameters to the Apache Karaf container.
- org.apache.* and org.ops4j.* - various Karaf and OSGi related configuration files
- system.properties - system properties used for the JVM and application start up
jetty目录
Eclipse Jetty的配置文件
logback目录
- logback.xml - 默认的日志配置文件,例如nexus.log和tasks/*.log日志文件名,日志级别,日志格式,日子保留策略等
- logback-access.xml - 默认的日志配置文件,例如request.log日志文件名,日志级别,日志格式,日子保留策略等
nexus-default.properties
程序启动的默认值,禁止修改该文件,如需修改,应修改主配置文件nexus.properties
ssl目录
配置https时存放keystores的目录
配置样例
修改http端口
主配置文件nexus.properties
application-port=9081
访问url就变成 http://localhost:9081/
修改上下文路径
主配置文件nexus.properties
nexus-context-path=/components/
访问url就变成 http://localhost:9081/components/
修改数据目录
配置bin/nexus.vmoptions
-Dkaraf.data=/opt/sonatype-work/nexus3
-Djava.io.tmpdir=/opt/sonatype-work/nexus3/tmp (该目录必须有可执行权限)
-XX:LogFile=/opt/sonatype-work/nexus3/log/jvm.log
-Dkaraf.log=/opt/sonatype-work/nexus3/log
配置SSL
outbound SSL
指nexus服务器代理的外部仓库要求采用https进行通信,此处略。
inbound SSL
指连接到nexus服务器本身需要采用https,通常有两种方式:
- 采用额外的反向代理,例如apache httpd, nginx, jetty等,简单方便,此处略;
- 采用nexus本身(自带的jetty)直接提供SSL。
2.1 制作java keystore文件并存放到etc/ssl/keystore.jks
详情可参考:https://support.sonatype.com/hc/en-us/articles/213465768-SSL-Certificate-Guide?_ga=2.235949185.1209692191.1706156496-426980590.1700454565
例如:准备好CA证书root.crt服务器证书nexus.crt和密钥nexus.key
openssl pkcs12 -export -in nexus.crt -inkey nexus.key -out nexus.p12 -name nexus -CAfile root.crt -caname root
keytool -importkeystore -deststorepass password destkeypass password -destkeystore keystore.jks -srckeystore nexus.p12 -srcstoretype PKCS12 -srcstorepass password -alias jetty
生成keystore.jks和记住3个password
2.2. 修改etc/nexus.properties配置
- i.添加配置:application-port-ssl=8443
- ii.将${jetty.etc}/jetty-https.xml加入nexus-args变量,如:nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml
- iii.关闭http监听:移除上一步nexus-args变量的${jetty.etc}/jetty-http.xml
- iv.添加配置:ssl.etc=${karaf.data}/etc/ssl
2.3.修改jetty-https.xml
- i.配置密码:2.1步骤的3个密码
- ii.配置别名,如:
• <Set name=“certAlias”>jetty
<Set name=“KeyStorePath”>
……
2.4.重启服务
关闭http监听器
编辑etc/nexus.properties
将${jetty.etc}/jetty-http.xml从变量nexus-args移除,保存重启,
兼容SNI的证书
修改${jetty.etc}/jetty-https.xml配置:
<New id=“sslContextFactory” class=“org.eclipse.jetty.util.ssl.SslContextFactory”>
改为:
<New id=“sslContextFactory” class=“org.eclipse.jetty.util.ssl.SslContextFactory$Server”>