← back to Beverlyhillsbutler

finish_dns.sh

71 lines

#!/bin/bash
# finish_dns.sh — run AFTER Steve swaps NS to Cloudflare for all 4 butler domains
# Requires: CF zones already exist in CF dashboard, NS propagated
set -e

REMOTE=root@45.61.58.125
SERVER_IP=45.61.58.125
CF_TOKEN="${CLOUDFLARE_API_TOKEN:-$(grep CLOUDFLARE_API_TOKEN /root/.dw-fleet.env 2>/dev/null | cut -d= -f2)}"

if [ -z "$CF_TOKEN" ]; then
  echo "ERROR: CLOUDFLARE_API_TOKEN not set"
  exit 1
fi

get_zone_id() {
  curl -s "https://api.cloudflare.com/client/v4/zones?name=$1" \
    -H "Authorization: Bearer $CF_TOKEN" \
    | python3 -c "import sys,json; r=json.load(sys.stdin); print(r['result'][0]['id'] if r['result'] else 'NOT_FOUND')"
}

add_a_record() {
  local zone_id=$1
  local domain=$2
  # Root A
  curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records" \
    -H "Authorization: Bearer $CF_TOKEN" -H "Content-Type: application/json" \
    -d "{\"type\":\"A\",\"name\":\"@\",\"content\":\"$SERVER_IP\",\"ttl\":1,\"proxied\":true}" | python3 -c "import sys,json; r=json.load(sys.stdin); print('A @:', 'ok' if r['success'] else r['errors'])"
  # www CNAME
  curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records" \
    -H "Authorization: Bearer $CF_TOKEN" -H "Content-Type: application/json" \
    -d "{\"type\":\"CNAME\",\"name\":\"www\",\"content\":\"$domain\",\"ttl\":1,\"proxied\":true}" | python3 -c "import sys,json; r=json.load(sys.stdin); print('CNAME www:', 'ok' if r['success'] else r['errors'])"
}

# ---- beverlyhillsbutler.com (canonical) ----
echo "=== beverlyhillsbutler.com ==="
BHB_ZONE=$(get_zone_id beverlyhillsbutler.com)
echo "Zone ID: $BHB_ZONE"
add_a_record "$BHB_ZONE" "beverlyhillsbutler.com"

# SSL cert on Kamatera
ssh "$REMOTE" "certbot certonly --nginx --non-interactive --agree-tos -m theagentabrams@gmail.com \
  -d beverlyhillsbutler.com -d www.beverlyhillsbutler.com || echo 'certbot done'"

# Deploy nginx config
ssh "$REMOTE" "cat > /etc/nginx/sites-available/beverlyhillsbutler.com" < /Users/macstudio3/Projects/beverlyhillsbutler/nginx-beverlyhillsbutler.com.conf
ssh "$REMOTE" "ln -sf /etc/nginx/sites-available/beverlyhillsbutler.com /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginx"

# ---- redirect domains ----
for domain in 818butler.com bhbutler.com boulevardbutler.com; do
  echo "=== $domain ==="
  ZONE=$(get_zone_id "$domain")
  echo "Zone ID: $ZONE"
  add_a_record "$ZONE" "$domain"

  ssh "$REMOTE" "certbot certonly --nginx --non-interactive --agree-tos -m theagentabrams@gmail.com \
    -d $domain -d www.$domain || echo 'certbot done'"

  # Push redirect config
  ssh "$REMOTE" "cat > /etc/nginx/sites-available/$domain" < /Users/macstudio3/Projects/beverlyhillsbutler/nginx-${domain}.conf
  ssh "$REMOTE" "ln -sf /etc/nginx/sites-available/$domain /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginx"
done

echo ""
echo "=== 4-layer health check ==="
for domain in beverlyhillsbutler.com 818butler.com bhbutler.com boulevardbutler.com; do
  echo -n "  https://$domain : "
  curl -sf --max-time 10 "https://$domain/" -o /dev/null -w "%{http_code}" && echo ""
done

echo "finish_dns.sh complete"