ACME / Let's Encrypt Certificates¶
Eight.ly OS has built-in ACME certificate management for automatic TLS certificates from Let's Encrypt. It's a dashboard front-end over certbot — Eight.ly drives certbot on the host (via sudo) to request, renew, and revoke certificates, so you manage them from the UI instead of the command line. certbot must be installed and reachable via sudo for this to work — if a certificate request fails outright, check that it's installed.
Where to find it: Infrastructure > Datacenter > ACME
Challenge types¶
HTTP-01¶
The simplest method. Let's Encrypt verifies you own the domain by making an HTTP request to your server on port 80.
Requirements: - Port 80 must be open and reachable from the internet - DNS must point to your server's public IP - Works for single domains only (no wildcards)
DNS-01¶
Proves domain ownership by creating a DNS TXT record. Works behind firewalls, supports wildcard certificates.
Supported DNS providers:
Only Cloudflare DNS-01 is implemented today (via certbot's dns-cloudflare plugin).
| Provider | Plugin | Status |
|---|---|---|
| Cloudflare | API token with Zone:DNS:Edit permission | Supported |
| DigitalOcean | — | Planned — not yet supported |
| AWS Route 53 | — | Planned — not yet supported |
| Gandi LiveDNS | — | Planned — not yet supported |
| Namecheap | — | Planned — not yet supported |
| GoDaddy | — | Planned — not yet supported |
Setup¶
1. Configure a DNS plugin (for DNS-01)¶
- Go to ACME > Plugins
- Click Add Plugin
- Select Cloudflare (the only DNS provider currently supported)
- Enter your Cloudflare API token (needs Zone:DNS:Edit)
- Save
Your token is written to /etc/letsencrypt/cloudflare.ini (mode 0600) on the server and used only to create/delete the DNS TXT record during certificate challenges.
2. Request a certificate¶
- Go to ACME > Certificates
- Click Add Certificate
- Enter the domain(s) — for wildcards, use
*.yourdomain.com - Select the challenge type (HTTP-01 or DNS-01)
- If DNS-01, select the plugin you configured
- Click Create
The certificate is requested from Let's Encrypt and installed automatically.
3. Auto-renewal¶
Certificates auto-renew before expiry. Renewal is handled by certbot's own systemd timer (installed with certbot), not an in-app scheduler — the timer runs certbot renew twice daily and renews any certificate with less than 30 days remaining. You can also force a renewal from the dashboard (see below), which runs certbot renew for that certificate immediately.
Managing certificates¶
From the Certificates tab:
- View — see domain, expiry date, issuer
- Renew — force an immediate renewal
- Delete — remove the certificate
When to use this vs Traefik¶
| Scenario | Recommendation |
|---|---|
| SSL for the Eight.ly dashboard itself | ACME (built-in) |
| SSL for individual Docker apps | Traefik (per-app routing) |
| Wildcard certificate for all services | ACME with DNS-01 |
| No public IP / behind CGNAT | Cloudflare Tunnel instead |
The built-in ACME is ideal for securing the Eight.ly dashboard and VM consoles. For per-app SSL with automatic routing, use Traefik.