Skip to main content
This page is the short path from a fresh Linux server to a working HTTPS address. Do the steps in order. Each one links to the full page for the details.

1. Install

On a fresh server, as a user that can use sudo:
The installer prints the dashboard link and a one-time setup token. Requirements and options are in Installing Levelrail.

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:
An 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:
This sets the dashboard address to <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 --staging to 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.
Details and the hint table: Zero DNS setup.

4. Use your own domain

The sslip.io address is for testing. For a real site, add a domain.
  1. Create an A record for the name pointing at the server’s public IP. Use AAAA for an IPv6-only server. A subdomain may use a CNAME to the server’s public hostname instead. Do not put a CNAME at the zone apex.
  2. Check it from outside your network:
  1. Add the domain to the app and wait for the certificate:
DNS changes can take minutes to hours, depending on the record’s TTL. If you connected a DNS provider, --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:
The command only reports. It exits 0 either way and nothing is blocked. The warning level is the runtime setting 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:
With it off, the app is reachable only on domains you add.
Last modified on November 5, 2026