#!/usr/bin/env bash # ============================================================================= # server-setup.sh — Installation initiale du CT Proxmox # # À exécuter UNE SEULE FOIS en root sur le CT (Debian/Ubuntu) # après avoir cloné le repo ou transféré ce script. # # Pré-requis : CT Proxmox avec accès internet # ============================================================================= set -euo pipefail REPO_URL="${1:-}" # ex: git@github.com:toi/crowdlending-app.git APP_DIR="/opt/crowdlending-app" GH_USER="${SUDO_USER:-root}" echo "" echo "========================================" echo " Setup serveur — Crowdlending App" echo "========================================" # 1. Dépendances système echo "" echo "📦 Installation des dépendances système..." apt-get update -qq apt-get install -y --no-install-recommends \ git \ curl \ ca-certificates \ gnupg \ sqlite3 \ ufw # 2. Docker (méthode officielle) echo "" echo "🐋 Installation de Docker..." if ! command -v docker &>/dev/null; then install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \ > /etc/apt/sources.list.d/docker.list apt-get update -qq apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin systemctl enable --now docker echo " ✓ Docker installé : $(docker --version)" else echo " ✓ Docker déjà présent : $(docker --version)" fi # 3. Clé SSH pour GitHub (si pas encore présente) echo "" echo "🔑 Clé SSH..." if [ ! -f ~/.ssh/id_ed25519 ]; then ssh-keygen -t ed25519 -C "crowdlending-deploy" -f ~/.ssh/id_ed25519 -N "" echo "" echo " ┌─────────────────────────────────────────────────────────┐" echo " │ Ajoute cette clé publique dans ton repo GitHub/Gitea │" echo " │ (Settings → Deploy keys → Add deploy key) │" echo " └─────────────────────────────────────────────────────────┘" echo "" cat ~/.ssh/id_ed25519.pub echo "" read -r -p " Appuie sur Entrée une fois la clé ajoutée dans GitHub..." else echo " ✓ Clé SSH déjà présente" fi # 4. Clone du repo echo "" echo "📂 Clonage du repo..." if [ -d "$APP_DIR/.git" ]; then echo " ✓ Repo déjà cloné dans $APP_DIR" else if [ -z "$REPO_URL" ]; then read -r -p " URL du repo Git (ex: git@github.com:toi/crowdlending-app.git) : " REPO_URL fi git clone "$REPO_URL" "$APP_DIR" echo " ✓ Repo cloné dans $APP_DIR" fi cd "$APP_DIR" # 5. Fichier .env echo "" echo "⚙ Configuration .env..." if [ ! -f ".env" ]; then cp .env.example .env # Générer un JWT_SECRET aléatoire JWT_SECRET=$(openssl rand -hex 32) sed -i "s/change-me-in-production/$JWT_SECRET/" .env echo "" echo " ┌──────────────────────────────────────────────────────────┐" echo " │ Fichier .env créé avec un JWT_SECRET aléatoire. │" echo " │ Vérifie et adapte si besoin : nano $APP_DIR/.env │" echo " └──────────────────────────────────────────────────────────┘" else echo " ✓ .env déjà présent" fi # 6. Permissions du script de déploiement chmod +x "$APP_DIR/deploy.sh" # 7. Pare-feu (UFW) echo "" echo "🔒 Configuration du pare-feu (UFW)..." ufw allow OpenSSH ufw allow 8080/tcp comment "crowdlending frontend" ufw --force enable echo " ✓ Ports ouverts : SSH + 8080" # 8. Premier build et démarrage echo "" echo "🚀 Premier build et démarrage..." docker compose build docker compose up -d echo "" echo "============================================" echo " ✅ Installation terminée !" echo "" echo " App disponible sur : http://$(hostname -I | awk '{print $1}'):8080" echo "" echo " Commandes utiles :" echo " cd $APP_DIR" echo " ./deploy.sh → déployer une mise à jour" echo " docker compose logs -f → suivre les logs" echo " docker compose ps → état des containers" echo "============================================"