Host a website
Put a website online on your instance, get an HTTPS URL, and attach your own domain.

What a site is
A site connects a public HTTPS address to a port inside your instance. You run the app; we handle the address, certificate, and routing.
- Every instance starts with one site: web on port 80.
- You can add up to 10 sites per instance.
- Labels use lowercase letters, digits, and dashes. A few names, such as www, mail, admin, and cdn, are reserved.
- You do not need to install Caddy or publish ports 80/443.
- The default site gets a Vercel-style address, https://my-site.nairacloud.xyz. Additional sites get a label, for example https://api-my-site.nairacloud.xyz. The matching sslip alias, https://203.0.113.10.my-site.sslip.io, is there if the NairaCloud address is not resolving yet.
Examples use 203.0.113.10, a reserved documentation address. Use the values shown in your dashboard.
Put a site online
- Run your app on a port inside the instance. It must listen on 0.0.0.0, not 127.0.0.1.
- Open Networking → Sites. For the default site, set web to that port. For another app, choose Add a site and give it a label and port.
- Open the HTTPS URL shown on the site card. The first request may take a few seconds while the certificate is issued.
If your app only listens on 127.0.0.1, visitors will get a 502. Bind it to 0.0.0.0 inside the instance.
Use your own domain
- Copy the public IP from the instance's Networking tab.
- At your DNS provider, add an A record for the hostname pointing at that IP.
- In Custom domain, choose the site that should receive it and attach the hostname. HTTPS is issued automatically.
Keep the record DNS-only until the certificate is issued. If your provider offers a proxy, such as Cloudflare's orange cloud, turn it off. DNS changes can take a few minutes to an hour.
Several apps on one instance
Give each app its own site. Each gets a separate public hostname and certificate.
| App | Label | Port inside instance | Example URL |
|---|---|---|---|
| Main website | web | 80 | https://my-site.nairacloud.xyz |
| API | api | 3000 | https://api-my-site.nairacloud.xyz |
| Docs | docs | 8080 | https://docs-my-site.nairacloud.xyz |
If several containers must share one hostname, run your own reverse proxy on one port inside the instance and point a single site at it. Use path routing there if you need /api and / on the same domain.
Good to know
- A site is tied to one instance. If the instance moves to another node, the platform updates the NairaCloud DNS record, and the sslip alias changes with the node IP. Custom domains need to be re-pointed at the new node IP.
- There is no cluster-wide load balancer or automatic failover yet.
- Your app should speak plain HTTP inside the instance. We handle HTTPS for visitors.
- Use Publish a TCP port for databases, game servers, MQTT, or other raw TCP, not for websites.
- The platform URL is public. Do not treat it as a secret.
- Renaming a site changes its URL immediately. Old links stop working.
- Deleting a site removes its URL and certificate; the instance keeps running.
Common problems
| Symptom | Check |
|---|---|
| 404 “No site configured” | Use the exact HTTPS URL from the site card. The bare IP and unknown hostnames return 404. |
| 502 Bad Gateway | Nothing is listening on the site's port, the app is bound to 127.0.0.1, or the port is wrong. Test with curl http://127.0.0.1:<port> inside the instance. |
| 403 Forbidden | Your app is rejecting the request. The platform does not add authentication. |
| Certificate not ready | Wait a few seconds and reload. For a custom domain, confirm the A record points at your public IP and is DNS-only. |
| Custom domain will not attach | DNS has not propagated yet, or the name is already used by another site. |