Installation Nexus 3

De EjnTricks

Cet article présente l'installation de la version 3.X de Nexus. Celle-ci n'a été réalisée que à partir de la version 3.1, car les précédentes ne proposaient pas d'outil de migration depuis les version 2.X.

Cette mise à jour s'effectue sur les mêmes principes pour la version 2.14.0.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Etude

L'installation faite va mettre en place trois "répertoires", sous /var/opt/nexus pour cet article, afin de séparer la version installée, les fichiers communs à toutes les versions (plugins, configuration) et un lien pour référencer la version active. Pour l'installation de la version 3.1.0, les répertoires sont les suivants.

  • /var/opt/nexus/3.1.0-04 : Contient les binaires de la version 3.1.0;
  • /var/opt/nexus/common : Contient tous les fichiers communs, comme les plugins utilisés;
  • /var/opt/nexus/installed : Lien vers la version utilisée, soit /var/opt/nexus/3.1.0-04.


User-icon.png Compte de service

Cette installation ayant pour but d'être exécutée sous la forme d'un service, le compte root va être employé et ce n'est pas très sécurisé. Or il est possible de spécifier un compte utilisateur dans le script de démarrage de l'application. A l'instar d'application comme Tomcat, un compte technique est mis en place et sera exploité.

Attention le bash /bin/false est généralement utilisé pour les comptes de service. Du fait de l'implémentation du script de démarrage, il est nécessaire que le bash associé au compte soit un "vrai" bash, dans ce cas /bin/bash.

Le compte de service ne nécessite aucun répertoire home, et un groupe de même nom est créé.

#sudo adduser --shell /bin/bash --system --no-create-home --group nexus
Ajout de l'utilisateur système « nexus » (UID 116) ...
Ajout du nouveau groupe « nexus » (GID 128) ...
Ajout du nouvel utilisateur « nexus » (UID 116) avec pour groupe d'appartenance « nexus » ...
Le répertoire personnel « /home/nexus » n'a pas été créé.


System-Install-icon.png Download-icon.png Téléchargement et installation

#sudo wget -O /tmp/nexus-3.1.0-04-unix.tar.gz https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.1.0-04-unix.tar.gz
#sudo tar -C /var/opt/nexus -xzf /tmp/nexus-3.1.0-04-unix.tar.gz


Icon-Configuration-Settings.png Déploiement

Il faut dans un premier temps organiser les binaires sous /var/opt/nexus/2.14.1.

#sudo mv /var/opt/nexus/nexus-3.1.0-04 /var/opt/nexus/3.1.0-04
#sudo chown -R nexus:nexus /var/opt/nexus/3.1.0-04
#sudo chown -R nexus:nexus /var/opt/nexus/sonatype-work/nexus3
#sudo chmod -R go-rwx /var/opt/nexus/3.1.0-04

Les droits sont positionnés pour que seul le compte nexus puisse accéder aux fichiers. A noter que le répertoire /var/opt/nexus/sonatype-work/nexus3 est modifié et non pas /var/opt/nexus/sonatype-work. En effet, cette installation est réalisée sur un serveur disposant déjà d'une instance, et le répertoire existait déjà.


Multiples-icon.png Gestion des versions

Le déploiement de nouvelles versions doit être le plus simple possible. Les scripts de service ne doivent pas contenir l'emplacement de l'instance, qui dans le cas de l'article contient le numéro de version, mais plutôt un lien générique qui sera modifié. Ce lien est créé sous /var/opt/nexus/installed. Ce lien a été mis en place lors de l' installation en version 2. Il est donc supprimé avant d'être recréé.

#sudo rm /var/opt/nexus/installed
#sudo ln -s /var/opt/nexus/3.1.0-04 /var/opt/nexus/installed
#sudo chown -h nexus:nexus /var/opt/nexus/installed


Share-icon.png Fichiers communs

Afin d'éviter la reprise des fichiers de paramétrages lors des montées de versions, les répetoires sont externalisés dans un répertoire /var/opt/nexus/commondans lequel l’arborescence standard est reproduite pour plus de clarté.

  • bin/nexus.vmoptions fichier de configuration de l'instance.

