← back to Dw Yolo Loop

artmura-site/deploy-landing.sh

54 lines

#!/usr/bin/env bash
# Deploy the Artmura brand-landing to artmura.designerwallcoverings.com on Kamatera.
# Self-contained: ships app + bundled data + images; pm2 (BUNDLE=1) + nginx + Let's Encrypt.
# Run from repo root:  bash artmura-site/deploy-landing.sh
set -euo pipefail
KAM="${KAM:-root@45.61.58.125}"
APP="/root/Projects/artmura-site"
DOMAIN="artmura.designerwallcoverings.com"
REPO="$(cd "$(dirname "$0")/.." && pwd)"

echo "→ resolving port (reuse if already deployed, else pick a free one)"
PORT=$(ssh "$KAM" '
  cur=$(pm2 jlist 2>/dev/null | node -e "try{const a=JSON.parse(require(\"fs\").readFileSync(0));const p=a.find(x=>x.name===\"artmura-site\");process.stdout.write(String((p&&p.pm2_env&&p.pm2_env.env&&p.pm2_env.env.PORT)||\"\"))}catch(e){}" 2>/dev/null)
  if [ -n "$cur" ]; then echo "$cur"; else
    for p in 9931 9932 9933 9934 9935 9936 9937 9938 9939; do ss -ltn | grep -q ":$p " || { echo $p; break; }; done
  fi')
[ -z "$PORT" ] && { echo "no free port found"; exit 1; }
echo "  using port $PORT"

echo "→ shipping app + data + images to $KAM:$APP"
ssh "$KAM" "mkdir -p $APP/_data $APP/_images"
rsync -az --delete --exclude node_modules --exclude _images --exclude _data "$REPO/artmura-site/" "$KAM:$APP/"
rsync -az "$REPO/scripts/artmura-onboard/data/artmura.json" \
          "$REPO/scripts/artmura-onboard/data/artmura-colors.json" \
          "$REPO/scripts/artmura-onboard/data/artmura-store-handles.json" "$KAM:$APP/_data/"
rsync -az "$REPO/.newwall-ref/artmura/images/" "$KAM:$APP/_images/"

echo "→ install + pm2 (BUNDLE=1, port $PORT)"
ssh "$KAM" "cd $APP && npm install --omit=dev --silent && pm2 delete artmura-site 2>/dev/null; cd $APP && VENDOR=artmura BUNDLE=1 PORT=$PORT pm2 start server.js --name artmura-site && pm2 save"

echo "→ nginx vhost"
ssh "$KAM" "cat > /etc/nginx/sites-available/$DOMAIN <<NGINX
server {
    listen 80;
    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;
    }
}
NGINX
ln -sf /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/$DOMAIN
nginx -t && systemctl reload nginx"

echo "→ Let's Encrypt"
ssh "$KAM" "certbot --nginx -d $DOMAIN --non-interactive --agree-tos -m steve@designerwallcoverings.com --redirect || echo 'certbot: ensure DNS A record exists first, then re-run certbot'"

echo "→ smoke test"
ssh "$KAM" "curl -s -o /dev/null -w 'local pm2 → %{http_code}\n' http://127.0.0.1:$PORT/api/config"
echo "DONE. Ensure Cloudflare DNS: A $DOMAIN → 45.61.58.125 (proxied)."