154 lines
6.2 KiB
Bash
154 lines
6.2 KiB
Bash
#!/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 <repo-url> /opt/imago"
|
|
echo " 3. Déployez :"
|
|
echo " cd /opt/imago && ./scripts/deploy.sh"
|
|
echo ""
|