Fare il deploy di un sito statico non dovrebbe richiedere dieci passaggi. Ecco lo script che li ha ridotti a uno.

Il problema

Ogni deploy richiedeva:

  1. Build del progetto in locale
  2. rsync della cartella di output sul VPS
  3. SSH per ricaricare Nginx
  4. Controllo dei log

Ripetitivo, soggetto a errori, facile dimenticare un passaggio.

La soluzione

Uno script Bash di 30 righe che esegue tutti e quattro i passi in sequenza e si interrompe con un errore se qualcosa va storto.

#!/usr/bin/env bash
set -euo pipefail

BUILD_DIR="./dist"
REMOTE_USER="deploy"
REMOTE_HOST="vps.example.com"
REMOTE_PATH="/var/www/site"

echo "[1/3] Build in corso..."
npm run build

echo "[2/3] Sincronizzazione file..."
rsync -az --delete "$BUILD_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"

echo "[3/3] Ricarico Nginx..."
ssh "$REMOTE_USER@$REMOTE_HOST" "sudo systemctl reload nginx"

echo "Fatto."

Il dettaglio fondamentale è set -euo pipefail — qualsiasi comando fallito interrompe l’intero script invece di proseguire silenziosamente.

Renderlo portabile

Salva la configurazione remota in un file .env alla radice del repo e caricalo all’inizio dello script. Aggiungi .env a .gitignore. Fine.

Usato in produzione per il progetto Laravel Finance App.