anchorage_layer_simple/fixKnowledge/api-anchorage-401-error.md
ncantu dde1ccbb07 fix: Improve .env loading and add backup/startup scripts
**Motivations:**
- Fix 401 error on anchorage API due to .env not being loaded correctly
- Fix 502 error on dashboard due to service not running
- Add backup script for mining keys and wallet descriptors
- Improve service management with startup scripts and systemd services

**Root causes:**
- dotenv.config() was called without explicit path, causing .env to be loaded from wrong directory
- Services were not started automatically, causing 502 errors
- No backup mechanism for critical keys and wallet data

**Correctifs:**
- Improved .env loading in api-anchorage/src/server.js with explicit path
- Improved .env loading in signet-dashboard/src/server.js with explicit path
- Added backups/ directory to .gitignore to prevent committing sensitive data
- Created export-backup.sh script for backing up mining keys and wallet descriptors

**Evolutions:**
- Added api-anchorage/start.sh script for proper service startup
- Added api-anchorage/anchorage-api.service systemd service file
- Added fixKnowledge/api-anchorage-401-error.md documentation
- Added fixKnowledge/dashboard-502-error.md documentation
- Updated mempool submodule

**Pages affectées:**
- .gitignore (added backups/)
- api-anchorage/src/server.js (improved .env loading)
- api-anchorage/start.sh (new)
- api-anchorage/anchorage-api.service (new)
- signet-dashboard/src/server.js (improved .env loading)
- export-backup.sh (new)
- fixKnowledge/api-anchorage-401-error.md (new)
- fixKnowledge/dashboard-502-error.md (new)
- mempool (submodule updated)
2026-01-24 03:17:48 +01:00

5.7 KiB

Correction : Erreur 401 "Invalid or missing API key" sur l'API d'ancrage

Auteur : Équipe 4NK Date : 2026-01-24 Version : 1.0

Problème Identifié

L'API d'ancrage retournait une erreur 401 "Invalid or missing API key" même avec la bonne clé API configurée dans le fichier .env.

Symptômes

  • L'API est accessible sur https://anchorage.certificator.4nkweb.com
  • Le health check fonctionne (/health)
  • Le fichier .env contient la bonne clé : 770b9b33-8a15-4a6d-8f95-1cd2b36e7376
  • Le backend envoie correctement le header x-api-key
  • Mais : L'API retourne 401 "Invalid or missing API key"

Cause Racine

L'API en cours d'exécution n'avait pas rechargé les variables d'environnement depuis le fichier .env. Le processus Node.js avait été démarré avec une ancienne configuration ou sans charger correctement le .env.

Problème technique : Le code utilisait dotenv.config() sans chemin explicite, ce qui pouvait charger le .env depuis un mauvais répertoire si le script était exécuté depuis un autre répertoire que celui de l'API.

Correctifs Appliqués

1. Amélioration du chargement du .env dans server.js

Fichier : api-anchorage/src/server.js

Avant :

import dotenv from 'dotenv';
// ...
dotenv.config();

Après :

import dotenv from 'dotenv';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';

// Get the directory of the current module
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

// Charger les variables d'environnement depuis le répertoire racine du projet api-anchorage
// Cela garantit que le .env est chargé même si le script est exécuté depuis un autre répertoire
const envPath = join(__dirname, '../.env');
dotenv.config({ path: envPath });

Impact : Le .env est maintenant chargé depuis un chemin explicite, garantissant que le bon fichier est utilisé même si le script est exécuté depuis un autre répertoire.

2. Création d'un script de démarrage

Fichier : api-anchorage/start.sh

Script bash qui :

  • Vérifie que le fichier .env existe
  • Vérifie que Node.js est installé
  • Installe les dépendances si nécessaire
  • Charge explicitement les variables d'environnement
  • Démarre l'API

3. Création d'un service systemd

Fichier : api-anchorage/anchorage-api.service

Service systemd pour gérer l'API correctement avec :

  • Redémarrage automatique en cas d'échec
  • Journalisation des logs
  • Configuration de sécurité

Modifications

Fichiers Modifiés

  • api-anchorage/src/server.js : Amélioration du chargement du .env avec chemin explicite

Fichiers Créés

  • api-anchorage/start.sh : Script de démarrage
  • api-anchorage/anchorage-api.service : Service systemd
  • fixKnowledge/api-anchorage-401-error.md : Cette documentation

Modalités de Déploiement

Redémarrage de l'API

  1. Arrêter les processus existants :

    # Trouver les processus
    ps aux | grep "node src/server.js" | grep -v grep
    
    # Arrêter les processus (remplacer PID par les PIDs trouvés)
    kill <PID>
    
  2. Vérifier que le port est libre :

    sudo lsof -i :3010
    
  3. Démarrer l'API :

    cd /home/ncantu/Bureau/code/bitcoin/api-anchorage
    npm start
    # Ou utiliser le script de démarrage
    ./start.sh
    

Installation du service systemd (optionnel)

  1. Copier le service :

    sudo cp api-anchorage/anchorage-api.service /etc/systemd/system/
    
  2. Recharger systemd :

    sudo systemctl daemon-reload
    
  3. Activer et démarrer le service :

    sudo systemctl enable anchorage-api
    sudo systemctl start anchorage-api
    
  4. Vérifier le statut :

    sudo systemctl status anchorage-api
    

Modalités d'Analyse

Vérification que l'API fonctionne

  1. Test du health check :

    curl http://localhost:3010/health
    
  2. Test avec la clé API :

    curl -X POST http://localhost:3010/api/anchor/document \
      -H 'Content-Type: application/json' \
      -H 'x-api-key: 770b9b33-8a15-4a6d-8f95-1cd2b36e7376' \
      --data-raw '{"hash":"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"}'
    
  3. Vérifier les logs :

    # Si démarré avec npm start
    tail -f /tmp/anchorage-api.log
    
    # Si démarré avec systemd
    sudo journalctl -u anchorage-api -f
    

Vérification du chargement du .env

  1. Vérifier que le .env contient la bonne clé :

    cd api-anchorage
    grep API_KEYS .env
    
  2. Vérifier que l'API charge le .env :

    • Les logs au démarrage doivent afficher le port et le host configurés
    • Si l'API accepte la clé API, le .env est correctement chargé

Résultat

Problème résolu

  • L'API charge maintenant correctement le .env depuis un chemin explicite
  • La clé API 770b9b33-8a15-4a6d-8f95-1cd2b36e7376 est acceptée
  • L'ancrage fonctionne correctement
  • Les transactions sont créées et envoyées au mempool

Prévention

Pour éviter ce problème à l'avenir :

  1. Toujours utiliser un chemin explicite pour le .env dans les applications Node.js
  2. Redémarrer l'API après modification du .env
  3. Utiliser un service systemd ou PM2 pour gérer l'API et faciliter les redémarrages
  4. Vérifier les logs au démarrage pour confirmer que les variables d'environnement sont chargées

Pages Affectées

  • api-anchorage/src/server.js : Amélioration du chargement du .env
  • api-anchorage/start.sh : Script de démarrage (nouveau)
  • api-anchorage/anchorage-api.service : Service systemd (nouveau)
  • fixKnowledge/api-anchorage-401-error.md : Documentation (nouveau)