#!/bin/bash # Script d'installation automatique de BricoLoc sur VPS # Usage: bash install-vps.sh set -e echo "======================================" echo "Installation de BricoLoc sur VPS" echo "======================================" echo "" # Couleurs pour les messages GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color # Fonction pour afficher les messages print_success() { echo -e "${GREEN}✓ $1${NC}" } print_warning() { echo -e "${YELLOW}⚠ $1${NC}" } print_error() { echo -e "${RED}✗ $1${NC}" } # Vérifier si on est root if [ "$EUID" -eq 0 ]; then print_error "Ne pas exécuter ce script en tant que root" exit 1 fi # 1. Mise à jour du système echo "1. Mise à jour du système..." sudo apt update && sudo apt upgrade -y print_success "Système mis à jour" # 2. Installation de Node.js echo "" echo "2. Installation de Node.js 20.x..." if ! command -v node &> /dev/null; then curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs print_success "Node.js installé: $(node --version)" else print_success "Node.js déjà installé: $(node --version)" fi # 3. Installation de Git echo "" echo "3. Installation de Git..." if ! command -v git &> /dev/null; then sudo apt install -y git print_success "Git installé: $(git --version)" else print_success "Git déjà installé: $(git --version)" fi # 4. Installation de PM2 echo "" echo "4. Installation de PM2..." if ! command -v pm2 &> /dev/null; then sudo npm install -g pm2 print_success "PM2 installé: $(pm2 --version)" else print_success "PM2 déjà installé: $(pm2 --version)" fi # 5. Installation de Nginx echo "" echo "5. Installation de Nginx..." if ! command -v nginx &> /dev/null; then sudo apt install -y nginx print_success "Nginx installé: $(nginx -v 2>&1)" else print_success "Nginx déjà installé: $(nginx -v 2>&1)" fi # 6. Configuration du pare-feu echo "" echo "6. Configuration du pare-feu..." sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw --force enable print_success "Pare-feu configuré" # 7. Clonage du projet echo "" echo "7. Clonage du projet..." mkdir -p ~/apps cd ~/apps if [ -d "bricolociaac" ]; then print_warning "Le dossier bricolociaac existe déjà" read -p "Voulez-vous le supprimer et le re-cloner ? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then rm -rf bricolociaac git clone https://github.com/morepudding/bricolociaac.git print_success "Projet cloné depuis GitHub" else cd bricolociaac git pull origin main print_success "Projet mis à jour" fi else git clone https://github.com/morepudding/bricolociaac.git print_success "Projet cloné depuis GitHub" fi read -p "Voulez-vous le supprimer et réinstaller ? (y/N) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then rm -rf bricolociaac git clone https://github.com/morepudding/bricolociaac.git print_success "Projet cloné" else print_warning "Installation annulée" exit 0 fi else git clone https://github.com/morepudding/bricolociaac.git print_success "Projet cloné" fi # 8. Installation des dépendances echo "" echo "8. Installation des dépendances..." cd bricolociaac/apps/legacy-app npm install print_success "Dépendances installées" # 9. Initialisation de la base de données echo "" echo "9. Initialisation de la base de données..." npm run db:reset print_success "Base de données initialisée" # 10. Création des dossiers nécessaires echo "" echo "10. Création des dossiers nécessaires..." mkdir -p src/uploads mkdir -p logs mkdir -p ~/backups/bricoloc print_success "Dossiers créés" # 11. Configuration du fichier .env echo "" echo "11. Configuration des variables d'environnement..." if [ ! -f .env ]; then # Générer un secret aléatoire SECRET=$(openssl rand -base64 32) cat > .env << EOF NODE_ENV=production PORT=3000 SESSION_SECRET=${SECRET} EOF print_success "Fichier .env créé" else print_warning "Fichier .env existe déjà" fi # 12. Démarrage avec PM2 echo "" echo "12. Démarrage de l'application..." cd ~/apps/bricolociaac pm2 start ecosystem.config.js pm2 save print_success "Application démarrée avec PM2" # 13. Configuration du démarrage automatique echo "" echo "13. Configuration du démarrage automatique..." pm2 startup | grep -v PM2 | bash print_success "Démarrage automatique configuré" # 14. Configuration de Nginx echo "" echo "14. Configuration de Nginx..." USER=$(whoami) # Demander le nom de domaine read -p "Entrez votre nom de domaine (ex: defder.fr) ou appuyez sur Entrée pour utiliser l'IP: " DOMAIN if [ -z "$DOMAIN" ]; then DOMAIN="_" print_warning "Utilisation de l'IP du serveur" else print_success "Configuration pour le domaine: $DOMAIN" fi sudo tee /etc/nginx/sites-available/bricoloc > /dev/null << EOF server { listen 80; server_name ${DOMAIN} www.${DOMAIN}; access_log /var/log/nginx/bricoloc-access.log; error_log /var/log/nginx/bricoloc-error.log; 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; } location /css/ { alias /home/${USER}/apps/bricolociaac/apps/legacy-app/src/public/css/; } location /js/ { alias /home/${USER}/apps/bricolociaac/apps/legacy-app/src/public/js/; } location /uploads/ { alias /home/${USER}/apps/bricolociaac/apps/legacy-app/src/uploads/; } } EOF # Activer la configuration sudo ln -sf /etc/nginx/sites-available/bricoloc /etc/nginx/sites-enabled/ sudo rm -f /etc/nginx/sites-enabled/default # Tester et redémarrer Nginx sudo nginx -t sudo systemctl restart nginx print_success "Nginx configuré et redémarré" # 15. Affichage des informations finales echo "" echo "======================================" echo "Installation terminée avec succès !" echo "======================================" echo "" print_success "Application accessible sur:" if [ "$DOMAIN" != "_" ]; then echo " → http://${DOMAIN}" echo " → http://www.${DOMAIN}" echo "" print_warning "Pour activer HTTPS (recommandé):" echo " sudo apt install -y certbot python3-certbot-nginx" echo " sudo certbot --nginx -d ${DOMAIN} -d www.${DOMAIN}" else echo " → http://$(curl -s ifconfig.me)" echo " → http://localhost (depuis le VPS)" fi echo "" print_success "Commandes utiles:" echo " → pm2 status # Voir le statut de l'application" echo " → pm2 logs bricoloc-legacy # Voir les logs" echo " → pm2 restart bricoloc-legacy # Redémarrer l'application" echo " → pm2 monit # Monitorer les ressources" echo " → cd ~/apps/bricolociaac && git pull origin main # Mettre à jour" echo "" print_warning "IMPORTANT: Cette application contient des vulnérabilités intentionnelles" print_warning "Ne l'exposez pas sur Internet sans corriger les bugs de sécurité" echo "" print_success "Documentation complète: ~/apps/bricolociaac/DEPLOYMENT_VPS.md" echo ""