From fd2397ff90a28334908de6da86e6d893d0728d43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Fri, 15 May 2026 00:10:30 +0200 Subject: [PATCH] =?UTF-8?q?feat=20:=20script=20setup.sh=20pour=20le=20d?= =?UTF-8?q?=C3=A9ploiement=20initial=20de=20Folio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Crée les dossiers requis, applique setgid sur data/ et _cache/ pour que les fichiers héritent du groupe web (www-data) quelle que soit leur origine (PHP ou rsync), installe les dépendances et lance les migrations SQL. Co-Authored-By: Claude Sonnet 4.6 --- scripts/setup.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 scripts/setup.sh diff --git a/scripts/setup.sh b/scripts/setup.sh new file mode 100755 index 0000000..8bff73a --- /dev/null +++ b/scripts/setup.sh @@ -0,0 +1,69 @@ +#!/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" + +# ─── 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."