#!/usr/bin/env bash # setup.sh — déploiement initial de Folio sur un serveur # # Usage : sudo ./scripts/setup.sh [--web-group www-data] [--data-dir /chemin/data] # # Ce script est idempotent : il peut être relancé sans risque. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT="$SCRIPT_DIR/.." # ─── Paramètres ────────────────────────────────────────────────────────────── WEB_GROUP="www-data" DATA_DIR="$ROOT/data" while [[ $# -gt 0 ]]; do case "$1" in --web-group) WEB_GROUP="$2"; shift 2 ;; --data-dir) DATA_DIR="$2"; shift 2 ;; *) echo "Option inconnue : $1"; exit 1 ;; esac done # ─── Vérifications préalables ───────────────────────────────────────────────── if [[ ! -f "$ROOT/.env" ]]; then echo "✗ Fichier .env manquant. Copier .env.example en .env et remplir les valeurs." exit 1 fi if ! getent group "$WEB_GROUP" > /dev/null 2>&1; then echo "✗ Groupe '$WEB_GROUP' introuvable. Utiliser --web-group ." exit 1 fi # ─── Dépendances PHP ────────────────────────────────────────────────────────── echo "→ Installation des dépendances PHP..." composer install --no-dev --optimize-autoloader --working-dir="$ROOT" # ─── Dossiers requis ───────────────────────────────────────────────────────── echo "→ Création des dossiers..." mkdir -p "$DATA_DIR" mkdir -p "$ROOT/public/_cache" mkdir -p "$ROOT/.sessions" # ─── Permissions ───────────────────────────────────────────────────────────── echo "→ Configuration des permissions (groupe : $WEB_GROUP)..." # data/ : setgid pour héritage de groupe + lecture/écriture propriétaire et groupe chown -R :"$WEB_GROUP" "$DATA_DIR" chmod g+s "$DATA_DIR" find "$DATA_DIR" -type d -exec chmod g+s {} + find "$DATA_DIR" -exec chmod ug+rw {} + # public/_cache/ : créé et écrit par PHP chown -R :"$WEB_GROUP" "$ROOT/public/_cache" chmod g+s "$ROOT/public/_cache" find "$ROOT/public/_cache" -exec chmod ug+rw {} + # .sessions/ : écrit par PHP chown -R :"$WEB_GROUP" "$ROOT/.sessions" chmod 770 "$ROOT/.sessions" # ─── Groupe adm pour lecture des logs Apache ───────────────────────────────── echo "→ Ajout de $WEB_GROUP au groupe adm (logs Apache)..." if getent group adm > /dev/null 2>&1; then usermod -aG adm "$WEB_GROUP" echo " Redémarrer Apache pour que le changement prenne effet : systemctl restart apache2" else echo " Groupe adm absent, ignoré." fi # ─── Migrations SQL ─────────────────────────────────────────────────────────── echo "→ Migrations SQL..." php "$ROOT/database/migrate.php" echo "" echo "✓ Folio est prêt." echo " Vérifier que APP_URL et ADMIN_EMAIL sont corrects dans .env."