← back to NationalPaperHangers

deploy-measure-TK10428.sh

69 lines

#!/usr/bin/env bash
# TK-10428 — Fix the store-wide "How many rolls do I need?" button.
# Two prod actions on Kamatera (Steve-approved: "Fix-forward now"):
#   (A) ship the /measure route + assets to the live NPH app (additive-only, verified)
#   (B) stand up nph.designerwallcoverings.com HTTPS vhost (IP-bound :443) + LE cert
# Idempotent + safe: backup, node -c, nginx -t, x2 reload, live verify. Run from Mac2.
set -euo pipefail

K=root@45.61.58.125
IP=45.61.58.125
KDIR=/root/Projects/NationalPaperHangers
NPHM="$HOME/Projects/NationalPaperHangers"
DOMAIN=nph.designerwallcoverings.com
PORT=9765
STAMP=$(date +%s)
BTN_URL="w=55.0&sku=DWLA-435111-Sample&mode=width"   # the exact live PDP button params

echo "== [1/6] Backup live routes/public.js on Kamatera =="
ssh "$K" "cd $KDIR && cp routes/public.js routes/public.js.bak-TK10428-$STAMP && echo '  backed up -> routes/public.js.bak-TK10428-$STAMP'"

echo "== [2/6] Ship measure-feature files (additive) Mac2 -> Kamatera =="
scp "$NPHM/routes/public.js"          "$K:$KDIR/routes/public.js"
scp "$NPHM/views/public/measure.ejs"  "$K:$KDIR/views/public/measure.ejs"
scp "$NPHM/public/js/measure-kit.js"  "$K:$KDIR/public/js/measure-kit.js"
scp "$NPHM/public/js/room-measure.js" "$K:$KDIR/public/js/room-measure.js"

echo "== [3/6] Syntax-check + pm2 restart NPH (aborts if node -c fails) =="
ssh "$K" "cd $KDIR \
  && node -c routes/public.js \
  && pm2 restart national-paper-hangers --update-env \
  && sleep 2 \
  && curl -s -o /dev/null -w '  localhost:$PORT/measure -> HTTP %{http_code}\n' 'http://127.0.0.1:$PORT/measure?$BTN_URL'"

echo "== [4/6] Issue LE cert for $DOMAIN via HTTP-01 webroot (DW CF zone is AT its 200-record cap → DNS-01 fails 'Record quota exceeded') =="
ssh "$K" "certbot certonly --webroot -w /var/www/certbot \
  -d $DOMAIN --non-interactive --agree-tos \
  -m steve@designerwallcoverings.com --keep-until-expiring"

echo "== [5/6] Write IP-bound vhost + reload nginx (guarded by nginx -t) =="
ssh "$K" "cat > /etc/nginx/sites-available/$DOMAIN.conf <<'NGINX'
server {
    server_name $DOMAIN;
    location / {
        proxy_pass http://127.0.0.1:$PORT;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
    }
    listen $IP:443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
    listen $IP:80;
    server_name $DOMAIN;
    return 301 https://\$host\$request_uri;
}
NGINX
ln -sf /etc/nginx/sites-available/$DOMAIN.conf /etc/nginx/sites-enabled/$DOMAIN.conf
nginx -t && systemctl reload nginx && sleep 2 && systemctl reload nginx && echo '  nginx reloaded (x2)'"

echo "== [6/6] Verify LIVE over HTTPS (the exact PDP button URL) =="
curl -s -o /dev/null -w "  https://$DOMAIN/measure -> HTTP %{http_code}\n" "https://$DOMAIN/measure?$BTN_URL"
echo -n "  cert subject: "; echo | openssl s_client -servername "$DOMAIN" -connect "$IP:443" 2>/dev/null | openssl x509 -noout -subject
echo "== DONE. Expect: localhost 200, HTTPS 200, cert subject CN=$DOMAIN =="