90 lines
2.6 KiB
Bash
Executable File
90 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Avvia l'ambiente di sviluppo completo (vedi docs/AVVIO_LOCALE.md):
|
|
# - backoffice Laravel (API + admin) -> http://localhost:8000
|
|
# - app cliente preventivi (Vue) -> http://localhost:5199
|
|
# - configuratore 3D (Vite) -> http://localhost:5173
|
|
# Ctrl+C ferma tutti i servizi.
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
|
BACKOFFICE="$ROOT/backoffice"
|
|
CLIENTE="$BACKOFFICE/cliente"
|
|
|
|
port_in_use() { lsof -nP -iTCP:"$1" -sTCP:LISTEN >/dev/null 2>&1; }
|
|
|
|
# --- Controlli preliminari ---------------------------------------------------
|
|
for cmd in php pnpm lsof; do
|
|
command -v "$cmd" >/dev/null || { echo "Errore: '$cmd' non trovato nel PATH." >&2; exit 1; }
|
|
done
|
|
|
|
if ! port_in_use 3306; then
|
|
echo "Errore: MySQL non risponde sulla porta 3306. Avvialo (es. da Herd) e riprova." >&2
|
|
exit 1
|
|
fi
|
|
|
|
for port in 8000 5199 5173; do
|
|
if port_in_use "$port"; then
|
|
echo "Errore: la porta $port è già occupata:" >&2
|
|
lsof -nP -iTCP:"$port" -sTCP:LISTEN >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
[ -d "$BACKOFFICE/vendor" ] || (cd "$BACKOFFICE" && composer install)
|
|
[ -d "$CLIENTE/node_modules" ] || (cd "$CLIENTE" && pnpm install)
|
|
[ -d "$ROOT/node_modules" ] || (cd "$ROOT" && pnpm install)
|
|
|
|
# --- Avvio servizi -----------------------------------------------------------
|
|
PIDS=()
|
|
|
|
# Termina un processo e tutti i suoi discendenti (pnpm -> vite, artisan serve -> php -S).
|
|
kill_tree() {
|
|
local child
|
|
for child in $(pgrep -P "$1" 2>/dev/null); do kill_tree "$child"; done
|
|
kill -TERM "$1" 2>/dev/null || true
|
|
}
|
|
|
|
cleanup() {
|
|
trap - INT TERM EXIT
|
|
echo
|
|
echo "Arresto dei servizi..."
|
|
for pid in "${PIDS[@]}"; do kill_tree "$pid"; done
|
|
wait 2>/dev/null || true
|
|
}
|
|
trap cleanup EXIT
|
|
trap 'exit 0' INT TERM
|
|
|
|
# Esegue un comando in una cartella prefissando ogni riga di output con un'etichetta.
|
|
run() {
|
|
local label="$1" dir="$2"; shift 2
|
|
(cd "$dir" && exec "$@") > >(sed -u "s/^/[$label] /") 2>&1 &
|
|
PIDS+=($!)
|
|
}
|
|
|
|
run "laravel" "$BACKOFFICE" php artisan serve --port=8000
|
|
run "cliente" "$CLIENTE" pnpm dev
|
|
run "config " "$ROOT" pnpm dev
|
|
|
|
cat <<EOF
|
|
|
|
Servizi in avvio:
|
|
Configuratore http://localhost:5173/?sistema=pvc&type=finestra_2_ante
|
|
App cliente http://localhost:5199
|
|
API http://localhost:8000/api
|
|
Admin http://localhost:8000/admin (admin@kreiosinfissi.it / password)
|
|
|
|
Ctrl+C per fermare tutto.
|
|
|
|
EOF
|
|
|
|
# Se uno dei servizi termina, ferma anche gli altri.
|
|
while true; do
|
|
for pid in "${PIDS[@]}"; do
|
|
if ! kill -0 "$pid" 2>/dev/null; then
|
|
echo "Un servizio si è fermato, arresto degli altri." >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
sleep 1
|
|
done
|