Installation Nexus 3

De EjnTricks
Révision de 24 octobre 2018 à 16:18 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

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éé.


Download-icon.png Téléchargement

L'application est téléchargée, en version 3.1.0-04, dans le répertoire /var/opt/nexus.

#sudo wget -O /var/opt/nexus/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


System-Install-icon.png Installation

L'application va être installée sous /var/opt/syspass, avec modification de l'emplacement racine pour être 3.1.0-04.

#sudo tar --transform 's/^nexus-3.1.0-04/3.1.0-04/' -C /var/opt/nexus -xzf /var/opt/nexus/nexus-3.1.0-04-unix.tar.gz

Le fichier téléchargé peut être supprimé.

#sudo rm /var/opt/nexus/nexus-3.1.0-04-unix.tar.gz


Icon File Owner.png Propriétaire fichiers

L'installation a été réalisée avec le compte root. Il est préférable de donner la propriété au compte de démarrage du serveur web, soit www-data dans le cadre de cette installation.

#sudo chown -R nexus:nexus /var/opt/nexus/3.1.0-04
#sudo chown -R nexus:nexus /var/opt/nexus/sonatype-work/nexus3


Icon ACL.png Sécurisation

Les droits mis en place seront uniquement pour le compte d'exécution du serveur Web, soit www-data dans le cadre de cette installation.

#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épertoires 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.
  • $data_dir/nexus3/etc/nexus.properties fichier de spécialisation de l'instance, permettant de surcharger les configuration du fichier etc/nexus-default.properties.

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.

Les fichiers du répertoire bin sont copiés 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


Le fichier nexus.properties est utilisé pour spécialiser la configuration de l'instance. Dans le cadre de cet article, elle sera démarrée en parrallèle d'une instance 2.14.1. Il est donc nécessaire de modifier le numéro de port pour éviter les conflits. De plus, le context sera modifié en spécifiant nexus. Le fichier se situe dans le répertoire $data_dir/nexus3/etc, soit /var/opt/nexus/sonatype-work/nexus3/etc. Il se peut que celui-ci n'existe pas encore, dans ce cas il faut le créer.

#sudo mkdir -p /var/opt/nexus/sonatype-work/nexus3/etc
#sudo chown nexus:nexus /var/opt/nexus/common/etc
#sudo chmod 775 /var/opt/nexus/common/etc

IL n'est nécessaire de spécifier que les valeurs modifiés dans ce fichier, soit dans le cadre de cette installation les paramètres suivants.

  • application-port numéro de port du serveur;
  • nexus-context-path la racine des URLs.
#sudo echo "" >> /var/opt/nexus/sonatype-work/nexus3/etc/nexus.properties
#sudo echo "#----- CUSTOM -----" >> /var/opt/nexus/sonatype-work/nexus3/etc/nexus.properties
#sudo echo "application-port=8082" >> /var/opt/nexus/sonatype-work/nexus3/etc/nexus.properties
#sudo echo "nexus-context-path=/nexus" >>  /var/opt/nexus/sonatype-work/nexus3/etc/nexus.properties
#sudo chown nexus:nexus /var/opt/nexus/sonatype-work/nexus3/etc/nexus.properties
#sudo chmod 664 /var/opt/nexus/sonatype-work/nexus3/etc/nexus.properties


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

Attention, contrairement aux précédentes version, 2.X, il n'y a plus de configuration de l'emplacement du fichier PID. Le mode de démarrage a été entièrement revu.

Run-icon.png Service init.d

Historiquement, les services Linux sont déclarés dans le répertoire /etc/init.d. Il suffit de créer le fichier /etc/init.d/nexus pour référencer Nexus en tant que service, 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

Warning-icon.png Attention, en utilisant ce principe, il faut modifier le fichier bin/nexus.rc pour indiquer le compte utilisé lors du démarrage de l'application, soit nexus dans le cadre de cette instance.

#run_as_user=""
run_as_user="nexus"

A noter que le script de démarrage contient toutes les instructions du system init.d et il serait possible de placer un lien sur celui-ci dans le répertoire /etc/init.d.

Start-icon.png Service systemd

Le système init.d est progressivement remplacé par l’outil systemd qui utilise un autre système de configuration. Il suffit de créer le fichier /lib/systemd/system/nexus.service avec le contenu suivant.

[Unit]
Description=Nexus

[Service]
RuntimeDirectory=nexus
Type=forking
User=nexus
Group=nexus
ExecStart=/var/opt/nexus/installed/bin/nexus start
ExecStop=/var/opt/nexus/installed/bin/nexus stop
ExecReload=/var/opt/nexus/installed/bin/nexus restart
Restart=always

[Install]
WantedBy=multi-user.target

Warning-icon.png Un sous processus est créé lors du démarrage de l'application. Le script nexus se termine après exécution. Donc il est important de spécifier la valeur forking dans le paramètre Type. Ainsi systemd ne considérera pas que le service s'est arrêté.

Avec le type forking, il est généralement conseillé d'indiquer l'emplacement du fichier PID, qui est configuré dans la variable PIDFile. Cependant, il n'existe pas de configuration dans cette version pour indiquer l'emplacement. C'est pourquoi le paramètre n'est pas mis en place dans la déclaration du service.

Contrairement à la méthode avec init.d, il n'est pas nécessaire de spécifier le compte d'exécution dans le fichier nexus.rc. Ceci est pris en compte dans la déclaration du service.

Il est nécessaire de recharger les configurations générées.

#sudo systemctl daemon-reload

Puis le service doit être activé.

#sudo systemctl enable nexus
Created symlink /etc/systemd/system/multi-user.target.wants/nexus.service → /lib/systemd/system/nexus.service.


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


Update icon.png Update

Les différentes versions sont disponibles depuis la release note, https://support.sonatype.com/hc/en-us/articles/218637467-Download-Nexus-Repository-Manager-3.

3.1.0 → 3.2.0 3.2.0 → 3.2.1 3.2.1 → 3.3.0 3.3.0 → 3.3.1 3.3.1 → 3.3.2
3.3.2 → 3.4.0 3.4.0 → 3.5.0 3.5.0 → 3.5.1 3.5.1 → 3.5.2 3.5.2 → 3.6.0
3.6.0 → 3.6.1 3.6.1 → 3.6.2 3.6.2 → 3.7.0
Il est recommandé d'installer la version 3.7.1.
3.7.0 → 3.7.1 3.7.1 → 3.8.0
3.8.0 → 3.9.0
Apporte enfin l'upload d'artéfact.
3.9.0 → 3.10.0 3.10.0 → 3.11.0 3.11.0 → 3.12.0 3.12.0 → 3.12.1
3.12.1 → 3.13.0 3.13.1 → 3.14.0


Viewer icon.png Voir aussi

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


Release Notes: https://help.sonatype.com/repomanager3/release-notes/2016-release-notes#id-2016ReleaseNotes-RepositoryManager3.1.0


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