- Pi cluster deployment for fleet management - Cloudflare worker and DNS deployment - Full service deployment orchestration - Tunnel and VPN setup (Cloudflare, Tailscale) - K3s and Docker setup for container orchestration - Pi fleet management for hardware nodes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
92 lines
2.8 KiB
Bash
92 lines
2.8 KiB
Bash
#!/bin/bash
|
|
|
|
# Cloudflare DNS Setup for blackroad.io → Railway
|
|
# Run this AFTER Railway services are deployed
|
|
|
|
set -e
|
|
|
|
CF_TOKEN='yP5h0HvsXX0BpHLs01tLmgtTbQurIKPL4YnQfIwy'
|
|
CF_ZONE='848cf0b18d51e0170e0d1537aec3505a'
|
|
|
|
echo "☁️ Setting up Cloudflare DNS for blackroad.io..."
|
|
|
|
# Function to create/update DNS record
|
|
create_dns_record() {
|
|
local name="$1"
|
|
local target="$2"
|
|
local proxy="${3:-true}"
|
|
|
|
echo " 📝 Creating CNAME: ${name}.blackroad.io → $target"
|
|
|
|
# Check if record exists
|
|
EXISTING=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/${CF_ZONE}/dns_records?name=${name}.blackroad.io" \
|
|
-H "Authorization: Bearer ${CF_TOKEN}" \
|
|
-H "Content-Type: application/json")
|
|
|
|
RECORD_ID=$(echo "$EXISTING" | jq -r '.result[0].id // empty')
|
|
|
|
if [ -n "$RECORD_ID" ]; then
|
|
# Update existing record
|
|
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${CF_ZONE}/dns_records/${RECORD_ID}" \
|
|
-H "Authorization: Bearer ${CF_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"type\": \"CNAME\",
|
|
\"name\": \"${name}\",
|
|
\"content\": \"${target}\",
|
|
\"proxied\": ${proxy},
|
|
\"ttl\": 1
|
|
}" | jq -r '.success'
|
|
else
|
|
# Create new record
|
|
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE}/dns_records" \
|
|
-H "Authorization: Bearer ${CF_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"type\": \"CNAME\",
|
|
\"name\": \"${name}\",
|
|
\"content\": \"${target}\",
|
|
\"proxied\": ${proxy},
|
|
\"ttl\": 1
|
|
}" | jq -r '.success'
|
|
fi
|
|
}
|
|
|
|
echo ""
|
|
echo "⚠️ IMPORTANT: Get your Railway domains first!"
|
|
echo ""
|
|
echo "Go to Railway dashboard and copy the domains for each service:"
|
|
echo " web service → something like: web-production.up.railway.app"
|
|
echo " api service → something like: api-production.up.railway.app"
|
|
echo ""
|
|
read -p "Enter the Railway domain for WEB (e.g., web-production.up.railway.app): " WEB_DOMAIN
|
|
read -p "Enter the Railway domain for API (e.g., api-production.up.railway.app): " API_DOMAIN
|
|
|
|
echo ""
|
|
echo "🚀 Creating DNS records..."
|
|
|
|
# Create www subdomain
|
|
create_dns_record "www" "$WEB_DOMAIN" "true"
|
|
|
|
# Create root domain
|
|
create_dns_record "@" "$WEB_DOMAIN" "true"
|
|
|
|
# Create api subdomain
|
|
create_dns_record "api" "$API_DOMAIN" "true"
|
|
|
|
# Optional: app subdomain (if you want app.blackroad.io)
|
|
# create_dns_record "app" "$WEB_DOMAIN" "true"
|
|
|
|
echo ""
|
|
echo "✅ DNS records created successfully!"
|
|
echo ""
|
|
echo "🔗 Your domains should be live shortly:"
|
|
echo " https://www.blackroad.io"
|
|
echo " https://blackroad.io"
|
|
echo " https://api.blackroad.io"
|
|
echo ""
|
|
echo "⏱ DNS propagation may take 5-10 minutes"
|
|
echo "🔒 SSL certificates will be auto-generated by Railway"
|
|
echo ""
|
|
echo "📋 Next: Test your endpoints!"
|