Logo
  • NOTES
  • BLOG
  • OSS
  • TALKS
  • WIKI
  • ABOUT
GITHUB

Sonatype Nexus Repository: OrientDB a H2

Tags
nexusdocker
Cover
Date
2024/08/15

Sonatype Nexus je univerzální uložiště pro APT, NPM, Docker a spoustu dalších balíčků. Funguje cloudově, dá se i selfhostovat.

image

Pokud hledáte privátní uložiště, doporučuje Nexus vyzkoušet. Pokud byste ho snad chtěli vykoušet provozovat v Dockeru, což osobně delám už zhruba 5 let, tak můžete vyzkoušet můj předpřipravný Docker image. Řeší pár specialit, jako třeba oprávnění, takže nemusíte nic řešit.

docker run \
	-it \
	--rm \
	-p 8081:8081 \
	-v $(pwd)/data:/nexus-data \
	dockette/nexus:3.71.0-java17-ubi
https://github.com/dockette/nexus

Od verze 3.71.0 došlo celkem k revoluci, kdy interně kompletně odstranili OrientDB a podporovaná databáze je pouze H2 a nebo Postgres. Postgres bohužel až v placené verzi.

Od Sonatype existuje celkem dobře popsaný migrační manuál. Kdo by přesto tápal jak to provést, hodím sem pár tipů.

Zdroje

  • Migrační manuál → https://help.sonatype.com/en/migrating-to-a-new-database.html
  • Migrátor → https://help.sonatype.com/en/orientdb-downloads.html
  • Issues → https://github.com/sonatype/nexus-public/issues/451, https://github.com/sonatype/nexus-public/issues/452, https://github.com/sonatype/nexus-public/issues/449

Kroky

  1. Aktualizovat Nexus na poslední verzi 3.70.x.
  2. Provést manuální zálohu (Admin → Tasks → Admin - Export databases for backup).
    1. Nastavit location např. na /nexus-data/db-backup.
    2. image
  3. Stopnout běžící Nexus (ale to je asi jasný, že jo).
  4. Stáhnout příslušný migrátor. Pozor na to, aby to byla verze 3.70.x.
    1. Stáhnout do složky, kde máte data a nebo docker-compose.yml.
    2. sudo curl -L https://download.sonatype.com/nexus/nxrm3-migrator/nexus-db-migrator-3.70.1-03.jar -o nexus-db-migrator.jar
  5. Spustit Nexus s přepsaným entrypointem. Ať můžeme spustit migrátor.
    1. Spustíme docker kontejner.
    2. docker run \
      	-it \
      	--rm \
      	-v $(pwd)/data/nexus:/nexus-data \
      	-u root \
      	--entrypoint bash \
      	dockette/nexus:3.71.0-java17-ubi
    3. Ve složce /nexus-data/db-backup , kde máme uložené zálohy z předchozího kroku, spustíme migrátor.
    4. java \
      	-Xmx16G \
      	-Xms16G \
      	-XX:+UseG1GC \
      	-XX:MaxDirectMemorySize=28672M \ 
      	-jar nexus-db-migrator.jar \ 
      	--migration_type=h2
  6. Výstupní soubor /nexus-data/db-backup/nexus.mv.db přesuneme do /nexus-data/db/nexus.mv.db a nastavíme oprávnění sudo chown 200:200 nexus.mv.db.
  7. Upravíme /nexus-data/etc/nexus.properties soubor.
  8. nexus.datastore.enabled=true
  9. Et voilà, máme hotovo. Spustíme Sonatype Nexus standardním způsobem.

Troubleshooting

Verze 3.71.x má aktuálně problém s autoincrementem v H2 databázi. Lze to jednoduše vyřešit přes script.

  1. Vytvořit migrator.sh script.
  2. Spustit Nexus s přepsaným entrypointem.
  3. docker run \
    	-it \
    	--rm \
    	-v $(pwd)/data/nexus:/nexus-data \
    	-v $(pwd)/migrator.sh:/migrator.sh \
    	-u root \
    	--entrypoint bash \
    	dockette/nexus:3.71.0-java17-ubi

    Spustit sh migrator.sh a výstup bude zhruba následovný.

image

Doufám, že vám Nexus bude sloužit dobře. Dejte vědet.

Logo

© f3l1x

GitHubLinkedInXYouTube
#!/bin/bash

NEXUS_BIN=/opt/sonatype/nexus
NEXUS_DATA=/nexus-data
h2sql() {
    echo "> $@" >&2
    java -cp "$NEXUS_BIN"/system/com/h2database/h2/*/h2-*.jar org.h2.tools.Shell -url jdbc:h2:"$NEXUS_DATA"/db/nexus -sql "$@"
}

schema=$(h2sql "SCRIPT NODATA")
echo "$schema" | while read line; do
    if [[ $line =~ ^CREATE\ CACHED\ TABLE\ \"PUBLIC\"\.\"([^\"]+)\" ]]; then
        tbl="${BASH_REMATCH[1]}"
    elif [[ $line =~ ^\"([^\"]+)\"\ .*\ GENERATED\ BY\ DEFAULT ]]; then
        col="${BASH_REMATCH[1]}"
        h2sql "ALTER TABLE $tbl ALTER COLUMN $col RESTART WITH SELECT max($col) + 1 FROM $tbl"
    fi
done