DNS en Cloudflare para un stack self-hosted: todos los registros que necesitas
Con un stack self-hosted en un único servidor, todos los subdominios apuntan a la misma IP. Cloudflare actúa solo como DNS; el proxy naranja (Proxied) está desactivado para dejar que Traefik gestione TLS directamente con Let’s Encrypt.
Registros necesarios
| Subdominio | Tipo | Destino |
|---|---|---|
| d4r.es | A | 212.227.144.215 |
| api.d4r.es | A | 212.227.144.215 |
| auth.d4r.es | A | 212.227.144.215 |
| blog.d4r.es | A | 212.227.144.215 |
| db.d4r.es | A | 212.227.144.215 |
| kanban.d4r.es | A | 212.227.144.215 |
| bi.d4r.es | A | 212.227.144.215 |
| logs.d4r.es | A | 212.227.144.215 |
| minio.d4r.es | A | 212.227.144.215 |
| n8n.d4r.es | A | 212.227.144.215 |
| status.d4r.es | A | 212.227.144.215 |
| studio.d4r.es | A | 212.227.144.215 |
| traefik.d4r.es | A | 212.227.144.215 |
Actualizar vía API
Con el Zone ID y un token API de Cloudflare, se pueden actualizar todos los registros en un loop:
ZONE_ID="6fba9c40bd9b483634d08ee1566d5bf9"
CF_TOKEN="tu_token"
IP="212.227.144.215"
for sub in "" api auth blog db kanban bi logs minio n8n status studio traefik; do
HOST="${sub:+$sub.}d4r.es"
# obtener ID del registro existente
RECORD_ID=$(curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$HOST&type=A" -H "Authorization: Bearer $CF_TOKEN" | jq -r '.result[0].id')
# actualizar
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" -H "Authorization: Bearer $CF_TOKEN" -H "Content-Type: application/json" -d "{"type":"A","name":"$HOST","content":"$IP","proxied":false}"
done
proxied: false es clave. Con el proxy naranja activado, Cloudflare actúa de intermediario HTTPS y Traefik no puede completar el challenge ACME para emitir certificados propios.