Dans un premier temps, les répertoires sont créés sous common avec recopie des fichiers de l'instance.

#sudo mkdir -p /var/opt/nexus/common/bin/
#sudo chown -R nexus:nexus /var/opt/nexus/common

A noter que le répertoire /var/opt/nexus/common a déjà été lors de l'installation en service d'une instance en version 2.X.

Le fichier est copié dans le répertoire externalisé et un lien est posé dans l'instance 3.1.0.

#sudo mv /var/opt/nexus/3.1.0-04/bin/nexus.vmoptions /var/opt/nexus/common/bin/
#sudo ln -s /var/opt/nexus/common/bin/nexus.vmoptions /var/opt/nexus/3.1.0-04/bin/nexus.vmoptions
#sudo chown -h nexus:nexus /var/opt/nexus/3.1.0-04/bin/nexus.vmoptions


Run-icon.png Script démarrage

Il est souhaité de modifié le compte d'exécution avec nexus préalablement créé. Ceci s'effectue dans le fichier bin/nexus.rc.

#run_as_user=""
run_as_user="nexus"


Icon-log.png Fichiers log

Par défaut, les logs sont placés dans le répertoire sonatype-work/nexus3/logs.

La définition de ces emplacements se situe dans les fichiers logback-access.xml et logback.xml, au niveau du répertoire etc/logback.

Le premier fichier contient le paramétrage de la log des accès.

<?xml version="1.0"?>
<configuration>
  <appender name="request.logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${karaf.data}/log/request.log</File>
    <Append>true</Append>
    <encoder class="org.sonatype.nexus.pax.logging.AccessPatternLayoutEncoder">
      <pattern>%clientHost %l %user [%date] "%requestURL" %statusCode %bytesSent %elapsedTime</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${karaf.data}/log/request-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
      <maxHistory>90</maxHistory>
    </rollingPolicy>
  </appender>

  <appender-ref ref="request.logfile"/>
</configuration>

Le second fichier est plus complet et contient la définition pour la trace nexus.log

  <appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${karaf.data}/log/nexus.log</File>
    <Append>true</Append>
    <encoder>
      <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSSZ"} %-5p [%thread] %mdc{userId:-*SYSTEM} %c - %m%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${karaf.data}/log/nexus-%d{yyyy-MMdd}.log.gz</fileNamePattern>
      <maxHistory>90</maxHistory>
    </rollingPolicy>
  </appender>

Afin de centraliser les logs, les messages sont redirigés vers /var/log/nexus3 en mettant en place des liens symboliques. Ceci permet de ne pas modifier les fichiers de configurations, limitant les modifications lors des futures montées de version.

#sudo mkdir -p /var/log/nexus3
#sudo chown nexus:nexus /var/log/nexus3
#sudo rm -rf /var/opt/nexus/sonatype-work/nexus3/log
#sudo ln -s /var/log/nexus3 /var/opt/nexus/sonatype-work/nexus3/log
#sudo chown -h nexus:nexus /var/opt/nexus/sonatype-work/nexus3/log


Icon-Configuration-Settings.png Variable système

L'application utilise une fonctionnalité propre à Java afin de stocker les préférences utilisateurs, ce qui s'effectue dans le répertoire Home de l'utilisateur. Comme le script est exécuté avec un compte technique, créé sans Home, le message d'erreur suivant est présent dans le fichier de log.

2016-11-11 11:34:06,437+0100 WARN  [Timer-0] *SYSTEM java.util.prefs - Could not lock User prefs.  Unix error code 2.
2016-11-11 11:34:06,439+0100 WARN  [Timer-0] *SYSTEM java.util.prefs - Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.

Le fichier nexus.vmoptions, externalisé sous /var/opt/nexus/common/bin est modifié afin d'ajouter l'argument -Duser.home=/var/opt/nexus/sonatype-work/home3.

