You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
352 lines
7.3 KiB
Markdown
352 lines
7.3 KiB
Markdown
|
2 months ago
|
# 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`
|