Skip to main content

Caddyfile con variables de entorno


Para evitar dejar tokens y credenciales a la vista en el Caddyfile, se pueden cargar como variables de entorno desde systemd y luego referenciarlas dentro de la configuración.


Definir variables en systemd

Se añaden en drop-ins bajo /etc/systemd/system/caddy.service.d/:

# /etc/systemd/system/caddy.service.d/cloudflare.conf
[Service]
Environment=CLOUDFLARE_AUTH_TOKEN=A_ZYXS-LjFdbxxxxxxx42cmb7KH-iM8xxxxxxxxx

# /etc/systemd/system/caddy.service.d/openwebui.conf
[Service]
Environment="OPENWEBUI_APP_TOKEN=V9APMi3w..."

Después:

systemctl daemon-reload
systemctl restart caddy

Usar las variables en el Caddyfile

Caddy permite referenciar cualquier variable de entorno con {env.VARIABLE}:

# Opciones globales
{
  admin 127.0.0.1:2019
  email admin@example.org
  acme_dns cloudflare {env.CLOUDFLARE_AUTH_TOKEN}
}

# Matcher compuesto: cabecera + path de API o WS
@conduit_combined {
  header X-App-Token {env.OPENWEBUI_APP_TOKEN}
  path /api/* /ws*
}

Validar cambios antes de reiniciar

Para asegurarse de que el Caddyfile es válido y que las variables se pasan correctamente:

caddy fmt Caddyfile --overwrite

sudo env CLOUDFLARE_AUTH_TOKEN=$CLOUDFLARE_AUTH_TOKEN \
           OPENWEBUI_APP_TOKEN=$OPENWEBUI_APP_TOKEN \
           caddy validate /etc/caddy/Caddyfile

Si se usan otras variables, deben adaptarse al comando anterior.


Verificar que systemd exporta las variables

systemctl show caddy | grep Environment

Deberían aparecer las variables declaradas en los drop-ins. Si no, revisar el nombre del archivo y volver a recargar/reiniciar.


Resumen

  • Variables sensibles → en drop-ins de systemd, no en el Caddyfile.
  • Referencia en Caddyfile → {env.NOMBRE}.
  • Recargar y reiniciar para aplicar cambios.
  • Validar con caddy fmt + caddy validate pasando las variables al entorno.
  • Comprobar con systemctl show si se están cargando.