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