Внимание! Данный материал размещен 28.01.2025. Информация может быть не актуальна на данный момент! Будьте, пожалуйста, внимательны!
Всем привет.
Потребовалось обновить OSS Nexus 3 до последней, на момент написания заметки, версии — 3.76.0
Nexus — это система для организации репозиториев будь то для docker или чего-то другого.
Начиная с версии 3.71 отказались от OrientDB и надо выполнить миграцию на H2 или Potgresql. Так же больше не поддерживается Java 8 или 11 версии.

Начнем…
!!!НЕ забывайте про резервное копирование Nexus перед началом обновления и\или любые другими действиями, которые могут привести к повреждению\потере данных!!!
Подготовка.
На момент заметки у нас была установлена вот такая версия:

Для начала обновимся до последней версии, которая еще поддерживает OrientDB — 3.70.3 (ссылка внизу на всякий случай).
Скачать архив:
1 | wget https://download.sonatype.com/nexus/3/nexus-3.70.3-01-unix.tar.gz |
Распаковать:
1 | tar xf nexus-3.70.3-01-unix.tar.gz |
можно добавить ключ -v для вывода в консоль.
Теперь переместим распакованный каталог, где находится Nexus. У меня это /opt:
1 | sudo mv nexus-3.70.3-01 /opt/ |
Тут же у меня символическая ссылка

Остановим службу:
1 | sudo systemctl stop nexus |
Удалим ссылку:
1 | sudo rm nexus |
и создадим новую:
1 | sudo ln -s /opt/nexus-3.70.3-01 /opt/nexus |
проверим:

Теперь или скопируем файлы конфигурации из прошлой версии, либо отредактируем — кому как удобно. Файлы:
- bin/nexus.rc
- bin/nexus.vmoptions
Назначим права на каталоги:
1 | sudo chown -R nexus:nexus /opt/nexus /opt/sonatype-work |
Запустим сервис:
1 | sudo systemctl start nexus |
Проверим статус сервиса:
1 | sudo systemctl status nexus |

Проверим в браузере:

Как посмотреть что используется OrientDB?
Залогинимся под админской учеткой и перейдем:

Support —> System Information

И тут либо поискать, либо промотать и найти nexus.orient.enabled

Т.к. новая версия хочет Java 17, то надо установить, если еще не установлена:
1 | sudo apt install openjdk-17-jdk |
И проверить:
1 | java --version |

Миграция БД OrientDB -> H2
Теперь надо сделать миграцию БД с Orinet в Postgresql или H2.
Т.к. для миграции на PostgreSQL надо иметь PRO версию, то буду пробовать на H2, хотя с ней никогда не работал ранее.
Для начала сделаем резервную копию БД, т.к. это одно из условий миграции:
Perform a full backup using the backup task.
Copy the backup to a clean working location on a different filesystem so that any extraction doesn’t impact the existing production system.
Это делается в самом Nexus: Configuration (шестеренка) —> Tasks —> Create task

Жмём на Create task и выбираем — Admin — Export databases for backup

Тут указываем:
- Task name: — название задачи. Произвольное, понятное для вас;
- Backup location: — расположение где будет лежать резервная копия (я заранее подготовил каталог);
- Task frequency: — когда выполнять. Я указал Manual.
- Остальные параметры по своему усмотрению.

Жмём Create task.
Вернулись к списку заданий. Теперь можем перейти в новое задание и запустить его:


И увидим, что задача запущена:

И можно посмотреть, что создаются резервные копии:
1 | ls -l /mnt/nexus_blob/backup/nexus_orient_db/ |

А в списке задач будет наше задание в состоянии выполнения:

Ждем выполнения. Потом задание должно перейти в статус Waiting и результат Ok:

Скачаем утилиту миграции:
1 | wget https://download.sonatype.com/nexus/nxrm3-migrator/nexus-db-migrator-3.70.3-01.jar |
Проверим версию Java.
1 | java --version |
Должна быть 8 или 11 во время миграции БД. Потом можно будет изменить на 17-ю, т.к. новая версия Nexus не поддерживает 8-ю или 11-ю версию. Изменить можно так:
1 | sudo update-alternatives --config java |
И выбрать 8-ю версию. Потом еще раз проверить командой:
1 | java -version |

Одно из условий миграции звучит так:
If migrating off of OrientDB, you will run the database migrator utility from this location.
Стало быть скопируем или переместим утилиту к БД:
1 | cp nexus-db-migrator-3.70.3-01.jar /opt/sonatype-work/nexus3/orient |
Запустим миграцию:
1 2 3 | java -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M \ -jar nexus-db-migrator-*.jar \ --migration_type=h2 |
До запуска надо оставить nexus, но если этого не сделать, то будет запрос на его установку:

