Mise en place d’un gestionnaire de paquet centralisé (NEXUS)

Table of Content

Construction du gestionnaire avec Docker

Nous allons installer NEXUS via Docker. Il faut donc connaître un peu Docker, avoir installé les outils nécessaires. Nous les verrons au fur et à mesure.

De base, NEXUS n'est pas pas packagé avec la gestion des paquets pour les distribution se basant sur débian (apt). Il existe un plugin nexus-repository-apt. Attention, le plugin n'est pas supporté par NEXUS, prenez vos responsabilités. Le conteneur contenant le plugin apt se sert du conteneur de base pour ajouter le plugin.

Il va falloir construire le conteneur à partir des sources sur github.

Pour cela, se placer à l'endroit désiré:

cd /home/pierre/Documents

Cloner le dépot officiel du plugin nexus-repository-apt, n'oubliez pas la ligne 2

git clone https://github.com/sonatype-nexus-community/nexus-repository-apt.git
cd nexus-repository-apt/

Se placer sur le bon tag, le master n'est pas nécessairement celui que vous voullez

git checkout UpdateToThreeDotFourteen

Lancer le build, n'oubliez pas le point à la fin de la ligne

docker build -t nexus-repository-apt:3.14.0 .
  • nexus-repository-apt correspond au nom du conteneur construit localement
  • 3.14.0 correspond à la version

Lancer le conteneur

Directement via ligne de commande

docker run -d -p 8081:8081 --name nexus -v /media/raid5/nexus-data:/nexus-data nexus-repository-apt:3.14.0
  • -d, faire tourner le docker en tant que daemon
  • -p 8081:8081, mappe le port 8081 de l’hôte au port 8081 dans le conteneur
  • --name nexus, nom du conteneur
  • -v /media/raid5/nexus-data:/nexus-data, mappe le répertoire /media/raid5/nexus-data de l'hôte au répertoire/nexus-data du conteneur. Docker se débrouille pour créer et monter le répertoire dans le conteneur. Nous faisons cela pour la persistance des données
  • nexus-repository-apt:3.14.0 nexus-repository-apt correspond au nom du conteneur construit localement, 3.14.0, correspond à la version

Vérifier que tous fonctionne bien:

docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                    NAMES
36be3444152e        nexus-repository-apt:3.14.0   "sh -c ${SONATYPE_DI…"   4 weeks ago         Up 4 weeks          0.0.0.0:8081->8081/tcp   nexus

Connectez-vous à votre gestionnaire de dépôt:

localhost:8081 ou ip-hote:8081

Via SystemD

Créer un service nexus à l'aide du fichier suivant (/etc/systemd/system/nexus.service)


[Unit]
Description=nexus docker service
After=syslog.target docker.service

[Service]
ExecStartPre=-/usr/bin/docker kill nexus
ExecStartPre=-/usr/bin/docker rm nexus
ExecStart=/usr/bin/docker run \
  --name nexus \
  --publish 8081:8081 \
  --volume /media/raid5/nexus-data:/nexus-data \
  nexus-repository-apt:3.14.0
ExecStop=-/usr/bin/docker stop nexus
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
  • ExecStartPre, commande à lancer avant le start
  • --name, nom du conteneur, il doit être unique
  • --publish, mappage du port 8081 au port 8081 du conteneur, seul port ouvert du conteneur
  • --volume, mappe le répertoire /media/raid5/nexus-data de l'hôte au répertoire/nexus-data du conteneur. Docker se débrouille pour créer et monter le répertoire dans le conteneur. Nous faisons cela pour la persistance des données

Mise à jour de SystemD avec le nouveau service


systemctl daemon-reload

Permettre au service de démarrer lors du démarrage de la VM ou du PC


systemctl enable nexus.service

Mise à disposition derrière Apache

Créer le fichier de configuration d'Apache:

nano /etc/apache2/sites-available/exemple.com.conf

Contenu du fichier:

Protocols http/1.1
<VirtualHost *:80>
 ServerAdmin contact@exemple.com
 ServerName exemple.com
 Redirect permanent / https://exemple.com/
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
<virtualhost>

<virtualhost *:443="">
 ServerAdmin contact@exemple.com
 ServerName exemple.com
 Protocols h2 http/1.1

 ErrorLog ${APACHE_LOG_DIR}/error_ssl.log
 CustomLog ${APACHE_LOG_DIR}/access_ssl.log common
 LogLevel warn

 SSLEngine on
 SSLProtocol all -SSLv2 -SSLv3
 SSLHonorCipherOrder on
 SSLCertificateFile /etc/letsencrypt/live/exemple.com/fullchain.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/exemple.com/privkey.pem

 AllowEncodedSlashes NoDecode
 RequestHeader set X-Forwarded-Proto "https"
 ProxyPass / http://p-nexus:8081/ nocanon
 ProxyPassReverse / http://p-nexus:8081/
<virtualhost>
  • ServerName, nom du serveur sur internet ou dans votre réseau
  • Redirect permanent met en place une redirection permanente sur une connexion sécurisé
  • Protocols définit les protocoles disponible, nous indiquons ici que nous préférons utiliser http2

Voila, nexus est fonctionnel.

PS: une fois le conteneur monté, il faut attendre un peu que Nexus démarre. Ca prend un peu de temps, entre une minute pour un Nexus vierge à 20 minutes pour un Nexus avec des données