videotomp3transcriptor/docs/DEPLOIEMENT_OVH.md
StillHammer c0cfc4c28e Add API security with token authentication and localStorage management
- 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>
2025-12-05 12:01:19 +08:00

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 !