#!/usr/bin/env bash # dev-local.sh — Lance l'API Flask + le serveur Vite en mode développement # # Usage : bash scripts/dev-local.sh # # Pour accéder à l'interface depuis votre machine locale, ouvrez un tunnel SSH : # ssh -L 5173:localhost:5173 -L 8080:localhost:8080 utilisateur@votre-serveur # Puis ouvrez http://localhost:5173 dans votre navigateur. # # Prérequis : # - PostgreSQL en cours d'exécution et DATABASE_URL configurée dans .env # - Virtualenv Python présent (.venv/) — voir section 7 de docs/INSTALL_ROCKY.md # - pnpm installé (npm install -g pnpm) ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" ENV_FILE="$ROOT/.env" # ─── Vérifications préalables ──────────────────────────────────────────────── if [ ! -f "$ENV_FILE" ]; then echo "Erreur : fichier .env introuvable." echo "Copiez .env.example et remplissez les valeurs :" echo " cp \"$ROOT/.env.example\" \"$ENV_FILE\" && \${EDITOR:-vim} \"$ENV_FILE\"" exit 1 fi if [ ! -f "$ROOT/.venv/bin/python" ]; then echo "Erreur : virtualenv Python introuvable (.venv/bin/python)." echo "Consultez la section 7 de docs/INSTALL_ROCKY.md pour le créer." exit 1 fi if ! command -v pnpm &>/dev/null; then echo "Erreur : pnpm introuvable." echo "Installez-le avec : npm install -g pnpm" exit 1 fi # ─── Chargement de l'environnement ─────────────────────────────────────────── set -a # shellcheck disable=SC1090 source "$ENV_FILE" set +a FLASK_PORT="${PORT:-8080}" VITE_PORT=5173 # ─── Dépendances Node ───────────────────────────────────────────────────────── if [ ! -d "$ROOT/node_modules" ]; then echo "Installation des dépendances Node (première exécution)…" (cd "$ROOT" && pnpm install --frozen-lockfile) fi # ─── Bannière ──────────────────────────────────────────────────────────────── echo "" echo "┌──────────────────────────────────────────────────────────────┐" echo "│ La Voix du Peuple — développement local │" echo "├──────────────────────────────────────────────────────────────┤" printf "│ API Flask → http://localhost:%-5s │\n" "${FLASK_PORT}" printf "│ Interface → http://localhost:%-5s │\n" "${VITE_PORT}" echo "├──────────────────────────────────────────────────────────────┤" echo "│ Tunnel SSH depuis votre machine locale : │" printf "│ ssh -L %s:localhost:%s \\\\\n│ -L %s:localhost:%s utilisateur@serveur │\n" \ "${VITE_PORT}" "${VITE_PORT}" "${FLASK_PORT}" "${FLASK_PORT}" printf "│ Puis ouvrez : http://localhost:%-5s │\n" "${VITE_PORT}" echo "└──────────────────────────────────────────────────────────────┘" echo "" # ─── Nettoyage à la sortie ──────────────────────────────────────────────────── cleanup() { echo "" echo "Arrêt des serveurs…" kill "$FLASK_PID" "$VITE_PID" 2>/dev/null || true wait "$FLASK_PID" "$VITE_PID" 2>/dev/null || true echo "Arrêté." } trap cleanup EXIT INT TERM # ─── Démarrage de Flask ─────────────────────────────────────────────────────── echo "→ Démarrage de Flask (port ${FLASK_PORT})…" ( cd "$ROOT/artifacts/flask-api" PORT="${FLASK_PORT}" "$ROOT/.venv/bin/python" app.py ) & FLASK_PID=$! # Laisser Flask s'initialiser (init_db inclus) sleep 2 if ! kill -0 "$FLASK_PID" 2>/dev/null; then echo "" echo "Erreur : Flask ne démarre pas." echo "Vérifiez DATABASE_URL et les autres variables dans .env." echo "Logs disponibles dans le terminal ci-dessus." exit 1 fi # ─── Démarrage du serveur Vite ──────────────────────────────────────────────── echo "→ Démarrage du serveur Vite (port ${VITE_PORT})…" ( cd "$ROOT/artifacts/voix-du-peuple" # PORT non défini → Vite retombe sur 5173 (voir vite.config.ts) # VITE_API_URL pointe vers Flask local, accessible via le tunnel SSH unset PORT VITE_API_URL="http://localhost:${FLASK_PORT}" pnpm dev ) & VITE_PID=$! echo "" echo "Les deux serveurs sont démarrés. Appuyez sur Ctrl+C pour arrêter." echo "" # Attendre la fin de l'un ou l'autre des processus wait -n "$FLASK_PID" "$VITE_PID" 2>/dev/null || wait "$FLASK_PID" "$VITE_PID"