|
1 | 1 | # ============================================================= |
2 | | -# Cloudflare DNS — senzen.pantorn.site |
| 2 | +# Cloudflare DNS — pantorn.site |
3 | 3 | # ============================================================= |
4 | | -# This file manages the DNS records for the Senzen project. |
5 | | -# Records: |
6 | | -# senzen CNAME → cname.vercel-dns.com (frontend, DNS-only) |
7 | | -# senzen-api CNAME → <render-service>.onrender.com (backend, Cloudflare-proxied) |
| 4 | +# Path-based architecture: the frontend (senzen.pantorn.site) is |
| 5 | +# on Vercel, and Vercel rewrites /<anything> to Render's |
| 6 | +# /api/<anything> via vercel.json. The browser only ever sees |
| 7 | +# senzen.pantorn.site, so only ONE DNS record is needed: |
| 8 | +# senzen CNAME → cname.vercel-dns.com (frontend, DNS-only) |
8 | 9 | # |
9 | | -# The backend is proxied (orange cloud) because Render's free |
10 | | -# plan does NOT support custom domains — so the service runs |
11 | | -# at senzen-api.onrender.com, and Cloudflare terminates TLS |
12 | | -# for senzen-api.pantorn.site using Universal SSL, then |
13 | | -# forwards to Render in "Full" SSL mode (no cert verification). |
14 | | -# |
15 | | -# Both records are ONE level deep under pantorn.site so they're |
16 | | -# covered by Cloudflare's Universal SSL (*.pantorn.site). |
| 10 | +# No backend DNS record — the backend is reached via the Vercel |
| 11 | +# rewrite, never directly via a public hostname. |
17 | 12 | # ============================================================= |
18 | 13 |
|
19 | | -# ───────────────────────────────────────────────────────────── |
20 | | -# Frontend: senzen.pantorn.site → Vercel (DNS-only) |
21 | | -# Vercel issues its own Let's Encrypt cert via ACME HTTP-01, |
22 | | -# which fails if Cloudflare proxy is on. So we leave it |
23 | | -# proxied = false and let Vercel handle TLS. |
24 | | -# ───────────────────────────────────────────────────────────── |
25 | 14 | resource "cloudflare_record" "senzen_frontend" { |
26 | 15 | zone_id = var.cloudflare_zone_id |
27 | | - name = split(".", var.frontend_domain)[0] # "senzen" from "senzen.pantorn.site" |
| 16 | + name = split(".", var.frontend_domain)[0] # "senzen" |
28 | 17 | type = "CNAME" |
29 | 18 | value = var.vercel_cname_target |
30 | 19 | proxied = false |
31 | | - comment = "Senzen frontend → Vercel (DNS-only, Vercel issues cert)" |
32 | | -} |
33 | | - |
34 | | -# ───────────────────────────────────────────────────────────── |
35 | | -# Backend: senzen-api.pantorn.site → Render (proxied) |
36 | | -# Render free plan doesn't issue certs for custom domains. |
37 | | -# Cloudflare proxies, terminates TLS with Universal SSL, and |
38 | | -# forwards to Render's onrender.com URL. Set Cloudflare zone |
39 | | -# SSL mode to "Full" (NOT "Full (Strict)") so the origin cert |
40 | | -# isn't required to be valid for senzen-api.pantorn.site. |
41 | | -# ───────────────────────────────────────────────────────────── |
42 | | -resource "cloudflare_record" "senzen_backend" { |
43 | | - zone_id = var.cloudflare_zone_id |
44 | | - name = var.backend_subdomain # "senzen-api" |
45 | | - type = "CNAME" |
46 | | - value = "${var.render_service_name}.onrender.com" |
47 | | - proxied = true |
48 | | - comment = "Senzen backend → Render via Cloudflare proxy (Render free doesn't support custom domains)" |
| 20 | + comment = "Senzen frontend → Vercel (DNS-only, Vercel issues its own cert)" |
49 | 21 | } |
0 commit comments