Aller au contenu

Architecture de référence

Vue d'ensemble

L'architecture de référence repose sur Nexus Repository Manager OSS déployé en conteneur, expose via un reverse proxy HTTPS, avec un stockage blob persistant et une base de metadonnees.

graph TD
    Clients["Clients internes<br/>(pipelines CI/CD, postes developpeurs, serveurs de build)"]
    Clients -->|HTTPS 443| Proxy
    subgraph Proxy["Reverse Proxy (Caddy)"]
        P1["nexus.internal<br/>:443 → :8081"]
        P2["docker.internal<br/>:443 → :8082"]
        P3["npm.internal<br/>:443 → :8083"]
    end
    Proxy --> Nexus
    subgraph Nexus["Nexus Repository Manager"]
        Engine["Repo Engine<br/>(proxy, hosted, group)"]
        Scheduler["Scheduler<br/>(cleanup, rebuild, compact)"]
        API["REST API<br/>(admin, search, scripting)"]
        Engine --> DB["OrientDB / PostgreSQL<br/>(metadonnees, index, RBAC)"]
        DB --> Blobs["Blob Stores"]
        Blobs --> BS1["default (file)"]
        Blobs --> BS2["docker (S3)"]
        Blobs --> BS3["npm (file)"]
    end
    Nexus -->|HTTPS sortant| Public["Registres publics (Internet)<br/>Docker Hub, npm, PyPI, Maven Central, Go proxy..."]

Composants de l'architecture

Blob stores

Les blob stores sont les volumes de stockage physiques ou Nexus écrit les artefacts. Chaque blob store est indépendant et peut utiliser un backend différent.

Backend Description Cas d'usage
File Système de fichiers local Déploiement simple, petit volume
S3 Amazon S3 ou compatible (MinIO, Ceph RGW) Volume important, scalabilité
Azure Blob Azure Blob Storage Infrastructure Azure

Bonne pratique : créer un blob store dedie par famille de dépôts pour isoler les données et faciliter la gestion de l'espace.

Blob Stores recommandes :
├── bs-docker       # Images Docker (volume important)
├── bs-npm          # Paquets npm
├── bs-pypi         # Paquets Python
├── bs-maven        # Artefacts Maven/Gradle
├── bs-system       # Paquets apt/rpm
├── bs-hosted       # Artefacts internes (tous formats)
└── bs-default      # Paquets divers (Go, Helm, NuGet)

Un blob store ne peut pas etre change apres creation du dépôt

Le blob store d'un dépôt est defini a la creation et ne peut pas etre modifie ensuite. Planifier le découpage avant de créer les dépôts.

Base de metadonnees

Nexus stocke les metadonnees (index des composants, informations de sécurité, RBAC, tâches planifiees) dans une base de données séparée des blobs.

Base de données Version Nexus Description
OrientDB < 3.71 Base embarquée (legacy)
H2 >= 3.71 (defaut) Base embarquée, pas de config
PostgreSQL >= 3.71 (option) Recommande pour la production

PostgreSQL pour la production

En production, utiliser PostgreSQL comme base de metadonnees. Cela permet les sauvegardes standards (pg_dump), la réplication, et de meilleures performances sous charge. H2 est acceptable pour un environnement de développement ou de test.

Reverse proxy

Nexus necessite un reverse proxy en frontal pour :

  1. TLS termination : les clients se connectent en HTTPS, le proxy parle HTTP vers Nexus
  2. Routage par sous-domaine : chaque format peut avoir son propre sous-domaine (docker.internal, npm.internal)
  3. Compression : gzip/brotli pour les réponses JSON (metadonnees npm, PyPI)
  4. Rate limiting : protection contre les abus
Reverse proxy Avantage principal
Caddy HTTPS automatique, config minimale
Nginx Performance, flexibilite
Traefik Découverte automatique, Kubernetes

Tâches planifiees (Scheduled Tasks)

Nexus execute des tâches planifiees pour la maintenance automatique :

