1. Install
On a fresh server, as a user that can usesudo:
2. Open the ports
The installer does not open 8080. If you skip that rule, reach the dashboard through an SSH tunnel. The reasons and the tunnel command are in Dashboard port 8080. Per-provider steps for the cloud firewall are in Install on a cloud VM and Install on Oracle Cloud. The host firewall is covered in Host firewall.
Check that the server is reachable from outside before you go on:
external_reachability_80 warning is a hint, not proof. Some networks cannot reach their own public address, so test from another machine.
3. Sign in and enable HTTPS on a test address
Open the setup link from the installer output, create the admin account, then press Enable HTTPS on the first-run screen or the Domains page. The contact email is prefilled. The same from a terminal:<dashed-ip>.sslip.io, for example 203-0-113-10.sslip.io, and asks Let’s Encrypt for a certificate. No DNS record is needed.
Things to know:
- The address works only if your resolver answers for sslip.io. Some routers and DNS filters block it. Run
dig <name>before you assume the server is down. - Enabling is capped at 5 attempts per hour. Add
--stagingto rehearse against the test CA, which has no meaningful limits. Staging certificates are not trusted by browsers. - When the dashboard is on
https://, sign-in over plain HTTP is refused. Use the https address and close 8080.
4. Use your own domain
The sslip.io address is for testing. For a real site, add a domain.- Create an
Arecord for the name pointing at the server’s public IP. UseAAAAfor an IPv6-only server. A subdomain may use aCNAMEto the server’s public hostname instead. Do not put aCNAMEat the zone apex. - Check it from outside your network:
- Add the domain to the app and wait for the certificate:
--dns preview shows the record without changing anything. See Domains and ingress.
5. When it does not work
Run the diagnosis. It checks DNS, the CAA record, ports 80 and 443 and the certificate, and gives one fix per problem:
After a fix, run the diagnosis again. It never assumes a fix worked. Full reference: Diagnose a domain.
6. Watch the certificate budget
Let’s Encrypt limits how many certificates a server can get. Every automatic app address (<app>.<dashed-ip>.sslip.io) gets its own certificate, so many apps add up. Check the count for the last 7 days:
certificates.weekly_issue_warn (default 40); see Runtime settings.
If you are over the level, stop the automatic address for apps that already have a real domain or do not need one: