{% extends "admin_base.html" %} {% import "macros/empty_state.html" as empty %} {% block page_title %}SSL Management{% endblock %} {% block admin_content %}

SSL Certificate Management

Monitor and renew Let’s Encrypt certificates for your custom domains.

{% if not has_cloudflare or not has_email %}
Missing Configuration: Please ensure both {% if not has_cloudflare %}Cloudflare API Token{% endif %} {% if not has_cloudflare and not has_email %} and {% endif %} {% if not has_email %}ACME Email{% endif %} are set in the plugin settings.
{% endif %}
{{ domains_info | length }}
Domains Enumerated
{{ certificates_count }}
Active Certificates
{% if is_staging %}Staging{% else %}Production{% endif %}
ACME Environment
{% for info in domains_info %} {% set domain = info.domain %} {% set cert = info.cert %} {% else %} {{ empty::empty_state(table=true, colspan=8, icon="fas fa-shield-alt", title="No domains found", description="No domains found in Cloudflare. Please check your API token.") }} {% endfor %}
Domain Status Issuer Expiry Date Days to Expiry Key Type Actions
{{ domain }}
{% if cert %} Active {% else %} Missing {% endif %} {% if cert and cert.issuer %} {{ cert.issuer }} {% elif cert %} Let's Encrypt {% else %} - {% endif %} {% if cert and cert.expiry_date %}
{{ cert.expiry_date | date_in_tz(timezone=settings.timezone) }}
{% else %} No Certificate {% endif %}
{% if cert and cert.days_to_expiry is defined %} {{ cert.days_to_expiry }} {% elif cert %} — {% else %} — {% endif %} {{ cert.key_type | default(value="ecdsa") }}

HTTP-01 Subdomain Onboarding

Onboard and route custom domains/subdomains using Traefik’s built-in ACME HTTP-01 resolver.

Map New Custom Domain

Enter the domain or subdomain you want to onboard. Traefik will automatically issue and manage the Let's Encrypt certificate for it.

DNS Setup Instructions

Before mapping a custom domain, ensure your client configures their DNS properly:

1. Create CNAME Record:

Instruct the client to point a CNAME DNS record for their subdomain (e.g., shop) to your platform's base URL domain: .

2. Wait for Propagation:

DNS records may take a few minutes to propagate. Once propagated, map the domain here.

{% for item in http01_domains %} {% else %} {{ empty::empty_state(table=true, colspan=5, icon="fas fa-link", title="No custom domains mapped", description="No HTTP-01 custom domains mapped yet.") }} {% endfor %}
Custom Domain Traefik Router ACME Resolver Routing Status Actions
{{ item.domain }}
{{ item.router_key }} {{ item.resolver }} {% if item.has_router %} Routing Active {% else %} Config Missing {% endif %}
{% endblock %}