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

7.9 KiB

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):

# Générer un token aléatoire de 64 caractères
openssl rand -hex 32

Ou sur Windows (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 :

ssh user@ton-serveur-ovh.com

Navigue vers le dossier du projet :

cd /chemin/vers/videotoMP3Transcriptor

Édite le fichier .env :

nano .env

Ajoute ces lignes (ou modifie si elles existent déjà) :

# ========================================
# 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

# 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:

# 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:

# 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):

curl http://localhost:8888/health

Résultat attendu:

{"status":"ok","timestamp":"2025-..."}

Test avec authentification (devrait échouer sans token):

curl http://localhost:8888/info?url=https://youtube.com/watch?v=test

Résultat attendu:

{"error":"Unauthorized","message":"API key required..."}

Test avec token (devrait marcher):

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 CloudDomainesTon 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)
  1. 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 :

nano .env

Change :

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 :

# 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 :

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:

# 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

# 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

ALLOWED_ORIGINS=*

Solution 2: En production

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:

# 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

# 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 !