Getting started
Host a website on NebuliHost, then add logic that runs on the server, without running a server yourself.
Create a server
A server is one website with its own address. Create one under
Add Server and it's online straight away at
https://your-site.thehsi.cloud, showing a placeholder page.
The id becomes the address, so it has to be 5 to 63 characters of lowercase letters, numbers and dashes, and can't start or end with a dash. How many servers you can have, and how much storage each one gets, depends on your plan: see Upgrade.
Upload your site
There are three ways to get files onto a server. They all end up in the same place.
| How | Best for |
|---|---|
| The file manager on the server's page | Changing a few files by hand |
| Uploading a zip on the server's page | Uploading a whole site at once |
| The API | Deploying from scripts and CI |
A zip can be applied in two ways:
- Add & overwrite keeps your other files, and replaces those with the same path.
- Replace makes the server contain exactly what's in the zip, and deletes everything else, except your private
.internalfolder.
If everything in the zip is inside one folder with an index.html in it (my-site/index.html),
that folder is removed, so the site ends up at the root. A bad zip never changes your live site: it's checked and
unpacked completely before anything is moved into place. Zips can't contain symbolic links or be password-protected.
How a site is laid out
| Path | What it is |
|---|---|
index.html | The page shown at your site's address |
index.chtml | The same for a dynamic page, if there's no index.html |
| Other files | Served as they are, at the same path |
*.chtml | Dynamic pages, rendered on the server for each visitor |
.internal/ | Private: visitors can never reach anything in here. Your recipes and stored values live here. It shows in the file manager with a warning, because changing it by hand can break your site |
/__recipes/ | Reserved address, used by dynamic pages |
Your first dynamic page
A recipe is a small function, written as JSON, that runs on our servers. A .chtml
page is HTML that can use recipes. Here's one of each, adding 19% tax to a price.
Open your server's page and choose Recipes for the node editor. You can build this one there, or
use Import JSON in its ⋯ menu and save it as with_tax:
{
"name": "Add 19% tax",
"parameters": { "net": "number" },
"recipe": [
{ "action": "multiply", "values": ["$net", 1.19] },
{ "action": "format", "format": "%(.2f) €", "values": ["$0"] }
]
}And this as shop.chtml:
<!doctype html>
<html>
<body>
<p>Price: %{ with_tax(10) }%</p>
</body>
</html>
Open https://your-site.thehsi.cloud/shop.chtml and you'll see
Price: 11.90 €. The visitor's browser only ever receives the result, never the recipe.
Where to go next
- Dynamic pages: everything
.chtmlpages can do, including calling recipes from JavaScript. - Recipes: how to write them, and every action available.
- API: manage servers and deploy from scripts and CI.