View .md

SSL certificates

Get and renew a Let's Encrypt certificate for FeatherPanel with the installer's SSL menu, by HTTP or DNS challenge, and set up automatic renewal.

On this page

The panel containers do not handle TLS. Your reverse proxy does, with a certificate in /etc/letsencrypt/live/<domain>/, which is the path the nginx and Apache templates expect. Caddy and a Cloudflare Tunnel handle certificates themselves.

The SSL menu

Run the installer and pick [4] SSL:

OptionWhat it does
Install CertbotInstalls certbot and the nginx or Apache plugin
Create Certificate (HTTP)certbot certonly with the --nginx, --apache or --standalone authenticator
Create Certificate (DNS)certbot certonly --manual --preferred-challenges dns: you add the TXT record by hand
Setup Auto-RenewalAdds the renewal cron job below
Install acme.shInstalls acme.sh for DNS API challenges such as acme.sh --issue --dns dns_cf -d yourdomain.com

The installer registers certificates with admin@<your domain> as the contact address. If that mailbox does not exist, update it afterwards with certbot update_account --email [email protected].

HTTP challenge

The domain must resolve to the server and port 80 must be open. With the nginx or Apache authenticator, Certbot uses the running web server. The standalone authenticator starts its own server on port 80, so the installer stops nginx first and starts it again afterwards.

sudo certbot certonly --nginx -d panel.example.com

DNS challenge

Use it when port 80 is closed or the server is behind NAT. Certbot prints a TXT record for _acme-challenge.<domain>. Add it at your DNS provider, wait until it resolves, then confirm.

sudo certbot certonly --manual --preferred-challenges dns -d panel.example.com

Manual DNS certificates do not renew on their own, because each renewal needs a new TXT record. Use acme.sh with your DNS provider’s API if you want unattended renewals.

Renewal

Setup Auto-Renewal writes this root crontab entry, with the restart command for the web server it detects:

0 23 * * * certbot renew --quiet --deploy-hook "systemctl restart nginx"

On a Wings-only node the hook restarts featherwings instead, so the daemon loads the new certificate. Test renewal without changing anything:

sudo certbot renew --dry-run

Frequently asked questions

Does FeatherPanel renew certificates automatically?

The installer's Setup Auto-Renewal option adds a root cron job that runs certbot renew --quiet every day at 23:00 and restarts nginx, Apache or FeatherWings after a renewal. Without it, renewal depends on the certbot package's own timer.

Do I need a certificate with a Cloudflare Tunnel?

No. Cloudflare terminates TLS for tunnel hostnames, so the server needs no certificate for the panel.