И утилита написала вот такую ошибку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 09:58:55 [main] WARN c.s.n.d.migrator.MigratorApplication - Please ensure any Nexus Repository instance has been gracefully shut down before proceeding. 09:58:55 [main] INFO c.s.n.d.migrator.MigratorApplication - Do you want to continue [y/n]? y 10:00:38 [main] INFO c.s.n.d.migrator.MigratorApplication - --content_migration parameter is absent. Setting it to true. 10:00:38 [main] INFO c.s.n.d.migrator.MigratorApplication - Force parameter wasn't found. Setting it to false by default. 10:00:38 [main] INFO c.s.n.d.migrator.MigratorApplication - ------------------------------------------------------------ 10:00:38 [main] INFO c.s.n.d.migrator.MigratorApplication - Java version: Private Build 1.8.0_432 10:00:38 [main] INFO c.s.n.d.migrator.MigratorApplication - JVM arguments: -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M 10:00:38 [main] INFO c.s.n.d.migrator.MigratorApplication - Migrator arguments: --migration_type=h2 --content_migration=true --export_json=false --force=false 10:00:38 [main] INFO c.s.n.d.migrator.MigratorApplication - ------------------------------------------------------------ 10:00:38 [main] INFO c.s.n.d.migrator.MigratorApplication - Starting MigratorApplication v3.70.3-01 using Java 1.8.0_432 on worker-server with PID 149216 (/opt/sonatype-work/nexus3/orient/nexus-db-migrator-3.70.3-01.jar started by root in /opt/sonatype-work/nexus3/orient) 10:00:38 [main] INFO c.s.n.d.migrator.MigratorApplication - No active profile set, falling back to 1 default profile: "default" 10:00:41 [main] INFO o.s.b.c.r.s.JobRepositoryFactoryBean - No database type set, using meta data indicating: H2 10:00:41 [main] INFO c.s.n.d.migrator.MigratorApplication - Started MigratorApplication in 3.148 seconds (JVM running for 106.659) 10:00:41 [main] INFO o.s.b.a.b.JobLauncherApplicationRunner - Running default command line with: [--migration_type=h2, --content_migration=true, --export_json=false, --force=false] 10:00:41 [main] INFO c.s.n.d.m.validator.PathValidator - Validating Orient directory contains .bak files: /opt/sonatype-work/nexus3/orient 10:00:41 [main] INFO o.s.b.a.l.ConditionEvaluationReportLoggingListener - Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 10:00:41 [main] ERROR o.s.boot.SpringApplication - Application run failed java.lang.IllegalStateException: Failed to execute ApplicationRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:776) at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:763) at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1317) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) at com.sonatype.nexus.db.migrator.MigratorApplication.main(MigratorApplication.java:117) Caused by: com.sonatype.nexus.db.migrator.exception.InvalidMigrationFilesException: The migration files in /opt/sonatype-work/nexus3/orient do not match the expected requirements: No backup files (*.bak) found. |
No backup files (*.bak)
Перенесу ее в каталог с бэкапами и оттуда запущу.

Большой лог под спойлером:
1 |
На выходе получилось вот такое:

Теперь надо сделать так:
Copy the resultant nexus.mv.db file to your $data-dir/db directory.
1 | cp nexus.mv.db /opt/sonatype-work/nexus3/db/ |
И поправим права:
1 | sudo chown nexus:nexus /opt/sonatype-work/nexus3/db/ -R |
Теперь такое:
Edit the $data-dir/etc/nexus.properties file and add the following line:
nexus.datastore.enabled=true
1 | sudo nano /opt/sonatype-work/nexus3/etc/nexus.properties |
У меня это выгляди так:

А теперь вообще вот такое пишут:

Проверим статус и запустим, если не запущено:
1 | sudo systemctl status nexus |

Обновление Nexus до последней версии.
Скачать новый релиз, на момент написания — 3.76.0-03:
1 | wget https://download.sonatype.com/nexus/3/nexus-3.76.0-03-unix.tar.gz |
Процесс обновления описан выше.
После переключить Java на 17-ю версию.
Для удаленного доступа к БД H2 надо:
Остановить Nexus:
1 | sudo systemctl stop nexus |
Добавить в файл — /opt/sonatype-work/nexus3/etc/nexus.properties следующие строки:
1 2 | nexus.h2.httpListenerEnabled=true nexus.h2.httpListenerPort=1234 |
Но тем не менее, БД доступна только локально. Пока, как вариант, надо пробросить туннель и в таком случае можно будет зайти.
Ссылки:
установка Nexus в Ubuntu 22.04 | сохраненная копия
If you found an error, highlight it and press Shift + Enter or to inform us.