Aller au contenu principal

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

Attention

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
Conseil

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.