Skip to content

docker安装nexus

一、前置条件

创建持久卷文件夹,必须设置为200的pid,容器内部使用的是这个权限 #旧版的卷地址是/var/nexus-data,新版的是/nexus-data。因为是宿主机挂载,nexus-data必须是包含了已有的文件,否则通过数据卷映射出来,这个目录只能由nexus写入,持久化路径通过配置-Djava.util.prefs.userRoot

mkdir /software/nexus/nexus-data && chown -R 200 /software/nexus/nexus-data

二、docker安装

基础镜像:sonatype/nexus3

安装命令

docker run -id --privileged=true --name=nexus --restart=unless-stopped -p 8081:8081 -v /software/nexus/nexus-data:/nexus-data -v /software/nexus/nexus-home:/nexus-home -e INSTALL4J_ADD_VM_PARAMS="-Xms1024m -Xmx1024m -XX:MaxDirectMemorySize=1024m -Djava.util.prefs.userRoot=/nexus-home"  sonatype/nexus3

三、maven-proxy介绍

Nexus可以代理第三方私有库,这样就可以不用在配置文件中配置多个公有库和私有库,只需要一个代理库就可以了

即通过maven-proxy代理多个库,再通过一个group,使用一个地址即可代理多个私服

一般使用中央仓库地址

  1. http://www.sonatype.org/nexus/

  2. http://mvnrepository.com/

  3. http://repo1.maven.org/maven2

四、升级nexus3

升级的注意事项:3.69.x和3.70.0是分界线,3.69及之前使用的是 OrientDB,而3.70以后使用的是H2,如果是跨越这两个大版本,则需要进行数据迁移,否则直接升级版本。

4.1 数据迁移

参考官方文档:https://help.sonatype.com/en/h2-pre-3-69-java-8-or-11.html

参考博客:https://linux.do/t/topic/213799

4.2 创建数据备份任务

路径configuration->system->tasks->create task->admin - export database for backup

image

image

image

4.3 执行数据备份

执行备份任务,等待一会刷新页面

image

image

4.4 数据迁移

生成数据备份文件

# 进入容器
docker exec -it nexus bash

# 停止 nexus 服务
/opt/sonatype/nexus/bin/nexus stop

# 进入备份文件夹
cd /nexus-data/backup/

# 查看备份的文件
ls -ahl

# 下载迁移工具,这里如果无法使用 curl 直接下载,建议在良好的网络环境下下载好文件后,把文件复制到 docker 容器中的 /nexus-data/backup 文件夹中
curl -s -L -O https://download.sonatype.com/nexus/nxrm3-migrator/nexus-db-migrator-3.70.2-01.jar

# 将数据迁移到 `H2` 数据库。(如果内存不够可以将16G修改到合适大小)
java -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar nexus-db-migrator-3.70.2-01.jar --migration_type=h2

# 停止 nexus 服务
/opt/sonatype/nexus/bin/nexus stop

# 查看迁移的数据文件
ls -ahl nexus.mv.db

# 将迁移的数据文件复制到 `db` 文件夹中
cp nexus.mv.db /nexus-data/db

# 退出容器
exit

修改数据库配置

# 删除容器
docker stop nexus && docker rm nexus

# 16、修改打开 H2 数据库
vi ./mnt/nexus-data/etc/nexus.properties
# 17、在文件中添加一行,:wq 保存并退出
nexus.datastore.enabled=true

# 18、重新创建容器--这里根据自己的启动脚本,如果是compose则重启即可
docker stop nexus

# 19、查看 H2 数据库正确启动
docker logs nexus | grep H2
# 20、控制台输出
nexus  | 2024-09-21 00:00:00,000+0000 INFO  [FelixStartLevel] *SYSTEM org.sonatype.nexus.datastore.DataStoreConfigurationDefaultSource - Loaded 'nexus' data store configuration defaults (Embedded H2)
nexus  | 2024-09-21 00:00:00,000+0000 INFO  [FelixStartLevel] *SYSTEM org.sonatype.nexus.datastore.mybatis.MyBatisDataStore - nexus - MyBatis databaseId: H2

20.1 升级版本

直接修改docker镜像版本即可升级成功,比如

docker run -id --privileged=true --name=nexus --restart=unless-stopped -p 8081:8081 -v /software/nexus/nexus-data:/nexus-data -v /software/nexus/nexus-home:/nexus-home -e INSTALL4J_ADD_VM_PARAMS="-Xms1024m -Xmx1024m -XX:MaxDirectMemorySize=1024m -Djava.util.prefs.userRoot=/nexus-home"  sonatype/nexus3:3.72.0

20.2 删除备份的数据

将/nexus-data/backup的文件全部删除,释放空间