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

199 lines
5.7 KiB
Markdown

# 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** :
```javascript
import dotenv from 'dotenv';
// ...
dotenv.config();
```
**Après** :
```javascript
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** :
```bash
# 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** :
```bash
sudo lsof -i :3010
```
3. **Démarrer l'API** :
```bash
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** :
```bash
sudo cp api-anchorage/anchorage-api.service /etc/systemd/system/
```
2. **Recharger systemd** :
```bash
sudo systemctl daemon-reload
```
3. **Activer et démarrer le service** :
```bash
sudo systemctl enable anchorage-api
sudo systemctl start anchorage-api
```
4. **Vérifier le statut** :
```bash
sudo systemctl status anchorage-api
```
## Modalités d'Analyse
### Vérification que l'API fonctionne
1. **Test du health check** :
```bash
curl http://localhost:3010/health
```
2. **Test avec la clé API** :
```bash
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** :
```bash
# 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é** :
```bash
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)