- Add API token authentication middleware (X-API-Key header) - Add CORS configuration with ALLOWED_ORIGINS - Add security HTTP headers (X-Frame-Options, CSP, etc.) - Add web interface for API token configuration with localStorage - Add toggle visibility for token input - Add connection status indicator - Add auto-save token functionality - Update API documentation with authentication examples - Add deployment guides (OVH specific and general) - Add local testing guide 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
396 lines
7.9 KiB
Markdown
396 lines
7.9 KiB
Markdown
# Guide de Mise à Jour - Serveur OVH Existant
|
|
|
|
Ce guide explique comment mettre à jour ton serveur OVH existant avec le nouveau système de sécurité.
|
|
|
|
## Prérequis
|
|
|
|
Tu as déjà :
|
|
- ✅ Un VPS chez OVH
|
|
- ✅ Git configuré
|
|
- ✅ Un service qui tourne (PM2/systemd)
|
|
|
|
## Étapes de Mise à Jour
|
|
|
|
### 1. Générer un token API sécurisé
|
|
|
|
**Sur ton serveur OVH (via SSH):**
|
|
|
|
```bash
|
|
# Générer un token aléatoire de 64 caractères
|
|
openssl rand -hex 32
|
|
```
|
|
|
|
**Ou sur Windows (PowerShell):**
|
|
```powershell
|
|
-join ((48..57) + (65..90) + (97..122) | Get-Random -Count 64 | % {[char]$_})
|
|
```
|
|
|
|
**Copie ce token**, tu vas en avoir besoin maintenant.
|
|
|
|
---
|
|
|
|
### 2. Configurer les variables d'environnement
|
|
|
|
Connecte-toi en SSH à ton serveur :
|
|
|
|
```bash
|
|
ssh user@ton-serveur-ovh.com
|
|
```
|
|
|
|
Navigue vers le dossier du projet :
|
|
|
|
```bash
|
|
cd /chemin/vers/videotoMP3Transcriptor
|
|
```
|
|
|
|
Édite le fichier `.env` :
|
|
|
|
```bash
|
|
nano .env
|
|
```
|
|
|
|
**Ajoute ces lignes** (ou modifie si elles existent déjà) :
|
|
|
|
```env
|
|
# ========================================
|
|
# SÉCURITÉ API
|
|
# ========================================
|
|
|
|
# Remplace par le token que tu viens de générer
|
|
API_TOKEN=ton_token_de_64_caracteres_ici
|
|
|
|
# Domaines autorisés (séparés par des virgules)
|
|
# En développement: * (tout le monde)
|
|
# En production: https://ton-domaine.com,https://api.ton-domaine.com
|
|
ALLOWED_ORIGINS=*
|
|
|
|
# Port (optionnel, défaut: 8888)
|
|
PORT=8888
|
|
|
|
# OpenAI API Key (tu dois déjà l'avoir)
|
|
OPENAI_API_KEY=sk-...
|
|
```
|
|
|
|
**Sauvegarde** : `Ctrl + X`, puis `Y`, puis `Enter`
|
|
|
|
---
|
|
|
|
### 3. Pull les dernières modifications
|
|
|
|
```bash
|
|
# Sauvegarder les modifications locales si nécessaire
|
|
git stash
|
|
|
|
# Récupérer les dernières modifications
|
|
git pull origin main
|
|
|
|
# Restaurer tes modifications si tu avais stashé
|
|
git stash pop
|
|
```
|
|
|
|
---
|
|
|
|
### 4. Redémarrer le service
|
|
|
|
**Si tu utilises PM2:**
|
|
|
|
```bash
|
|
# Redémarrer l'application
|
|
pm2 restart video-transcriptor
|
|
|
|
# Vérifier que ça tourne
|
|
pm2 status
|
|
|
|
# Voir les logs en temps réel
|
|
pm2 logs video-transcriptor
|
|
```
|
|
|
|
**Si tu utilises systemd:**
|
|
|
|
```bash
|
|
# Redémarrer le service
|
|
sudo systemctl restart video-transcriptor
|
|
|
|
# Vérifier le statut
|
|
sudo systemctl status video-transcriptor
|
|
|
|
# Voir les logs
|
|
sudo journalctl -u video-transcriptor -f
|
|
```
|
|
|
|
---
|
|
|
|
### 5. Tester l'API
|
|
|
|
**Test de santé (sans token - devrait marcher):**
|
|
|
|
```bash
|
|
curl http://localhost:8888/health
|
|
```
|
|
|
|
**Résultat attendu:**
|
|
```json
|
|
{"status":"ok","timestamp":"2025-..."}
|
|
```
|
|
|
|
**Test avec authentification (devrait échouer sans token):**
|
|
|
|
```bash
|
|
curl http://localhost:8888/info?url=https://youtube.com/watch?v=test
|
|
```
|
|
|
|
**Résultat attendu:**
|
|
```json
|
|
{"error":"Unauthorized","message":"API key required..."}
|
|
```
|
|
|
|
**Test avec token (devrait marcher):**
|
|
|
|
```bash
|
|
curl -H "X-API-Key: ton_token_ici" \
|
|
"http://localhost:8888/info?url=https://youtube.com/watch?v=dQw4w9WgXcQ"
|
|
```
|
|
|
|
**Résultat attendu:** Informations sur la vidéo
|
|
|
|
---
|
|
|
|
### 6. Configurer le DNS (si pas déjà fait)
|
|
|
|
**Chez OVH, dans l'espace client:**
|
|
|
|
1. Va dans **Web Cloud** → **Domaines** → **Ton domaine**
|
|
2. Clique sur **Zone DNS**
|
|
3. Ajoute un enregistrement **A** :
|
|
- Sous-domaine: `api` (ou `@` pour le domaine principal)
|
|
- Cible: **L'IP de ton VPS OVH**
|
|
- TTL: 3600
|
|
|
|
**Exemple:**
|
|
```
|
|
Type: A
|
|
Nom: api
|
|
Cible: 51.195.XXX.XXX (ton IP OVH)
|
|
```
|
|
|
|
4. **Attends 5-10 minutes** pour la propagation DNS
|
|
|
|
---
|
|
|
|
### 7. Tester depuis l'interface web
|
|
|
|
1. **Ouvre ton navigateur** et va sur : `http://ton-domaine.com` (ou `http://ip-du-serveur:8888`)
|
|
|
|
2. **Clique sur le panneau "🔐 API Configuration"**
|
|
|
|
3. **Colle ton token** dans le champ
|
|
|
|
4. **Clique sur "Save & Test"**
|
|
|
|
5. **Résultat attendu :**
|
|
- Statut passe en vert "Connected ✓"
|
|
- Notification de succès
|
|
- Le token est sauvegardé dans le navigateur
|
|
|
|
6. **Teste un téléchargement** dans l'onglet "Download"
|
|
- Entre une URL YouTube
|
|
- Le token sera automatiquement ajouté aux requêtes
|
|
|
|
---
|
|
|
|
## Sécurité en Production
|
|
|
|
### Option 1 : Limiter les origines CORS
|
|
|
|
Si tu veux que SEUL ton domaine puisse utiliser l'API :
|
|
|
|
```bash
|
|
nano .env
|
|
```
|
|
|
|
Change :
|
|
```env
|
|
ALLOWED_ORIGINS=https://ton-domaine.com,https://api.ton-domaine.com
|
|
```
|
|
|
|
### Option 2 : HTTPS avec Nginx + Let's Encrypt
|
|
|
|
**Si pas déjà configuré**, installe Nginx et SSL :
|
|
|
|
```bash
|
|
# Installer Nginx
|
|
sudo apt update
|
|
sudo apt install -y nginx certbot python3-certbot-nginx
|
|
|
|
# Créer la configuration Nginx
|
|
sudo nano /etc/nginx/sites-available/video-transcriptor
|
|
```
|
|
|
|
**Colle cette configuration :**
|
|
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name api.ton-domaine.com;
|
|
|
|
# Redirection vers HTTPS (sera configuré après)
|
|
# return 301 https://$server_name$request_uri;
|
|
|
|
location / {
|
|
proxy_pass http://localhost:8888;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
}
|
|
}
|
|
```
|
|
|
|
**Activer et tester:**
|
|
|
|
```bash
|
|
# Activer le site
|
|
sudo ln -s /etc/nginx/sites-available/video-transcriptor /etc/nginx/sites-enabled/
|
|
|
|
# Tester la config
|
|
sudo nginx -t
|
|
|
|
# Redémarrer Nginx
|
|
sudo systemctl restart nginx
|
|
|
|
# Obtenir un certificat SSL GRATUIT
|
|
sudo certbot --nginx -d api.ton-domaine.com
|
|
```
|
|
|
|
Certbot va automatiquement configurer HTTPS et les redirections.
|
|
|
|
---
|
|
|
|
## Dépannage
|
|
|
|
### ❌ "API token required"
|
|
|
|
**Problème:** Le token n'est pas envoyé ou invalide
|
|
|
|
**Solution:**
|
|
1. Vérifie que le token est bien configuré dans l'interface web
|
|
2. Rafraîchis la page et entre le token à nouveau
|
|
3. Vérifie que le token dans `.env` est le même que dans l'interface
|
|
|
|
---
|
|
|
|
### ❌ Le service ne démarre pas
|
|
|
|
```bash
|
|
# Voir les logs
|
|
pm2 logs video-transcriptor --lines 50
|
|
|
|
# ou pour systemd
|
|
sudo journalctl -u video-transcriptor -n 50
|
|
```
|
|
|
|
**Vérifications:**
|
|
- La variable `API_TOKEN` est bien dans `.env`
|
|
- Pas d'erreurs de syntaxe dans `.env`
|
|
- Node modules à jour : `npm ci`
|
|
|
|
---
|
|
|
|
### ❌ CORS errors dans le navigateur
|
|
|
|
**Problème:** "Access to fetch at ... has been blocked by CORS policy"
|
|
|
|
**Solution 1:** En développement
|
|
```env
|
|
ALLOWED_ORIGINS=*
|
|
```
|
|
|
|
**Solution 2:** En production
|
|
```env
|
|
ALLOWED_ORIGINS=https://ton-domaine.com,https://www.ton-domaine.com
|
|
```
|
|
|
|
Redémarre après modification : `pm2 restart video-transcriptor`
|
|
|
|
---
|
|
|
|
### ❌ DNS ne fonctionne pas
|
|
|
|
**Vérifier la propagation DNS:**
|
|
|
|
```bash
|
|
# Depuis ton serveur
|
|
dig api.ton-domaine.com
|
|
|
|
# Ou depuis Windows
|
|
nslookup api.ton-domaine.com
|
|
```
|
|
|
|
**Si ça ne fonctionne pas:**
|
|
- Attends 10-30 minutes
|
|
- Vérifie dans l'interface OVH que l'enregistrement A pointe vers la bonne IP
|
|
- Vide le cache DNS : `ipconfig /flushdns` (Windows) ou `sudo systemd-resolve --flush-caches` (Linux)
|
|
|
|
---
|
|
|
|
## Checklist Finale
|
|
|
|
Avant de considérer le déploiement comme terminé :
|
|
|
|
- [ ] `.env` configuré avec un `API_TOKEN` fort
|
|
- [ ] Service redémarré et en cours d'exécution
|
|
- [ ] Test `/health` fonctionne
|
|
- [ ] Test avec token fonctionne
|
|
- [ ] Interface web accessible
|
|
- [ ] Token sauvegardé dans l'interface web
|
|
- [ ] Test de téléchargement YouTube réussi
|
|
- [ ] DNS configuré (si applicable)
|
|
- [ ] HTTPS configuré (recommandé pour production)
|
|
|
|
---
|
|
|
|
## Commandes Utiles
|
|
|
|
```bash
|
|
# Voir les logs en temps réel
|
|
pm2 logs video-transcriptor
|
|
|
|
# Statut du service
|
|
pm2 status
|
|
|
|
# Redémarrer
|
|
pm2 restart video-transcriptor
|
|
|
|
# Vérifier les ports ouverts
|
|
sudo netstat -tlnp | grep 8888
|
|
|
|
# Vérifier l'utilisation des ressources
|
|
htop
|
|
|
|
# Espace disque
|
|
df -h
|
|
|
|
# Tester l'API locale
|
|
curl -H "X-API-Key: ton_token" http://localhost:8888/health
|
|
```
|
|
|
|
---
|
|
|
|
## Support
|
|
|
|
Si tu rencontres des problèmes :
|
|
|
|
1. **Vérifie les logs** : `pm2 logs`
|
|
2. **Vérifie le `.env`** : `cat .env | grep API_TOKEN`
|
|
3. **Teste en local** : `curl http://localhost:8888/health`
|
|
4. **Vérifie le firewall** : `sudo ufw status`
|
|
|
|
---
|
|
|
|
**Bon déploiement ! 🚀**
|
|
|
|
Si tout fonctionne, tu devrais pouvoir utiliser l'interface web avec le token sauvegardé, et ne plus avoir à le copier-coller à chaque fois !
|