ProHoster > Blog > administration > Installation et configuration de Nexus Sonatype en utilisant l'approche infrastructure as code
Installation et configuration de Nexus Sonatype en utilisant l'approche infrastructure as code
Sonatype Nexus est une plateforme intégrée grâce à laquelle les développeurs peuvent proxy, stocker et gérer les dépendances Java (Maven), Docker, Python, Ruby, NPM, les images Bower, les packages RPM, gitlfs, Apt, Go, Nuget, et distribuer leur sécurité logicielle.
Pourquoi avez-vous besoin de Sonatype Nexus ?
Pour stocker des artefacts privés ;
Pour mettre en cache les artefacts téléchargés depuis Internet ;
Artefacts pris en charge dans le package de base Sonatype Nexus :
Installer Ansible pip install ansible sur le poste de travail sur lequel le playbook s'exécute.
Fixer geerlingguy.java sur le poste de travail sur lequel le playbook s'exécute.
Fixer geerlingguy.apache sur le poste de travail sur lequel le playbook s'exécute.
Ce rôle a été testé sur CentOS 7, Ubuntu Xenial (16.04) et Bionic (18.04), Debian Jessie et Stretch
jmespath La bibliothèque doit être installée sur le poste de travail sur lequel le playbook est exécuté. À installer: sudo pip install -r requirements.txt
Enregistrez le fichier playbook (exemple ci-dessous) dans le fichier nexus.yml
Exécuter l'installation de Nexus ansible-playbook -i host nexus.yml
Exemple de playbook ansible pour installer Nexus sans LDAP avec les référentiels Maven (java), Docker, Python, Ruby, NPM, Bower, RPM et gitlfs.
Variables avec des valeurs par défaut (voir default/main.yml):
Variables générales
nexus_version: ''
nexus_timezone: 'UTC'
Par défaut, le rôle installera la dernière version disponible de Nexus. Vous pouvez corriger la version en changeant la variable nexus_version. Voir les versions disponibles sur https://www.sonatype.com/download-oss-sonatype.
Si vous passez à une version plus récente, le rôle tentera de mettre à jour votre installation Nexus.
Si vous utilisez une version de Nexus plus ancienne que la dernière, vous devez vous assurer que vous n'utilisez pas de fonctionnalités qui ne sont pas disponibles dans la version installée (par exemple, l'hébergement de référentiels Yum est disponible pour Nexus supérieur à 3.8.0, repo git lfs pour les liens supérieurs à 3.3.0, etc.)
nexus timezone est le nom du fuseau horaire Java, qui peut être utile en combinaison avec les expressions cron suivantes pour les tâches nexus_scheduled.
Le port et le chemin de contexte du processus de connexion Java. nexus_default_context_path doit contenir une barre oblique lorsqu'elle est définie, par exemple : nexus_default_context_path: '/nexus/'.
Utilisateur et groupe Nexus OS
nexus_os_group: 'nexus'
nexus_os_user: 'nexus'
L'utilisateur et le groupe utilisés pour posséder les fichiers Nexus et exécuter le service seront créés par le rôle s'il en manque un.
nexus_os_user_home_dir: '/home/nexus'
Autoriser la modification du répertoire personnel par défaut pour l'utilisateur Nexus
nexus_installation_dir contient des fichiers exécutables installés
nexus_data_dir contient toute la configuration, les référentiels et les artefacts téléchargés. Chemins d’accès blobstore personnalisés nexus_data_dir peut être personnalisé, voir ci-dessous nexus_blobstores.
nexus_tmp_dir contient tous les fichiers temporaires. Le chemin par défaut pour RedHat a été déplacé de /tmp pour surmonter les problèmes potentiels liés aux procédures de nettoyage automatiques. Voir #168.
Configuration de l'utilisation de la mémoire Nexus JVM
En guise de deuxième avertissement, voici un extrait du document ci-dessus :
Il n'est pas recommandé d'augmenter la mémoire du tas JVM au-delà des valeurs recommandées pour tenter d'améliorer les performances. Cela peut en réalité avoir l’effet inverse, entraînant un travail inutile pour le système d’exploitation.
Mot de passe administrateur
nexus_admin_password: 'changeme'
Le mot de passe du compte « admin » pour la configuration. Cela ne fonctionne que sur la première installation par défaut. Veuillez consulter [Modifier le mot de passe administrateur après la première installation](# change-admin-password-after-first-install) si vous souhaitez le modifier ultérieurement à l'aide d'un rôle.
Il est fortement recommandé de ne pas stocker votre mot de passe sous forme de texte clair dans le playbook, mais d'utiliser le [chiffrement ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (soit en ligne, soit dans un fichier séparé chargé par exemple avec include_vars)
Accès anonyme par défaut
nexus_anonymous_access: false
L'accès anonyme est désactivé par défaut. En savoir plus sur accès anonyme.
Ces variables contrôlent la manière dont le rôle se connecte à l'API Nexus pour le provisionnement. Pour les utilisateurs avancés uniquement. Vous ne souhaitez probablement pas modifier ces paramètres par défaut
Fixer Proxy inverse SSL.
Pour ce faire, vous devez installer httpd. Remarque : quand pour httpd_setup_enable valeur de consignetrue, Nexus contacte 127.0.0.1:8081, donc aucun étant directement accessible via le port HTTP 8081 depuis l'adresse IP externe.
Le nom d'hôte par défaut utilisé est nexus_public_hostname. Si vous avez besoin de noms différents pour une raison quelconque, vous pouvez définir httpd_server_name avec une signification différente.
С httpd_copy_ssl_files: true (par défaut) les certificats ci-dessus doivent exister dans votre répertoire playbook et seront copiés sur le serveur et configurés dans Apache.
Si vous souhaitez utiliser des certificats existants sur le serveur, installez httpd_copy_ssl_files: false et fournissez les variables suivantes :
# These specifies to the vhost where to find on the remote server file
# system the certificate files.
httpd_ssl_cert_file_location: "/etc/pki/tls/certs/wildcard.vm.crt"
httpd_ssl_cert_key_location: "/etc/pki/tls/private/wildcard.vm.key"
# httpd_ssl_cert_chain_file_location: "{{ httpd_ssl_cert_file_location }}"
httpd_ssl_cert_chain_file_location est facultatif et ne doit pas être défini si vous ne souhaitez pas personnaliser le fichier de chaîne
nexus_privileges:
- name: all-repos-read # used as key to update a privilege
# type: <one of application, repository-admin, repository-content-selector, repository-view, script or wildcard>
description: 'Read & Browse access to all repos'
repository: '*'
actions: # can be add, browse, create, delete, edit, read or * (all)
- read
- browse
# pattern: pattern
# domain: domain
# script_name: name
Liste privilèges pour les réglages. Consultez la documentation et l'interface graphique pour vérifier quelles variables doivent être définies en fonction du type de privilège.
Ces éléments sont combinés avec les valeurs par défaut suivantes :
nexus_roles:
- id: Developpers # can map to a LDAP group id, also used as a key to update a role
name: developers
description: All developers
privileges:
- nx-search-read
- all-repos-read
roles: [] # references to other role names
nexus_local_users: []
# - username: jenkins # used as key to update
# state: present # default value if ommited, use 'absent' to remove user
# first_name: Jenkins
# last_name: CI
# email: [email protected]
# password: "s3cr3t"
# roles:
# - developers # role ID
Liste d'utilisateurs/comptes locaux (non LDAP) à créer dans Nexus.
Liste des utilisateurs/comptes locaux (non LDAP) à créer dans Nexus.
Cartographie LDAP des utilisateurs/rôles. État absent supprimera les rôles d'un utilisateur existant s'il en existe déjà un.
Les utilisateurs Ldap ne sont pas supprimés. Essayer de définir un rôle pour un utilisateur inexistant entraînera une erreur.
Sélecteurs de contenu
nexus_content_selectors:
- name: docker-login
description: Selector for docker login privilege
search_expression: format=="docker" and path=~"/v2/"
Pour plus d'informations sur le sélecteur de contenu, voir Documentation.
Pour utiliser le sélecteur de contenu, ajoutez un nouveau privilège avec type: repository-content-selector et pertinentcontentSelector
Supprimez les référentiels de la configuration initiale par défaut de l'installation Nexus. Cette étape n'est exécutée que lors de la première installation (lorsque nexus_data_dir a été détecté vide).
Suppression des référentiels de la configuration par défaut pour Nexus. Cette étape n'est effectuée que lors de la première installation (lorsque nexus_data_dir vide).
nexus_delete_default_blobstore: false
Supprimez le blobstore par défaut de la configuration par défaut initiale de l'installation Nexus. Cela ne peut être fait que si nexus_delete_default_repos: true et tous les référentiels configurés (voir ci-dessous) ont un explicite blob_store: custom. Cette étape n'est exécutée que lors de la première installation (lorsque nexus_data_dir a été détecté vide).
La suppression du stockage blob (artefacts binaires) est désactivée par défaut dans la configuration initiale. Pour supprimer le stockage blob (artefacts binaires), désactivez nexus_delete_default_repos: true. Cette étape n'est effectuée que lors de la première installation (lorsque nexus_data_dir vide).
Blobstores créer. Un chemin de blobstore et un blobstore de référentiel ne peuvent pas être mis à jour après la création initiale (toute mise à jour ici sera ignorée lors du réapprovisionnement).
La configuration de blobstore sur S3 est fournie à titre de commodité et ne fait pas partie des tests automatisés que nous exécutons sur travis. Veuillez noter que le stockage sur S3 n'est recommandé que pour les instances déployées sur AWS.
Création Blobstores. Le chemin de stockage et le référentiel de stockage ne peuvent pas être mis à jour après la création initiale (toute mise à jour ici sera ignorée lors de la nouvelle installation).
La configuration du stockage blob sur S3 est fournie pour plus de commodité. Veuillez noter que le stockage S3 n'est recommandé que pour les instances déployées sur AWS.
Ci-dessus est un exemple de configuration Serveur proxy Maven.
nexus_repos_maven_hosted:
- name: private-release
version_policy: release
write_policy: allow_once # one of "allow", "allow_once" or "deny"
Maven référentiels hébergés configuration. La configuration du cache négatif est facultative et prendra par défaut les valeurs ci-dessus si elle est omise.
Configuration référentiels hébergés Maven. La configuration du cache négatif (-1) est facultative et prendra par défaut les valeurs ci-dessus si elle n'est pas spécifiée.
nexus_repos_maven_group:
- name: public
member_repos:
- central
- jboss
Les trois types de référentiels sont combinés avec les valeurs par défaut suivantes :
_nexus_repos_maven_defaults:
blob_store: default # Note : cannot be updated once the repo has been created
strict_content_validation: true
version_policy: release # release, snapshot or mixed
layout_policy: strict # strict or permissive
write_policy: allow_once # one of "allow", "allow_once" or "deny"
maximum_component_age: -1 # Nexus gui default. For proxies only
maximum_metadata_age: 1440 # Nexus gui default. For proxies only
negative_cache_enabled: true # Nexus gui default. For proxies only
negative_cache_ttl: 1440 # Nexus gui default. For proxies only
Types de référentiels Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS et yum :
sur le lien defaults/main.yml pour ces options :
Les référentiels Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS et yum sont désactivés par défaut :
Voir defaults/main.yml pour ces options :
Veuillez noter que vous devrez peut-être activer certaines étendues de sécurité si vous souhaitez utiliser d'autres types de référentiels autres que Maven. C'est faux par défaut
Le domaine des utilisateurs distants peut également être activé à l'aide de
nexus_rut_auth_realm: true
et le titre peut être personnalisé en définissant
nexus_rut_auth_header: "CUSTOM_HEADER"
Tâches planifiées
nexus_scheduled_tasks: []
# # Example task to compact blobstore :
# - name: compact-docker-blobstore
# cron: '0 0 22 * * ?'
# typeId: blobstore.compact
# task_alert_email: [email protected] # optional
# taskProperties:
# blobstoreName: {{ nexus_blob_names.docker.blob }} # all task attributes are stored as strings by nexus internally
# # Example task to purge maven snapshots
# - name: Purge-maven-snapshots
# cron: '0 50 23 * * ?'
# typeId: repository.maven.remove-snapshots
# task_alert_email: [email protected] # optional
# taskProperties:
# repositoryName: "*" # * for all repos. Change to a repository name if you only want a specific one
# minimumRetained: "2"
# snapshotRetentionDays: "2"
# gracePeriodInDays: "2"
# booleanTaskProperties:
# removeIfReleased: true
# # Example task to purge unused docker manifest and images
# - name: Purge unused docker manifests and images
# cron: '0 55 23 * * ?'
# typeId: "repository.docker.gc"
# task_alert_email: [email protected] # optional
# taskProperties:
# repositoryName: "*" # * for all repos. Change to a repository name if you only want a specific one
# # Example task to purge incomplete docker uploads
# - name: Purge incomplete docker uploads
# cron: '0 0 0 * * ?'
# typeId: "repository.docker.upload-purge"
# task_alert_email: [email protected] # optional
# taskProperties:
# age: "24"
Tâches planifiées pour les réglages. typeId et spécifique à une tâchetaskProperties/booleanTaskProperties vous pouvez deviner soit :
de la hiérarchie des types Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
vérifier le formulaire de création de tâche HTML dans votre navigateur
de visualiser les requêtes AJAX dans le navigateur lors de la configuration manuelle d'une tâche.
Les propriétés des tâches doivent être déclarées dans le bon bloc yaml en fonction de leur type:
taskProperties pour toutes les propriétés de chaîne (c'est-à-dire les noms de référentiel, les noms de référentiel, les périodes...).
booleanTaskProperties pour toutes les propriétés logiques (c'est-à-dire principalement les cases à cocher dans l'interface graphique de la tâche de création de lien).
La sauvegarde ne sera pas configurée jusqu'à ce que vous changiez nexus_backup_configure в true.
Dans ce cas, la tâche de script planifiée sera configurée pour s'exécuter sur Nexus
à l'intervalle spécifié dans nexus_backup_cron (par défaut 21h00 tous les jours).
Voir [modèle groovy pour cette tâche](templates/backup.groovy.j2) pour plus de détails.
Cette tâche planifiée est indépendante des autres nexus_scheduled_tasksque vous
annoncez-le dans votre playbook.
Si vous souhaitez effectuer une rotation/supprimer des sauvegardes, installez nexus_backup_rotate: true et configurez le nombre de sauvegardes que vous souhaitez enregistrer en utilisant nexus_backup_keep_rotations (par défaut 4).
Lorsque vous utilisez la rotation, si vous souhaitez économiser de l'espace disque supplémentaire pendant le processus de sauvegarde,
Vous pouvez installer nexus_backup_rotate_first: true. Cela configurera la pré-rotation/suppression avant la sauvegarde. Par défaut, la rotation se produit après la création d'une sauvegarde. Veuillez noter que dans ce cas, les anciennes sauvegardes
sera supprimé avant que la sauvegarde actuelle ne soit effectuée.
Procédure de récupération
Exécuter le playbook avec le paramètre -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(par exemple, 2017-12-17-21-00-00 du 17 décembre 2017 à 21h00
Supprimer le lien
Attention : cela supprimera complètement vos données actuelles. Assurez-vous de faire une sauvegarde plus tôt si nécessaire
Utiliser une variable nexus_purgesi vous devez redémarrer à partir de zéro et réinstaller l'instance Nexus avec toutes les données supprimées.
Changer le mot de passe administrateur après la première installation
nexus_default_admin_password: 'admin123'
Cela ne devrait pas être modifié dans votre playbook. Cette variable est renseignée avec le mot de passe administrateur Nexus par défaut lors de la première installation et garantit que nous pouvons modifier le mot de passe administrateur en nexus_admin_password.
Si vous souhaitez modifier le mot de passe administrateur après la première installation, vous pouvez le remplacer temporairement par l'ancien mot de passe à partir de la ligne de commande. Après changement nexus_admin_password dans votre playbook, vous pouvez exécuter :