← 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