Skip to content

Quick start

On a fresh Ubuntu 26.04 LTS x86_64 host with sudo access:

curl -fsSL https://raw.githubusercontent.com/fahadysf/nova-ve/main/install.sh | sudo bash

That single command:

  1. Installs git, Docker, PostgreSQL, Caddy, Node.js, Python 3 + venv, build tooling, and other OS deps.
  2. Clones this repo to ~${SUDO_USER}/nova-ve-git.
  3. Bootstraps the host PostgreSQL role/db (nova / novadb) and the dockerized Guacamole stack (guacdb / guacd / guacamole).
  4. Builds the FastAPI backend (Python venv + Alembic migrations + initial seed).
  5. Builds the SvelteKit frontend (npm ci + vite build) into /var/lib/nova-ve/www.
  6. Installs the privileged network helper at /opt/nova-ve/bin/ plus its visudo-validated sudoers fragment.
  7. Drops systemd units (nova-ve-backend, caddy) and starts them.
  8. Runs the in-tree smoke check.
  9. Writes nova-ve-install-summary.md (mode 0600) into the directory you launched the installer from. It contains the bootstrapped admin password, the location of every critical config file, and a map of the env vars in /etc/nova-ve/backend.env.

The script is idempotent: re-running it fast-forwards the repo, reapplies templates, and restarts services without rotating existing secrets.

Override knobs

Set any of these as env vars before piping into sudo bash:

Var Default Purpose
NOVA_VE_REPO_URL https://github.com/fahadysf/nova-ve.git Source repo
NOVA_VE_REPO_REF main Branch / tag / SHA to check out
NOVA_VE_REPO_DIR ~${SUDO_USER}/nova-ve-git Clone destination
NOVA_VE_OWNER ${SUDO_USER:-ubuntu} UNIX user that owns the repo and runs the backend
NOVA_VE_SKIP_DEMO_IMAGES (unset) Set to 1 to skip building the bundled nova-ve-alpine-telnet:latest demo image

After install

Open http://<host>/ and log in with the admin credentials printed at the end of the run. The credentials are also written to nova-ve-install-summary.md — see First login.

For development workflows (running the backend with --reload, the frontend dev server, or a Rancher Desktop loop on macOS), see Deployment contract and the helper scripts in deploy/scripts/.