← 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)."