← back to Dw Domain Fleet

scripts/deploy-fleet.sh

33 lines

#!/usr/bin/env bash
# deploy-fleet.sh — push dw-domain-fleet to Kamatera, install, pm2 start all 44,
# install nginx vhosts (HTTP only — certbot adds 443 after DNS cutover).
set -euo pipefail

HOST=root@45.61.58.125
REMOTE=/root/public-projects/dw-domain-fleet
LOCAL="$(cd "$(dirname "$0")/.." && pwd)"

echo "==> rsync $LOCAL -> $HOST:$REMOTE"
ssh "$HOST" "mkdir -p $REMOTE"
rsync -az --delete \
  --exclude node_modules --exclude .git --exclude 'logs/*' --exclude '.env*' \
  "$LOCAL/" "$HOST:$REMOTE/"

echo "==> install deps + pm2 start"
ssh "$HOST" "cd $REMOTE && npm install --omit=dev --silent && pm2 start ecosystem.config.js && pm2 save"

echo "==> install nginx vhosts"
ssh "$HOST" "cp $REMOTE/data/nginx/*.conf /etc/nginx/sites-available/ && \
  for f in $REMOTE/data/nginx/*.conf; do \
    b=\$(basename \$f); ln -sf /etc/nginx/sites-available/\$b /etc/nginx/sites-enabled/\$b; \
  done && nginx -t && systemctl reload nginx"

echo "==> smoke test (origin, via Host header)"
FAIL=0
for d in $(ls "$LOCAL/data/nginx/" | sed 's/.conf//'); do
  CODE=$(ssh "$HOST" "curl -s -o /dev/null -w '%{http_code}' -H 'Host: $d' http://127.0.0.1/health" || echo 000)
  if [ "$CODE" != "200" ]; then echo "  FAIL $d ($CODE)"; FAIL=$((FAIL+1)); else echo "  ok   $d"; fi
done
echo "==> deploy complete · $FAIL failures"
exit $FAIL