# Guide de déploiement sur VPS ## Prérequis - Un VPS avec Ubuntu 20.04+ (ou Debian) - Accès SSH au VPS - Nom de domaine (optionnel mais recommandé) ## 1. Connexion au VPS ```bash ssh votre-utilisateur@votre-vps-ip ``` ## 2. Installation des dépendances système ```bash # Mise à jour du système sudo apt update && sudo apt upgrade -y # Installation de Node.js 20.x curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs # Installation de Git sudo apt install -y git # Installation de PM2 (gestionnaire de processus) sudo npm install -g pm2 # Installation de Nginx (serveur web) sudo apt install -y nginx # Vérification node --version # Devrait afficher v20.x.x npm --version git --version pm2 --version nginx -v ``` ## 3. Configuration du pare-feu ```bash # Autoriser SSH, HTTP et HTTPS sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable sudo ufw status ``` ## 4. Clonage du projet ```bash # Créer un dossier pour les applications mkdir -p ~/apps cd ~/apps # Cloner le dépôt git clone https://github.com/morepudding/bricolociaac.git cd bricolociaac ``` ## 5. Configuration de l'application Legacy ```bash # Aller dans le dossier legacy cd apps/legacy-app # Installer les dépendances npm install # Initialiser la base de données npm run db:reset # Créer le dossier uploads si nécessaire mkdir -p src/uploads # Créer le dossier logs mkdir -p logs ``` ## 6. Configuration des variables d'environnement Créer un fichier `.env` dans `apps/legacy-app/` : ```bash nano apps/legacy-app/.env ``` Ajouter : ```env NODE_ENV=production PORT=3000 SESSION_SECRET=votre-secret-tres-securise-ici ``` ## 7. Démarrage avec PM2 ```bash # Revenir à la racine du projet cd ~/apps/bricolociaac # Démarrer l'application avec PM2 pm2 start ecosystem.config.js # Vérifier le statut pm2 status # Voir les logs pm2 logs bricoloc-legacy # Configurer PM2 pour démarrer au boot pm2 startup pm2 save ``` ## 8. Configuration de Nginx (reverse proxy) ```bash # Créer la configuration Nginx sudo nano /etc/nginx/sites-available/bricoloc ``` Ajouter cette configuration : ```nginx server { listen 80; server_name defder.fr www.defder.fr; # Logs access_log /var/log/nginx/bricoloc-access.log; error_log /var/log/nginx/bricoloc-error.log; # Limite de taille des uploads client_max_body_size 10M; location / { proxy_pass http://localhost:3000; 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; proxy_cache_bypass $http_upgrade; } # Servir les fichiers statiques directement location /css/ { alias /home/votre-utilisateur/apps/bricolociaac/apps/legacy-app/src/public/css/; } location /js/ { alias /home/votre-utilisateur/apps/bricolociaac/apps/legacy-app/src/public/js/; } location /uploads/ { alias /home/votre-utilisateur/apps/bricolociaac/apps/legacy-app/src/uploads/; } } ``` **Note:** Remplacez `votre-utilisateur` par votre nom d'utilisateur réel. ```bash # Activer la configuration sudo ln -s /etc/nginx/sites-available/bricoloc /etc/nginx/sites-enabled/ # Tester la configuration sudo nginx -t # Redémarrer Nginx sudo systemctl restart nginx ``` ## 9. Configuration HTTPS avec Let's Encrypt (optionnel mais recommandé) ```bash # Installer Certbot sudo apt install -y certbot python3-certbot-nginx # Obtenir un certificat SSL sudo certbot --nginx -d defder.fr -d www.defder.fr # Le renouvellement automatique est déjà configuré # Vérifier avec: sudo certbot renew --dry-run ``` ## 10. Accès à l'application - **Votre site:** `https://defder.fr` - **Sans SSL (temporaire):** `http://defder.fr` ## Gestion de l'application ### Commandes PM2 utiles ```bash # Voir le statut pm2 status # Redémarrer l'application pm2 restart bricoloc-legacy # Arrêter l'application pm2 stop bricoloc-legacy # Voir les logs en temps réel pm2 logs bricoloc-legacy # Voir les logs avec filtre pm2 logs bricoloc-legacy --lines 100 # Monitorer les ressources pm2 monit ``` ### Mise à jour de l'application ```bash cd ~/apps/bricolociaac # Sauvegarder la base de données (optionnel) cp apps/legacy-app/data/*.db ~/backups/ # Récupérer les dernières modifications git pull origin main # Réinstaller les dépendances si nécessaire cd apps/legacy-app npm install # Redémarrer l'application pm2 restart bricoloc-legacy ``` ### Sauvegardes ```bash # Créer un script de sauvegarde nano ~/backup-bricoloc.sh ``` Contenu du script : ```bash #!/bin/bash BACKUP_DIR=~/backups/bricoloc mkdir -p $BACKUP_DIR DATE=$(date +%Y%m%d_%H%M%S) # Sauvegarder la base de données cp ~/apps/bricolociaac/apps/legacy-app/data/*.db $BACKUP_DIR/db_$DATE.db # Sauvegarder les uploads tar -czf $BACKUP_DIR/uploads_$DATE.tar.gz ~/apps/bricolociaac/apps/legacy-app/src/uploads/ # Garder seulement les 7 dernières sauvegardes cd $BACKUP_DIR ls -t | tail -n +8 | xargs rm -f echo "Sauvegarde terminée: $DATE" ``` Rendre exécutable et configurer dans cron : ```bash chmod +x ~/backup-bricoloc.sh # Ajouter à crontab (sauvegarde quotidienne à 2h du matin) crontab -e # Ajouter: 0 2 * * * /home/votre-utilisateur/backup-bricoloc.sh >> /home/votre-utilisateur/backup.log 2>&1 ``` ## Monitoring et logs ```bash # Logs Nginx sudo tail -f /var/log/nginx/bricoloc-access.log sudo tail -f /var/log/nginx/bricoloc-error.log # Logs PM2 pm2 logs bricoloc-legacy # Logs système sudo journalctl -u nginx -f ``` ## Dépannage ### L'application ne démarre pas ```bash # Vérifier les logs pm2 logs bricoloc-legacy --err # Vérifier les permissions ls -la ~/apps/bricolociaac/apps/legacy-app/ # Tester manuellement cd ~/apps/bricolociaac/apps/legacy-app node src/server.js ``` ### Nginx renvoie 502 Bad Gateway ```bash # Vérifier que l'application tourne pm2 status # Vérifier les logs Nginx sudo tail -f /var/log/nginx/bricoloc-error.log # Vérifier que le port 3000 est en écoute sudo netstat -tlnp | grep 3000 ``` ### Base de données corrompue ```bash cd ~/apps/bricolociaac/apps/legacy-app npm run db:reset pm2 restart bricoloc-legacy ``` ## Sécurité importante ⚠️ **Cette application contient des vulnérabilités intentionnelles pour la formation.** Avant de la rendre publique sur Internet : 1. Corriger tous les bugs listés dans `apps/legacy-app/docs/BUGS.md` 2. Implémenter une vraie authentification 3. Ajouter CSRF protection 4. Valider tous les fichiers uploadés 5. Utiliser HTTPS obligatoirement 6. Configurer un vrai secret de session (pas celui en dur dans le code) 7. Limiter les tentatives de connexion 8. Mettre en place un système de logs et monitoring 9. Configurer fail2ban pour bloquer les tentatives d'intrusion 10. Garder le système et les dépendances à jour ## Ressources système recommandées - **Minimum:** 1 CPU, 1 GB RAM, 10 GB disque - **Recommandé:** 2 CPU, 2 GB RAM, 20 GB disque ## Support Pour toute question ou problème : 1. Vérifier les logs : `pm2 logs bricoloc-legacy` 2. Consulter la documentation dans `/docs` 3. Vérifier le statut : `pm2 status` et `sudo systemctl status nginx`