Erreur NPM ETIMEDOUT
Résoudre l'erreur NPM ETIMEDOUT sur VPS RedHeberg
Présentation du problème
L'erreur ETIMEDOUT avec NPM indique un timeout de connexion lors du téléchargement des packages depuis le registry npmjs.com. Cette erreur peut survenir sur votre VPS RedHeberg pour plusieurs raisons techniques que nous allons diagnostiquer et résoudre.
Diagnostic rapide
1. Vérifier la connectivité réseau
Testez d'abord la connexion vers le registry NPM :
# Test de ping vers npmjs.com
ping -c 4 registry.npmjs.org
# Test de connectivité HTTP
curl -I https://registry.npmjs.org
# Vérification des temps de réponse
curl -w "Temps total: %{time_total}s\n" -o /dev/null -s https://registry.npmjs.org
2. Examiner la configuration DNS
# Afficher la configuration DNS actuelle
cat /etc/resolv.conf
# Tester la résolution DNS
nslookup registry.npmjs.org
dig registry.npmjs.org
Solutions par ordre de priorité
Solution 1 : Optimiser la configuration DNS
Les serveurs DNS par défaut peuvent être lents. Utilisez les DNS RedHeberg ou des DNS publics rapides :
# Sauvegarde de la configuration actuelle
sudo cp /etc/resolv.conf /etc/resolv.conf.backup
# Configuration avec DNS optimisés
sudo tee /etc/resolv.conf > /dev/null <<EOF
nameserver 1.1.1.1
nameserver 1.0.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4
EOF
# Test immédiat
npm config get registry
npm ping
Solution 2 : Ajuster les timeouts NPM
# Augmenter les timeouts NPM
npm config set timeout 300000
npm config set network-timeout 300000
npm config set fetch-timeout 300000
npm config set fetch-retry-mintimeout 20000
npm config set fetch-retry-maxtimeout 120000
# Vérifier la configuration
npm config list
Solution 3 : Changer de registry NPM
# Utiliser un mirror alternatif
npm config set registry https://registry.yarnpkg.com
# Ou utiliser un CDN français
npm config set registry https://registry.npmjs.cf
# Pour revenir au registry officiel
npm config set registry https://registry.npmjs.org
Solution 4 : Optimiser les paramètres réseau
# Désactiver IPv6 si problématique
echo 'net.ipv6.conf.all.disable_ipv6 = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# Configurer NPM pour IPv4 uniquement
npm config set prefer-ipv4 true
# Ajuster les paramètres de cache
npm config set cache-max 86400000
npm config set cache-min 86400
Solutions avancées
Utilisation d'un proxy local
Si le problème persiste, configurez un cache local :
# Installation de verdaccio (registry NPM local)
sudo npm install -g verdaccio
# Configuration basique
mkdir -p ~/.config/verdaccio
cat > ~/.config/verdaccio/config.yaml <<EOF
storage: ./storage
auth:
htpasswd:
file: ./htpasswd
uplinks:
npmjs:
url: https://registry.npmjs.org/
timeout: 300s
packages:
'@*/*':
access: $all
publish: $authenticated
unpublish: $authenticated
proxy: npmjs
'**':
access: $all
publish: $authenticated
unpublish: $authenticated
proxy: npmjs
logs:
- {type: stdout, format: pretty, level: http}
EOF
# Démarrage du service
verdaccio --config ~/.config/verdaccio/config.yaml &
# Configuration NPM pour utiliser le cache local
npm config set registry http://localhost:4873
Mode offline et cache
# Utiliser le mode offline si packages déjà en cache
npm install --prefer-offline
# Nettoyer et reconstruire le cache
npm cache clean --force
npm cache verify
# Installation avec cache étendu
npm install --cache-max 86400000
Cas spécifiques VPS RedHeberg
Configuration pare-feu sortant
Vérifiez que votre pare-feu n'ait pas de règles restrictives sur le trafic HTTPS sortant.
# Vérifier iptables
sudo iptables -L OUTPUT -n -v
# Autoriser le trafic HTTPS sortant si nécessaire
sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
# Sauvegarder les règles
sudo iptables-save > /etc/iptables/rules.v4
Optimisation réseau spécifique
# Ajuster les paramètres TCP pour les connexions lentes
echo 'net.core.rmem_default = 262144' | sudo tee -a /etc/sysctl.conf
echo 'net.core.rmem_max = 16777216' | sudo tee -a /etc/sysctl.conf
echo 'net.core.wmem_default = 262144' | sudo tee -a /etc/sysctl.conf
echo 'net.core.wmem_max = 16777216' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Vérification finale
# Test complet de fonctionnement
npm config list
npm ping
npm search react --loglevel=silly
# Installation de test
mkdir /tmp/npm-test && cd /tmp/npm-test
npm init -y
npm install --loglevel=verbose lodash
Si les problèmes persistent, les VPS Game Ryzen de RedHeberg avec processeurs 5900X offrent de meilleures performances réseau pour les workloads de développement intensifs.
Cette approche systématique devrait résoudre la majorité des erreurs ETIMEDOUT NPM sur votre infrastructure RedHeberg.