-Xms1200M
-Xmx1200M
-XX:MaxDirectMemorySize=2G
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UnlockDiagnosticVMOptions
-XX:+UnsyncloadClass
-XX:+LogVMOutput
-XX:LogFile=../sonatype-work/nexus3/log/jvm.log
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
-Dkaraf.data=../sonatype-work/nexus3
-Djava.io.tmpdir=../sonatype-work/nexus3/tmp
-Duser.home=../sonatype-work/home3
-Dkaraf.startLocalConsole=false

A noter que pour rester homogène, l'emplacement configuré est en chemin relatif.


Motpasse-utilisateur.png Compte administrateur

Update icon.png Importation données Nexus 2

Configuration App Web-Icon.png Publication Apache

Lors de l'installation de la version 2 en service, la configuration Apache pointait sur le serveur embarqué.

        ProxyPass /nexus http://localhost:8081/nexus
        ProxyPassReverse /nexus http://localhost:8081/nexus
        <Proxy http://localhost:8081/nexus>
                Order allow,deny
                Allow from all
        </Proxy>

Lors de la montée de version, le numéro de port est spécifié à 8082 et est conservé. Il suffit donc de modifier le numéro de port dans la configuration.

        ProxyPass /nexus http://localhost:8082/nexus
        ProxyPassReverse /nexus http://localhost:8082/nexus
        <Proxy http://localhost:8082/nexus>
                Order allow,deny
                Allow from all
        </Proxy>


Start-icon.png Installation service

Historiquement, les services Linux sont déclarés dans le répertoire /etc/init.d. Ce système est progressivement remplacé par l’outil systemd qui utilise un autre système de configuration. Cependant, systemd est capable de générer sa propre configuration depuis les scripts dans /etc/init.d.

Lors de l' installation du service pour la version 2, le fichier /etc/init.d/nexus a été créé en référencant l'exécutable /var/opt/nexus/installed/bin/nexus. Le script est conservé avec le contenu suivant.

#!/bin/sh
#
# rc file for Nexus
#
# chkconfig: 345 96 10
# description: Nexus system (www.sonatype.org/nexus/)
#
### BEGIN INIT INFO
# Provides: nexus
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: Nexus
# Description: Nexus system (www.sonatype.org/nexus/)
### END INIT INFO

/var/opt/nexus/installed/bin/nexus $*

exit $?

Le fichier doit être exécutable.

#sudo chmod 755 /etc/init.d/nexus

Le service est installé avec les paramètres par défaut.

#sudo update-rc.d nexus defaults

L’utilisation de systemd nécessite de recharger les configurations générées.

#sudo systemctl daemon-reload


Configuration-icon.png Configuration Maven

La mise à disposition de cette nouvelle version nécessite la modification des instances Maven, l'URL d'accès aux dépots étant modifiée. Dans le cadre de cette installation, contexte racine nexus accessible sur la machine 192.168.1.32, l'URL d'accès devient du type http://192.168.1.5/nexus/repository/public. La configuration Maven est alors la suivante.

  <mirrors>
    <mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <name>Local nexus.</name>
<!--
      <url>http://192.168.1.32/nexus/content/groups/public</url>
-->
      <url>http://192.168.1.32/nexus/repository/public</url>
    </mirror>
  </mirrors>

  <profiles>
    <profile>
      <id>nexus</id>
      <!-- Enable snapshots for the built in central repo to direct -->
      <!-- all requests to nexus via the mirror -->
      <repositories>
        <repository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>

  <activeProfiles>
    <!-- make the profile active all the time -->
    <activeProfile>nexus</activeProfile>
  </activeProfiles>

Dans le cadre de cette installation, la modification est réalisée car les applications clientes sont maitrisées. Cependant, il existe le mode Legacy URL Paths qui permet de conserver les anciennes URLs comme expliqué dans la documentation officielle accessible depuis ce lien https://books.sonatype.com/nexus-book/reference3/install.html#config-legacy-url


Viewer icon.png Voir aussi

Documentation officielle: https://books.sonatype.com/nexus-book/reference3/install.html


https://books.sonatype.com/nexus-book/reference3/upgrading.html