#!/usr/bin/env bash # ============================================================================= # Imago — Script de préparation du serveur (one-time setup) # ============================================================================= # Usage : # sudo ./scripts/setup.sh # # Ce script : # 1. Installe Docker + Docker Compose si absents # 2. Configure les droits utilisateur (groupe docker) # 3. Vérifie les prérequis système # 4. Crée les répertoires nécessaires # ============================================================================= set -euo pipefail RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m' BLUE='\033[0;34m'; NC='\033[0m' info() { echo -e "${BLUE}[INFO]${NC} $*"; } ok() { echo -e "${GREEN}[OK]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } err() { echo -e "${RED}[ERROR]${NC} $*" >&2; } # ── Vérification root ──────────────────────────────────────── if [[ $EUID -ne 0 ]]; then err "Ce script doit être lancé en root : sudo ./scripts/setup.sh" exit 1 fi # Récupérer l'utilisateur réel (même si lancé via sudo) REAL_USER="${SUDO_USER:-$USER}" REAL_HOME=$(eval echo "~$REAL_USER") echo "" echo "═══════════════════════════════════════════════════════════" echo " Imago — Préparation du serveur" echo " Utilisateur : $REAL_USER" echo "═══════════════════════════════════════════════════════════" echo "" # ── 1. Installer Docker ───────────────────────────────────── install_docker() { if command -v docker &>/dev/null; then ok "Docker déjà installé : $(docker --version)" return fi info "Installation de Docker..." if command -v apt-get &>/dev/null; then # Debian / Ubuntu apt-get update -qq apt-get install -y -qq ca-certificates curl install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] 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 -qq docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ok "Docker installé via apt" elif command -v dnf &>/dev/null; then # Fedora / RHEL dnf -y install dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ok "Docker installé via dnf" else err "Distribution non supportée. Installez Docker manuellement :" err " https://docs.docker.com/engine/install/" exit 1 fi systemctl enable docker --now } # ── 2. Ajouter l'utilisateur au groupe docker ─────────────── configure_user() { if groups "$REAL_USER" | grep -q docker; then ok "Utilisateur $REAL_USER déjà dans le groupe docker" return fi info "Ajout de $REAL_USER au groupe docker..." usermod -aG docker "$REAL_USER" ok "Utilisateur $REAL_USER ajouté au groupe docker" warn "╔══════════════════════════════════════════════════════════╗" warn "║ Déconnectez-vous puis reconnectez-vous pour que les ║" warn "║ changements de groupe prennent effet. ║" warn "║ Ou lancez : newgrp docker ║" warn "╚══════════════════════════════════════════════════════════╝" } # ── 3. Vérifier le système ────────────────────────────────── check_system() { info "Vérification système..." # Espace disque local disk_avail=$(df -BG /var/lib/docker 2>/dev/null | awk 'NR==2 {print $4}' | tr -d 'G' || df -BG / | awk 'NR==2 {print $4}' | tr -d 'G') if [[ ${disk_avail:-0} -lt 10 ]]; then warn "Espace disque faible : ${disk_avail}G disponibles. 10G+ recommandé." else ok "Espace disque : ${disk_avail}G disponibles" fi # RAM local mem_total=$(free -m | awk '/^Mem:/{print $2}') if [[ ${mem_total:-0} -lt 2048 ]]; then warn "RAM faible : ${mem_total}MB. 2GB+ recommandé." else ok "RAM : ${mem_total}MB" fi # Docker fonctionnel if docker info &>/dev/null; then ok "Docker opérationnel" else err "Docker ne répond pas. Vérifiez : systemctl start docker" fi } # ── 4. Créer le répertoire de travail ──────────────────────── create_workdir() { local workdir="${1:-/opt/imago}" if [[ -d "$workdir" ]]; then ok "Répertoire de travail existant : $workdir" return fi info "Création du répertoire de travail : $workdir" mkdir -p "$workdir" chown "$REAL_USER:$REAL_USER" "$workdir" ok "Répertoire créé : $workdir" } # ── Exécution ──────────────────────────────────────────────── install_docker configure_user check_system create_workdir "/opt/imago" echo "" ok "═══ Serveur prêt pour Imago ═══" echo "" echo " Prochaines étapes :" echo " 1. Déconnectez/reconnectez-vous (groupe docker)" echo " 2. Clonez le dépôt :" echo " git clone /opt/imago" echo " 3. Déployez :" echo " cd /opt/imago && ./scripts/deploy.sh" echo ""