← 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'"