Tâche Fréquence recommandee Description
Cleanup : suppression Quotidienne (02:00) Supprime les composants correspondant aux regles
Compact blob store Hebdomadaire (dim) Récupère l'espace disque apres suppression
Rebuild repository index Hebdomadaire Reconstruit les index (apt, yum, Docker)
Rebuild npm metadata Quotidienne Regenere les metadonnees npm
Rebuild Maven metadata Quotidienne Regenere les metadonnees Maven
Invalidate cache proxy A la demande Force le re-telechargement depuis l'upstream
Purge unused components Mensuelle Supprime les composants non telecharges depuis N jours
Database backup (PostgreSQL) Quotidienne (01:00) Sauvegarde de la base de metadonnees

Layout multi-format

Une seule instance Nexus gère tous les formats. Voici l'organisation recommandee des dépôts :

Dépôts Docker

Dépôt Type Port Description
docker-hub-proxy Proxy 8082 Cache de Docker Hub
docker-ghcr-proxy Proxy 8082 Cache de GitHub Container Registry
docker-hosted Hosted 8082 Images internes
docker-group Group 8082 Agregation proxy + hosted

Docker necessite un port HTTP dedie

Le protocole Docker Registry v2 exige un port HTTP dedie (pas de path-based routing). Configurer le reverse proxy pour router le sous-domaine docker.internal vers le port 8082.

Dépôts applicatifs

Dépôt Type Format Description
npm-proxy Proxy npm Cache de registry.npmjs.org
npm-hosted Hosted npm Paquets npm internes
npm-group Group npm Agregation proxy + hosted
pypi-proxy Proxy PyPI Cache de pypi.org
pypi-hosted Hosted PyPI Paquets Python internes
pypi-group Group PyPI Agregation proxy + hosted
maven-central-proxy Proxy Maven Cache de repo.maven.apache.org
maven-hosted-releases Hosted Maven Artefacts Maven releases
maven-hosted-snapshots Hosted Maven Artefacts Maven snapshots
maven-group Group Maven Agregation proxy + hosted
go-proxy Proxy Go Cache de proxy.golang.org
nuget-proxy Proxy NuGet Cache de api.nuget.org

Dépôts système

Dépôt Type Format Description
apt-ubuntu-proxy Proxy apt Cache de archive.ubuntu.com
apt-debian-proxy Proxy apt Cache de deb.debian.org
yum-rocky-proxy Proxy yum Cache de dl.rockylinux.org
yum-epel-proxy Proxy yum Cache de download.fedoraproject.org
helm-proxy Proxy Helm Cache de charts Helm publics
helm-hosted Hosted Helm Charts Helm internes

Sizing

Calcul de l'espace disque

L'espace requis depend du nombre de formats et du volume de paquets caches. Estimation pour une DSI de 50 développeurs :

Composant Estimation Commentaire
Images Docker 50-200 Go Layers dedupliquees, mais volume important
Paquets npm 5-20 Go Depend de la taille du monorepo
Paquets PyPI 2-10 Go Wheels binaires + sdist
Artefacts Maven 5-30 Go JARs, POM, sources
Paquets système 10-50 Go Selon le nombre de distributions mirrorees
Modules Go 1-5 Go Modules compresses, relativement legers
Helm charts 0.5-2 Go Charts compresses (petits fichiers)
Total estime 75-320 Go Prevoir 500 Go pour la croissance

Ressources compute

Taille (développeurs) CPU RAM Disque PostgreSQL
< 20 2 vCPU 4 Go 200 Go H2 embarque
20-100 4 vCPU 8 Go 500 Go PostgreSQL dedie
100-500 8 vCPU 16 Go 2 To PostgreSQL HA
> 500 16 vCPU 32 Go 5 To+ PostgreSQL HA + S3

S3 pour les gros volumes

Au-delà de 500 Go de blobs, envisager un backend S3 (ou MinIO self-hosted). Cela decouple le stockage du compute et facilite la scalabilité, les sauvegardes et la gestion du cycle de vie.


Flux réseau

Source Destination Port Protocole Description
Clients internes Reverse proxy 443 HTTPS Accès aux dépôts
Reverse proxy Nexus 8081 HTTP UI et API REST
Reverse proxy Nexus 8082 HTTP Docker Registry v2
Nexus Registres publics 443 HTTPS Telechargement upstream
Nexus PostgreSQL 5432 TCP/TLS Metadonnees
Nexus S3/MinIO 443 HTTPS Blob store (si S3)
Monitoring Nexus 8081 HTTP Metriques Prometheus (/service/metrics/prometheus)