Skip to content
Pages in Start

Examples

A minimal application for every type Noust deploys, each one deployed for real by the integration harness.

Reference Updated View as Markdown

A minimal application for every type Noust deploys. Each one answers Hello from Noust (<type>) at / and has as few files as the stack allows. python tests/integration/examples_run.py (below) deploys every one on a clean machine, so that what is here is what first-application.md and frameworks.md describe, not a sketch of it.

Deploy one from a clone of this repository (-s takes a repository, an archive or a directory):

Shell
git clone https://github.com/Perkybeet/noust.git
noust create -d hello.example.com -s noust/examples/nodejs

An application deployed from a directory has no repository to update from; to go on with one, make a repository of the folder (cp -r noust/examples/nodejs ~/hello && cd ~/hello && git init -q && git add . && git commit -qm hello) and deploy that, or give the directory a repository later with noust app source change (sources.md).

Before DNS points at the server, add --no-ssl to try it on the server's own address, or use a temporary one (domains.md).

Folder Type What it is What the server needs
static/ static An index.html and a style sheet, served as files nothing
nodejs/ nodejs A server with no dependencies, npm start Node.js
python/ python A WSGI application, run with Gunicorn python3-venv
php/ php-fpm An index.php, one PHP-FPM pool of its own PHP-FPM
ruby/ ruby A Rack application, run with Puma Ruby, Bundler, a compiler
go/ go The standard library's HTTP server, built with go build Go
rust/ rust The standard library's TcpListener, built with Cargo Rust, Cargo
java/ java A Maven program with the JDK's own HTTP server a JDK, Maven
dotnet/ dotnet An ASP.NET Core application the .NET SDK
elixir/ elixir A Plug application as a Mix release Elixir, Erlang
deno/ deno Deno.serve, run by its start task Deno
nextjs/ nextjs The App Router, next build and next start Node.js 22 (the folder's .nvmrc)
nuxt/ nuxt Nuxt 4, Nitro's server Node.js 22
sveltekit/ sveltekit Svelte 5 with adapter-node Node.js 22
astro/ astro A static Astro site Node.js 22
remix/ remix React Router 7 in framework mode Node.js 22
angular/ angular A client-side Angular 20 application Node.js 22
vite/ vite A Vite page, built and served as files Node.js 22
monorepo/ monorepo A Turborepo/pnpm workspace with two applications Node.js, pnpm
docker-compose/ docker-compose A Compose project with one web service Docker, the Compose plugin
container/ container A Dockerfile, one image per release Docker

Noust says what it is missing before it builds and gives the command that installs it (noust setup doctor, and the first lines of a deploy's log): requirements.md. The Node.js frameworks pin their dependencies exactly, with a lock file, and ask for Node.js 22 in .nvmrc; Noust installs the Node it is asked for for the application when the server's is older (build.md).

What is proved

tests/test_examples.py reads every folder the way a deploy begins: detection must name the type in the table above, and nothing in a folder may leave it or hold a credential. tests/integration/examples_run.py does the rest on a clean machine with systemd: it creates each as an application, asks the web server for / and looks for the sentence, and updates it to a second commit and goes back with noust releases rollback. It needs Docker and the network, it is not part of pytest, and it names every resource it makes with the label noust.test=1.

Rails, Phoenix and Jekyll are not folders here: their generators write the project (rails new, mix phx.new, jekyll new), so the harness runs the generator in the container and deploys what it wrote (--example rails, --example phoenix, --example jekyll). What mix phx.new writes today needs an Elixir newer than Ubuntu 24.04's, so the harness installs one first, the way frameworks.md says. --example from_a_directory deploys the first example from a plain directory, the form shown at the top of this page.

Shell
python tests/integration/examples_run.py                    # all of them
python tests/integration/examples_run.py --example go --example rust

An example is a starting point, not a template to keep: each pins what it uses so it keeps building, and a real project updates its dependencies.

Something on this page is wrong or unclear? Report it on GitHub.

Help, contributing and the project’s policies are under Project.

Search the documentation

Type to search every page.

↑ ↓ to move, Enter to open, Esc to close