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