Nexus3 从 3.70.x 及以下版本升级 3.71.x 及以上版本(Docker 方式部署)

起因

昨天修改了 docker compose 文件中的镜像版本,直接更新镜像后,等了 15 分钟打开网页还是 502 Bad Gateway,于是又来折腾一番。

错误

docker 从 3.70.x 及以下版本升级 3.71.x 及以上版本出现旧数据库不支持错误

解决方案参考链接

官方迁移数据库文档

使用 docker compose logs nexus 查看出现报错,需要将 OrientDB 数据迁移到 H2PostgreSQL 数据库。

-------------------------------------------------------------------------------------------------------------------------
This instance is using a legacy Orient database. 
You must migrate to H2 or PostgreSQL before upgrading to this version. See our database migration help documentation at: 
https://links.sonatype.com/products/nxrm3/docs/unsupported-db.
-------------------------------------------------------------------------------------------------------------------------

启动支持 OrientDB 的最后版本

services:
  nexus:
    image: sonatype/nexus3:3.70.2  # https://hub.docker.com/r/sonatype/nexus3/tags
    restart: always
    container_name: nexus
    hostname: nexus
    user: nexus
    environment:
      - INSTALL4J_ADD_VM_PARAMS=-Xms16g -Xmx16g -XX:MaxDirectMemorySize=28672M -Djava.util.prefs.userRoot=/nexus-data/javaprefs  # 这里根据自己的配置修改内存大小
      - NEXUS_CONTEXT=/
    ports:
      - '8081:8081'
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./mnt/nexus-data:/nexus-data

networks:
  default:
    name: home-server  # 确保已创建这个网络
    external: true  # 使用外部网络

执行 docker compose up -d 启动 nexus 应用。

创建 nexus 备份文件

进行数据迁移

:warning:注意:根据大佬的提醒,下面步骤中下载的 https://download.sonatype.com/nexus/nxrm3-migrator/nexus-db-migrator-<version版本号>.jar 要符合自己镜像的版本。jar 的下载页面为 3.70.x Downloads (for OrientDB)

提醒
# 1. 进入容器
docker compose exec -it nexus /bin/bash

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

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

# 4. 查看备份的文件
ls -ahl

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

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

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

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

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

# 10. 退出容器
exit

修改 nexus 使用 H2 数据库

# 1. 删除容器
docker compose down

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

# 3. 重新创建容器
docker compose up -d

# 4. 查看 H2 数据库正确启动
docker compose logs nexus | grep H2
# 控制台输出
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

切换 nexus 到 3.72.0 版本

services:
  nexus:
    image: sonatype/nexus3:3.72.0  # https://hub.docker.com/r/sonatype/nexus3/tags
    restart: always
    container_name: nexus
    hostname: nexus
    user: nexus
    environment:
      - INSTALL4J_ADD_VM_PARAMS=-Xms16g -Xmx16g -XX:MaxDirectMemorySize=28672M -Djava.util.prefs.userRoot=/nexus-data/javaprefs  # 这里根据自己的配置修改内存大小
      - NEXUS_CONTEXT=/
    ports:
      - '8081:8081'
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./mnt/nexus-data:/nexus-data

networks:
  default:
    name: home-server  # 确保已创建这个网络
    external: true  # 使用外部网络

docker compose up -d 创建容器

Done!

12 个赞

:tieba_087: :tieba_087: :bili_057: :bili_057:

3 个赞

久违的发docker帖

21 个赞

正好回家一趟 折腾了一下

#Docker添加

哇,是威震天耶

生产环境一直用 PostgreSQL 。没有问题

技术贴收藏学习一下 :tieba_003:

大佬有数据库是 pg 的 docker compose 配置吗 :bili_057:

:bili_057: 捉到 jay 佬

太强了! :tieba_087:

3b 太强了!

技术贴收藏学习一下 :tieba_003:

很详细的教学

使用 pg 需要 nexus pro 的认证许可。我用 k8s 部署 HA 靠可用的。
不过类似的配置:

version: '3'

services:

  nexus:
    image: sonatype/nexus3:latest
    ports:
      - "8081:8081"
    environment:
      - INSTALL4J_ADD_VM_PARAMS=-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=/nexus-data/javaprefs
      - NEXUS_DATASTORE_ENABLED=true
      - NEXUS_DATASTORE_NEXUS_JDBCURL=jdbc:postgresql://postgres:5432/nexus
      - NEXUS_DATASTORE_NEXUS_USERNAME=nexus
      - NEXUS_DATASTORE_NEXUS_PASSWORD=nexus_password
    volumes:
      - nexus-data:/nexus-data
    depends_on:
      - postgres

  postgres:
    image: bitnami/postgresql:latest
    environment:
      - POSTGRESQL_DATABASE=nexus
      - POSTGRESQL_USERNAME=nexus
      - POSTGRESQL_PASSWORD=nexus_password
    volumes:
      - postgres-data:/bitnami/postgresql
    ports:
      - "5432:5432"

volumes:
  nexus-data:
  postgres-data:

networks:
  default:
    name: nexus-network

环境变量参考: Installing Nexus Repository Pro with a PostgreSQL Database
postgresql 容器可以用:https://hub.docker.com/r/bitnami/postgresql

:xhs_033: :xhs_033: :xhs_033: 太强了大佬

还要许可啊 :tieba_092: 个人玩玩不知道能不能找到学习版

最近升级了docker版本的nexus ,专门登录帐号感谢楼主给的方法。
核心有一个细节楼主没提到。
我经过反复测试。

curl -s -L -O https://download.sonatype.com/nexus/nxrm3-migrator/nexus-db-migrator-3.70.2-01.jar

这个jar的版本 需要和 nexus镜像版本匹配。
经过我查询,目前最新适配 OrientDB 的最后版本是 3.70.3版本。
所以 适配这个版本的jar应为

https://download.sonatype.com/nexus/nxrm3-migrator/nexus-db-migrator-3.70.3-01.jar

这个细节需要特别的注意

参考资料:

  1. 3.70.x Downloads (for OrientDB)

谢谢佬的指正,我补充一下

@neo 始皇帮忙更新一下编辑权限 :bili_062: :bili_110:

太强了!!!