> ## Documentation Index
> Fetch the complete documentation index at: https://certplane.kippel.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Recarga servicios automáticamente tras la renovación del certificado

> Usa reload_command en la configuración del agente para reiniciar o recargar servicios automáticamente cada vez que Certplane renueva y escribe un certificado en disco.

El agente de Certplane puede ejecutar un comando de shell inmediatamente después de escribir un certificado renovado en disco. Úsalo para recargar tu servidor web, proxy o cualquier servicio que lea certificados al inicio o con SIGHUP, sin necesidad de tareas cron ni observadores externos.

## Cómo funciona

Cada entrada en la lista `certificates` de `agent.yml` admite dos campos relacionados con la recarga:

* **`reload_command`** — una cadena con un comando de shell que se ejecuta tras escribir los archivos del certificado. El agente lo pasa directamente a `/bin/sh -c`, así que puedes usar tuberías, condicionales o cualquier otra sintaxis de shell.
* **`reload_timeout`** — cuánto espera el agente a que el comando termine antes de matarlo y registrar un error de timeout. Acepta cadenas de duración Go como `30s` o `2m`.

<Note>
  El `reload_command` se ejecuta como el mismo usuario del sistema operativo que el proceso del agente. Asegúrate de que ese usuario tenga permiso para ejecutar el comando, por ejemplo, añadiendo una entrada en `sudoers` o concediendo al usuario del agente pertenencia en la política `ExecReload` adecuada de la unidad systemd.
</Note>

<Note>
  Si `reload_command` termina con un código distinto de cero, el agente registra un error pero el certificado se escribe igualmente en disco. Una recarga fallida no revierte el certificado ni bloquea futuras renovaciones.
</Note>

<Warning>
  Si se supera `reload_timeout`, el agente mata el comando de recarga y registra un error. Define el timeout lo suficientemente largo para que la recarga de tu servicio complete: un valor demasiado corto dejará tu servicio ejecutándose con el certificado antiguo.
</Warning>

## Ejemplo completo

La siguiente entrada de `certificates` muestra todos los campos relevantes juntos:

```yaml theme={null}
certificates:
  - name: web-wildcard
    profile: public_wildcard
    dns_names:
      - "*.example.com"
    key: /etc/ssl/private/service.key
    cert: /etc/ssl/certs/service.crt
    chain: /etc/ssl/certs/service.chain.crt
    fullchain: /etc/ssl/certs/service.fullchain.crt
    reload_command: systemctl reload nginx
    reload_timeout: 30s
    renew_before: 720h
```

## Ejemplos por servicio

<CodeGroup>
  ```yaml nginx theme={null}
  certificates:
    - name: web-wildcard
      profile: public_wildcard
      key: /etc/ssl/private/service.key
      cert: /etc/ssl/certs/service.crt
      fullchain: /etc/ssl/certs/service.fullchain.crt
      reload_command: systemctl reload nginx
      reload_timeout: 30s
  ```

  ```yaml Traefik theme={null}
  certificates:
    - name: edge-wildcard
      profile: public_wildcard
      key: /etc/ssl/private/service.key
      cert: /etc/ssl/certs/service.crt
      fullchain: /etc/ssl/certs/service.fullchain.crt
      reload_command: systemctl reload traefik
      reload_timeout: 30s
  ```

  ```yaml Vault theme={null}
  certificates:
    - name: vault-cert
      profile: internal_vault
      key: /opt/vault/tls/vault.key
      cert: /opt/vault/tls/vault.crt
      fullchain: /opt/vault/tls/vault-fullchain.crt
      reload_command: systemctl reload vault
      reload_timeout: 30s
  ```

  ```yaml HAProxy theme={null}
  certificates:
    - name: lb-wildcard
      profile: public_wildcard
      key: /etc/haproxy/certs/service.key
      cert: /etc/haproxy/certs/service.crt
      fullchain: /etc/haproxy/certs/service.fullchain.crt
      reload_command: systemctl reload haproxy
      reload_timeout: 30s
  ```

  ```yaml "Custom script" theme={null}
  certificates:
    - name: web-wildcard
      profile: public_wildcard
      key: /etc/ssl/private/service.key
      cert: /etc/ssl/certs/service.crt
      fullchain: /etc/ssl/certs/service.fullchain.crt
      reload_command: /usr/local/bin/deploy-cert.sh
      reload_timeout: 60s
  ```
</CodeGroup>

## Usar un script envoltorio para lógica compleja

<Tip>
  Si tu lógica de recarga implica varios pasos —por ejemplo, concatenar la clave y el certificado en un bundle PEM, establecer la propiedad y luego recargar HAProxy— pon esa lógica en un script envoltorio y apunta `reload_command` a él. Esto mantiene `agent.yml` legible y hace que la lógica de recarga sea probable de forma independiente.

  ```bash theme={null}
  #!/usr/bin/env bash
  set -euo pipefail

  cat /etc/ssl/private/service.key /etc/ssl/certs/service.fullchain.crt \
    > /etc/haproxy/certs/bundle.pem
  chown haproxy:haproxy /etc/haproxy/certs/bundle.pem
  chmod 640 /etc/haproxy/certs/bundle.pem
  systemctl reload haproxy
  ```

  Haz el script ejecutable (`chmod +x /usr/local/bin/deploy-cert.sh`) y asegúrate de que sea propiedad de root o del usuario del agente.
</Tip>
