¶手动安装
Download Archives - Repitory Manager 3 (sonatype.com)
从链接中下载安装包后解压到/opt
最后得到的目录为
- sonatype-work
- nexus-3.xx.x
重命名nexus-3.xx.x
为nexus3
cd /opt
# 如果下载失败,就手动下载,然后上传到服务器
wget https://download.sonatype.com/nexus/3/nexus-3.67.1-01-java8-unix.tar.gz
tar -zxf nexus-3.67.1-01-java8-unix.tar.gz
mv nexus-3.67.1-01 nexus3
¶非root运行
useradd nexus |
¶修改配置
# 可以修改端口和访问路径 |
¶查看初始密码
# 启动后查看这个文件获取登录密码,用户名默认为admin |
¶前台运行
./nexus run |
使用该 run
命令启动存储库管理器将使其在当前 shell 中运行并显示日志输出。可以在相应的控制台上停止正在 CTRL+C
运行的应用程序。
一旦日志显示消息“已启动Sonatype Nexus”,就可以访问该应用程序。
¶后台运行
该 nexus
脚本可用于使用 start
、 stop
、 restart
和 force-reload
status
命令将存储库管理器作为 OSX 和 Unix 上的后台应用程序进行管理。
要启动存储库管理器并在后台运行它,请执行以下操作:./nexus start
在后台运行时,所有日志记录都将转到应用程序日志文件。
要停止存储库管理器在后台运行,请执行以下操作:./nexus stop
¶Docker安装
https://hub.docker.com/r/sonatype/nexus3/
默认用户是 admin
,唯一生成的密码可以在卷内 admin.password
的文件中找到。有关卷的信息,请参阅持久性数据。
服务可能需要一些时间(2-3 分钟)才能在新容器中启动。您可以跟踪日志以确定Nexus何时准备就绪:docker logs -f nexus
Nexus的安装目录是 /opt/sonatype/nexus
持久性目录 /nexus-data
,用于配置、日志和存储。此目录需要可由 Nexus 进程写入,该进程以 UID 200 的形式运行。
¶内存分配
有一个环境变量用于将 JVM 参数传递给启动脚本
INSTALL4J_ADD_VM_PARAMS
,传递给 Install4J 启动脚本。默认值为-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=${NEXUS_DATA}/javaprefs
。
这可以在运行时进行调整: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=/some-other-dir
可以设置为持久路径,如果容器重新启动,该路径将保持已安装的Sonatype Nexus存储库许可证。
在决定分配多少堆和直接内存时,请务必检查内存要求。
另一个环境变量可用于控制 Nexus 上下文路径
NEXUS_CONTEXT
,默认为 /
这可以在运行时提供:docker run -d -p 8081:8081 --name nexus -e NEXUS_CONTEXT=nexus sonatype/nexus3
¶数据持久化
使用 Docker 处理持久存储需求有两种通用方法。有关更多信息,请参阅管理容器中的数据。
- 使用 Docker 卷。由于 docker 卷是持久性的,因此可以专门为此目的创建卷。这是推荐的方法。
docker volume create --name nexus-data |
- 挂载主机目录作为卷。这是不可移植的,因为它依赖于在主机上具有正确权限的现有目录。但是,在某些情况下,当需要将此卷分配给某些特定的底层存储时,它可能很有用。
mkdir /some/dir/nexus-data && chown -R 200 /some/dir/nexus-data |
version: '3.9' |
¶迁移和备份
¶Linux
- 仓库迁移
Nexus的构件仓库都保存在sonatype-work
目录中,该目录的位置由nexus/bin/nexus.vmoptions
配置文件指定。仓库迁移需要两个过程:备份和还原。
- 备份仓库
将sonatype-work文件夹整体备份即可。
- 还原仓库
将备份好的sonatype-work
文件拷贝到新的服务器中。然后修改nexus/bin/nexus.vmoptions
配置文件,重新指定仓库的目录。
¶Windows
- 仓库迁移
Nexus的构件仓库都保存在sonatype-work
目录中,该目录的位置由bin/nexus.vmoptions
配置文件指定(Dkaraf.data
)。仓库迁移需要两个过程:备份和还原
- 备份仓库
将sonatype-work
文件夹整体备份即可。
- 还原仓库
将备份好的sonatype-work
文件拷贝到新的服务器中。然后修改bin/nexus.vmoptions
配置文件,重新指定仓库的目录。
¶问题报错
Return code is: 413, ReasonPhrase: Request Entity Too Large.
- 可能是因为用了nginx反向代理,默认的请求体大小有限制,可以修改client_max_body_size大小。
Failed to deploy artifacts
部署文件失败
Failed to transfer file
文件传输失败
with status code 400
400部署异常
401 Unauthorized
未经授权的
以上几种错误可能是
项目pom.xml文件中distributionManagement标签的id和maven配置文件setting.xml中server的id没有保持一致
如果没有开启匿名访问,则需要在settings.xml中配置server,username和password。
distributionManagement下url的路径名称写错了,需要与nexus中创建的hosted类型的maven仓库名一模一样
Invalid maven-metadata.xml GAV
- 最后我发现是groupId写错了,不小心多打了一个点
从远端下载jar失败,报错401。
- server下的id要与mirror中的id保持一致。
¶HTTPS 配置
¶nginx反向代理
先生成证书和密钥openssl req \
-newkey rsa:4096 -nodes -sha256 \
-keyout nexus.jiahe.com.key \
-x509 -days 36500 \
-out nexus.jiahe.com.crt
添加nginx配置server {
listen 80;
listen 443 ssl;
server_name nexus.jiahe.com;
ssl_certificate /etc/nginx/conf.d/certs/nexus.jiahe.com.crt;
ssl_certificate_key /etc/nginx/conf.d/certs/nexus.jiahe.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://192.168.56.32:8081;
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";
client_max_body_size 300M;
}
}
防火墙开放httpsfirewall-cmd --add-service=https --permanent --zone=public
firewall-cmd --reload
客户端添加hosts192.168.56.32 nexus.jiahe.com
¶直接访问
官方文档有说明 https://help.sonatype.com/en/configuring-ssl.html#serving-ssl-directly
¶Docker仓库 HTTPS访问
- 使用openssl生成证书和密钥
cd /etc/nginx/conf.d |
- 在nginx中添加关于该域名的ssl配置
server { |
- 配置根证书到docker
mkdir -p /etc/docker/certs.d |
- 验证是否可以成功访问
docker login -u admin -p admin docker.nexus.jiahe.com |
tls: failed to verify certificate: x509: certificate is valid for *.jiahe.com, jiahe.com, not docker.nexus.jiahe.com
这个报错就是说 用ssl生成的时候要写具体的域名,不要只写一级域名 例如 jiahe.com
tls: failed to verify certificate: x509: certificate signed by unknown authority
这个报错大概率就是 /etc/docker/certs.d/docker.nexus.jiahe.com/root.crt
这个文件有问题
可以尝试使用以下方式获取根证书# 注意修改成你自己的域名
echo -n | openssl s_client -showcerts -connect docker.nexus.jiahe.com:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/docker.nexus.jiahe.com/root.crt