Passa al contenuto principale

Deploy SSH (Laravel)

Script interattivo per il deploy dell'applicazione Laravel su staging e produzione via SSH. Introdotto con la PR #120 (aprile 2026).

File: scripts/deploy-ssh.sh

Ambienti

AmbienteURLBranch Git remotoDirectory remota
stagehttps://stage.tidiko.ai/stagestage.tidiko.ai
app / prodhttps://app.tidiko.ai/mainapp.tidiko.ai

Utilizzo

# Modalità interattiva (chiede l'ambiente prima del build)
./scripts/deploy-ssh.sh

# Deploy diretto
./scripts/deploy-ssh.sh stage
./scripts/deploy-ssh.sh app
./scripts/deploy-ssh.sh prod # alias di app

# Help
./scripts/deploy-ssh.sh --help

Flusso di deploy

Passi dettagliati

  1. Build localenpm run build genera gli asset Vite in public/build/
  2. Verifica manifest — valida manifest.json e calcola hash SHA256
  3. Aggiornamento repo remotogit fetch + git pull sulla directory del server
  4. Composer install — sempre eseguito con flag produzione (--no-dev --optimize-autoloader)
  5. Migrazioni — controlla migrate:status e applica solo se ci sono migration pending
  6. Upload asset — copia public/build/ sul server via scp (Linux/Mac) o pscp (Windows)
  7. Verifica hash — confronta SHA256 del manifest locale e remoto
  8. Cache refreshphp artisan refresh-cache sul server
  9. Smoke check — richiesta HTTP all'URL pubblico dell'ambiente

Prerequisiti

Linux / macOS

  • ssh, scp, sshpass
  • npm, node
  • sha256sum o openssl

Windows (Git Bash)

Il script rileva automaticamente l'ambiente e usa PuTTY:

  • plink — comandi SSH remoti
  • pscp — upload file

Variabili richieste in .env:

VariabileDescrizione
SSH_SERVER_PASSWORDPassword SSH (obbligatoria)

Variabili opzionali in .env:

VariabileDescrizione
PUTTY_SESSION_NAMESessione PuTTY salvata (alternativa a host/port)
PUTTY_HOST_KEYFingerprint host key (default: ed25519 preconfigurato)

Connessione server

ParametroValore
Host46.30.247.12
Porta10112
Utentetidikoai

Output finale

Al termine lo script stampa un riepilogo con:

  • Ambiente e branch
  • Stato migrazioni e composer install
  • Hash manifest locale/remoto
  • Esito smoke check HTTP

Note operative

  • Lo script chiede l'ambiente prima del build npm per evitare build inutili
  • composer install precede sempre le migrazioni (nuove migration possono dipendere da nuovi package)
  • La cache bootstrap/cache/packages.php viene pulita dopo composer per evitare riferimenti a dev-only providers (Telescope, ecc.)
  • L'output remoto di artisan usa --no-ansi per evitare codici ANSI nei log SSH

Riferimenti

  • README Laravel: sezione deploy
  • Checklist regressione Alpine: docs/alpine-regression-checklist.md (repo neting-ai)