Miroir générique
Un miroir en proxy seul, adressé par chemin, de n'importe quelle arborescence de fichiers en HTTP — pour les amonts qui n'ont aucun protocole de paquets : archives de chaînes d'outils (nodejs.org/dist, static.rust-lang.org, dl.google.com/go) et CDN d'éditeurs à binaire unique (get.helm.sh, binaries.sonarsource.com). Chaque requête diffuse {upstream}/{path} et le met en cache au premier défaut. Il n'y a ni publication, ni index, ni modèle de signature.
En un coup d'œil
| Type de configuration | generic |
| Amont par défaut | aucun — déclarez upstreams explicitement (obligatoire) |
| Modes | proxy seul |
| Adressage | par chemin |
| Publication privée | ❌ proxy seul |
| Coupure réseau | aucun index à composer ; un fichier détenu est servi par chemin |
Mise en place du proxy
upstreams et une liste d'autorisation path_allow sont obligatoires — sans elle, un miroir d'un hôte partagé relaierait tous les chemins sans rapport qui s'y trouvent. Votre administrateur les définit dans la configuration du registre :
[[registries]]
name = "node-dist"
type = "generic"
mode = "proxy"
upstreams = ["https://nodejs.org/dist"] # obligatoire — il n'existe pas de défaut
path_allow = ["v*/**"] # obligatoire — ["**"] autorise toutLe chemin qui suit /generic/ correspond un pour un à l'amont configuré. Remplacez <registry> par le nom de registre que vous avez configuré :
REG="https://batlehub.example.com/proxy/<registry>/generic"
# nodejs.org/dist/v24.18.0/node-v24.18.0-linux-x64.tar.gz
# → $REG/v24.18.0/node-v24.18.0-linux-x64.tar.gz
curl -fL -o node.tar.gz $REG/v24.18.0/node-v24.18.0-linux-x64.tar.gzLa plupart des chaînes d'outils exposent une variable d'environnement de miroir que vous faites pointer vers la racine du registre (…/proxy/<registry>/generic) :
export NODEJS_ORG_MIRROR=https://batlehub.example.com/proxy/node-dist/generic
export RUSTUP_DIST_SERVER=https://batlehub.example.com/proxy/rust-dist/genericDes outils comme mise les lisent automatiquement, et savent aussi router leurs téléchargements directs par un bloc [settings.url_replacements]. batlehub registry suggest analyse un projet (mise.toml et mise.lock compris) et imprime à la fois les blocs de configuration de registre et les variables d'environnement client correspondantes.
Authentification
Ajoutez -H "Authorization: Bearer $BATLEHUB_TOKEN" quand le registre exige une authentification. Pour les outils pilotés par variables d'environnement, ajoutez une entrée ~/.netrc pour l'hôte du proxy — mise et tout ce qui est bâti sur libcurl la lisent automatiquement :
machine batlehub.example.com
login <your-user-id>
password <your-token>Embarquer des identifiants HTTP Basic dans l'URL du miroir fonctionne en repli, mais le token vit alors dans une variable d'environnement qui fuit dans l'historique du shell, les logs de CI, la liste des processus et les diagnostics du genre mise doctor — préférez ~/.netrc.
Notes
- Un miroir
genericd'un CDN Alpine pose le même problème, un arbre plus loin : le nom de fichier d'un.apkporte un nom et une version réels, et un registregenericn'a nulle part où les mettre. Utilisezapkpour bloquer, appliquer un délai de fraîcheur ou compter un paquet Alpine ;genericreste le bon choix pour un arbre Alpine que vous voulez seulement mettre en cache. - Un miroir
genericdenodejs.org/distmet Node en cache correctement et ne peut rien lui appliquer : un registre adressé par chemin n'a qu'un paquet synthétique et aucune version à bloquer. Pour appliquer une politique à une publication de Node — un blocage qui atteintnvm ls-remote, un garde-fou d'âge sur une version publiée hier — utilisez plutôtnodedist;genericreste la bonne réponse pour une arborescence que vous voulez mettre en cache sans politique. - Un miroir
genericd'un cache binaire Nix reprend la même histoire une troisième fois, en pire : chaque chemin est un paquet synthétique, une CVE dans un chemin du store est donc invisible depuis la console etnix copy --ton'a nulle part où aller. C'est tout un parc — le compilateur compris — qui tire sa clôture par ce trou. Utiliseznixpour bloquer un chemin du store selon le paquet et la version que Nix lui-même en extrait ;genericreste la bonne réponse pourchannels.nixos.org, qui est un autre hôte et un autre protocole. - Une requête vers un chemin en dehors de la liste
path_allowdu registre renvoie403, pas 404 — c'est la liste d'autorisation qui la rejette localement, avant toute requête amont. Élargissez les motifs simise installsignale un 403. - Les archives répliquées sont souvent volumineuses ; le proxy met tout l'artefact en mémoire tampon avant de le mettre en cache : relevez donc
limits.max_artifact_size_bytes(500 Mio par défaut) pour des archives de chaînes d'outils. - Les registres adressés par chemin se préchauffent sur des chemins précis, par
[registries.cache] warm_paths, et non parwarm_packages.
Voir aussi
- Utiliser BatleHub — tokens, prérequis de publication, la CLI
- Vue d'ensemble des registres · Mise en cache · Contrôle d'accès