← back to Fentucci
deploy-kamatera.sh
68 lines
#!/bin/bash
# deploy-kamatera.sh — Fentucci → Kamatera deploy
# Usage: ./deploy-kamatera.sh [--dry-run] [--health-only]
set -euo pipefail
KAMATERA="root@45.61.58.125"
LOCAL_DIR="$(cd "$(dirname "$0")" && pwd)"
REMOTE_DIR="/root/Projects/Designer-Wallcoverings/DW-Websites/Fentucci"
PM2_NAME="fentucci-website"
DOMAIN="fentucci.com"
PORT="9880"
DRY_RUN=false
HEALTH_ONLY=false
case "${1:-}" in
--dry-run) DRY_RUN=true ;;
--health-only) HEALTH_ONLY=true ;;
esac
run() { $DRY_RUN && echo "[DRY-RUN] $*" || eval "$@"; }
health_check() {
echo "=== health check ==="
echo -n " origin direct (HTTP :$PORT): "
curl -sI -o /dev/null -w "%{http_code}\n" -m 10 "http://45.61.58.125:$PORT/" || echo FAIL
echo -n " HTTPS (direct IP): "
curl -sI -o /dev/null -w "%{http_code}\n" -m 10 --resolve "fentucci.com:443:45.61.58.125" "https://$DOMAIN/" || echo FAIL
echo -n " www subdomain: "
curl -sI -o /dev/null -w "%{http_code}\n" -m 10 "https://www.$DOMAIN/" || echo FAIL
echo -n " /health endpoint: "
curl -s -m 10 "http://45.61.58.125:$PORT/health" | python3 -c "import json,sys; d=json.load(sys.stdin); print('OK —', d.get('products','?'), 'products')" 2>/dev/null || echo FAIL
}
$HEALTH_ONLY && { health_check; exit 0; }
echo "=== SSH check ==="
run "ssh -o ConnectTimeout=8 $KAMATERA 'hostname && uptime'"
echo ""
echo "=== rsync → $REMOTE_DIR ==="
run "ssh $KAMATERA 'mkdir -p $REMOTE_DIR/data $REMOTE_DIR/logs $REMOTE_DIR/scripts'"
run "rsync -az --delete \
--exclude=node_modules --exclude=.git --exclude='*.log' --exclude='.env' \
--exclude='logs/' --exclude='data/products.json' \
'$LOCAL_DIR/' '$KAMATERA:$REMOTE_DIR/'"
echo ""
echo "=== npm install ==="
run "ssh $KAMATERA 'cd $REMOTE_DIR && npm install --omit=dev --no-fund --no-audit'"
echo ""
echo "=== catalog refresh ==="
run "ssh $KAMATERA 'bash $REMOTE_DIR/scripts/refresh-catalog.sh'"
echo ""
echo "=== pm2 ==="
run "ssh $KAMATERA 'cd $REMOTE_DIR && pm2 startOrReload ecosystem.config.js && pm2 save'"
echo ""
sleep 3
health_check
echo ""
echo "=== deploy complete ==="
echo " Site: https://$DOMAIN/"
echo " pm2: ssh $KAMATERA 'pm2 logs $PM2_NAME --lines 30'"