星期日, 10月 20, 2024

Sonatype Nexus3 資料庫遷移

Nexus3 在 3.71 以後,決定不使用 OrientDB 了,要改用 h2 或 postgresql。

postgresql 是需要付費的,所以免費的選擇是使用 h2。

官方提供了遷移的方法:https://help.sonatype.com/en/orient-3-70-java-8-or-11.html

這邊整理一下我遇到的情況,我的環境是 archlinux ,安裝 nexus-oss 以後,程式放在 /usr/lib/nexus-oss,資料跟自訂設定都放在 /var/lib/nexus-oss。

第一步是先做備份。

我先建立 /var/lib/nexus-oss/backup 目錄,然後設定 owner 為 nexus。接著登入 nexus,進入 Admin,新增 Task 做備份 (請依照官方文件操作)。我把備份檔案放在 /var/lib/nexus-oss/backup 。

第二步是停止服務: sudo systemctl stop nexus-oss

第三步是進行 Migrate 。新版本要求使用 Java 11 以後的版本,所以這邊要注意,得使用跟啟動 nexus3 相應的 Java 版本來執行 Migrate。

ArchLinux 的 Java 版本可從 /usr/lib/jvm 下看到,或是用 archlinux-java status 指令察看,目前我的 nexus-oss 是用 java 11 啟動。

先切到 /var/lib/nexus-oss/backup 目錄下,執行以下指令

sudo /usr/lib/jvm/java-11-openjdk/bin/java -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar /usr/lib/nexus-oss/bin/nexus-db-migrator.jar --migration_type=h2 --force=true

執行完成以後,會出現 nexus.mv.db 這個檔案。

P.S. 我本想用 Java 17 來做,但會有以下錯誤,說 Migrate fail:

module java.base does not "exports sun.nio.ch" to unnamed module

後來查了一些文章,才想到應該要用相應的 Java 版本。

第四步,把 nexus.mv.db 複製到 /var/lib/nexus-oss/db 目錄下,並設定 owner 為 nexus。

第五步,修改 /var/lib/nexus-oss/etc/nexus.properties ,增加

nexus.datastore.enabled=true

最後重新啟動,就可以了。

我後續是遇到密碼錯誤的情況,這邊再參考這篇 KB 來做:https://support.sonatype.com/hc/en-us/articles/213467158-How-to-reset-a-forgotten-admin-password-in-Sonatype-Nexus-Repository-3

我本來是依照 KB 作法,3個步驟都做了,但我後來發現只要做 Check for existing admin user 這個步驟就可以,只需要執行更新 security_user 資料表格的動作。

沒有留言: