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 :
- TLS termination : les clients se connectent en HTTPS, le proxy parle HTTP vers Nexus
- Routage par sous-domaine : chaque format peut avoir son propre sous-domaine (
docker.internal,npm.internal) - Compression : gzip/brotli pour les réponses JSON (metadonnees npm, PyPI)
- 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) |