Docker 容器部署的Nexus 3 实例版本更新
技术 Nexus Docker Postgres 44

起因

Nexus 3.77.2 以上版本支持免费版本使用外部Postgres 数据库了,故想要升级。

现状

Nexus 3版本为3.68.1,部署在docker 容器中。
部分docker-compose.yaml内容如下:

services:
  nexus:
    container_name: nexus3
    image: sonatype/nexus3:3.68.1-java11
    restart: unless-stopped
    volumes:
      - "./Nexus/nexus-data/:/nexus-data/"
      - "/mnt/tm/Backup/Nexus3/:/nexus-backup/"
    env_file:
      - ./env_file/TimeZone.env
      - ./env_file/nexus3.env
    networks:
      network-infrastructure:
        ipv4_address: 172.18.22.1
        aliases:
          - infrastructure-nexus3
      network-database:
        ipv4_address: 172.19.22.1

升级过程

  1. 将nexus 3 版本升级到3.70.x
  2. Nexus 由原OrientDB 数据库迁移到内置H2 数据库
  3. 将Nexus 3 版本升级到3.77.2+
  4. Nexus 由内置H2 数据库迁移到外置Postgres

Nexus 由原OrientDB 数据库迁移到内置H2 数据库

  1. 更新Nexus3 版本到latest-3.70.x。可以直接升级,将docker-compose.yaml 中版本修改为latest-3.70.x再启动即可。
  2. 下载数据库迁移工具。
  3. 备份数据库后停机docker stop nexus3
  4. 执行数据库迁移工具
    • 需要java8 或java11 运行环境
    • 进入备份文件夹所在目录
    • 执行java -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar nexus-db-migrator-*.jar --migration_type=h2
  5. 将生成的nexus.mv.db 文件移动到$data-dir/db
    • 如果使用root 用户移动,需要注意nexus.mv.db 文件属主应为 200chown 200 $data-dir/db/nexus.mv.db
  6. 修改$data-dir/etc/nexus.properties文件。增加一行nexus.datastore.enabled=true
  7. 重启nexus

Nexus 由内置H2 数据库迁移到外置Postgres

  1. 更新Nexus3 版本到最新版本(当前是3.81.1)。可以直接升级,将docker-compose.yaml 中版本修改为3.81.1再启动即可。
  2. 下载数据库迁移工具。
  3. 运行备份数据库任务后停机docker stop nexus3
  4. 将备份后到zip 文件移动到$data-dir/db 目录
  5. 初始化postgres 数据库
    # 创建用户
    CREATE ROLE nexus LOGIN PASSWORD 'string';
    
    # 创建数据库
    CREATE DATABASE nexus ENCODING 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TEMPLATE template0 OWNER nexus;
    
    # 创建scheme
    CREATE SCHEMA nexus;
    
    # 启用扩展(在nexus 数据库连接下)
    CREATE EXTENSION pg_trgm SCHEMA public;
    
  6. 执行数据库迁移工具
    • 需要在$data-dir/db 目录执行
    • 可以使用Java 17 环境
    • 执行java -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar nexus-db-migrator-*.jar --migration_type=h2_to_postgres --db_url="jdbc:postgresql://<database URL>:<port>/nexus?user=postgresUser&password=secretPassword&currentSchema=nexus"
    • 上方<database URL><port>postgresUsersecretPassword等参数自行修改
  7. 数据库重建索引。执行SQL:VACUUM(FULL, ANALYZE, VERBOSE);
  8. 修改nexus.env 文件,增加以下行,其中PASSWD 等参数需要自行修改
    NEXUS_DATASTORE_NEXUS_JDBCURL="jdbc:postgresql://172.19.19.2:5432/nexus?user=nexus&password=PASSWD&currentSchema=nexus"
    NEXUS_DATASTORE_NEXUS_USERNAME="nexus"
    NEXUS_DATASTORE_NEXUS_PASSWORD="PASSWD"
    
  9. 重启nexus。shell 执行docker compose up -d

参考文档

Upgrading to Nexus Repository 3.71.0 and Beyond
Migrating to a New Database
Install Nexus Repository with a PostgreSQL Database

Docker 容器部署的Nexus 3 实例版本更新
https://www.persipa.site/2025/xBCT67D3
作者
Persipa
发布于
更新于
许可