Vardo

Install Script Reference

Install, update, diagnose, and manage your Vardo instance with install.sh commands and flags.

install.sh is the single entry point for managing your Vardo instance — install, update, diagnose, and remove.

Installation

curl -fsSL https://get.vardo.sh | sudo bash

This is a one-shot command. If Vardo is already installed, re-running it opens the interactive menu instead.

Requirements

  • Ubuntu 22.04+ or Debian 12+ (production) — these are the only distros where the install script can automate package installation. Fedora, Rocky, Alma, Arch, Alpine, and RHEL are detected but their package manager adapters are stubbed — manual dependency installation is required.
  • macOS with Docker Desktop (development)
  • 20GB+ free disk space
  • Root access (Linux)

Interactive Menu

When Vardo is already installed, running sudo bash /opt/vardo/install.sh (or re-running the install command) shows an interactive menu:

1. Update Vardo
2. Doctor
3. Uninstall
4. Exit

Modes

Install

Runs automatically on first install. Sequence:

  1. Preflight checks — detects the distro (Ubuntu, Debian, Fedora, Rocky, Alma, Arch, Alpine, RHEL, macOS, WSL), verifies root access, available ports. Only Ubuntu/Debian have full package automation; other Linux distros are detected and reported but require manual dependency setup.
  2. Swap setup — creates a 2GB swapfile if total RAM < 2GB
  3. Packages — installs curl, git, unattended-upgrades, Docker Engine + Compose plugin via get.docker.com
  4. Clone — shallow-clones the Vardo repo to /opt/vardo
  5. Configuration — prompts for domain, base domain, and Let's Encrypt email; generates secrets and writes /opt/vardo/.env
  6. Build & start — runs docker compose up -d with COMPOSE_PROFILES=production
  7. Health wait — waits up to 60 seconds for containers to pass health checks
  8. Seed templates — loads default deployment templates
  9. Summary — prints dashboard URL and setup wizard link

Update

sudo bash /opt/vardo/install.sh
# Select: 1. Update Vardo

Or via --yes for unattended:

sudo bash /opt/vardo/install.sh update --yes

Sequence:

  1. Fetches latest commits from origin
  2. Dumps a pre-update database backup to /opt/vardo/backups/pre-update-<timestamp>.sql
  3. Pulls via git pull
  4. Rebuilds containers: docker compose build
  5. Restarts services: docker compose up -d
  6. Waits for health checks
  7. Runs database migrations

Rollback: the update summary prints exact rollback commands including how to restore the pre-update SQL dump.

Doctor

sudo bash /opt/vardo/install.sh doctor

Runs a full system health check and prints pass/warn/fail for each item:

CheckWhat it verifies
SystemOS version, architecture
SwapMemory headroom
Installation/opt/vardo exists, .env present, git repo intact, up to date
DockerDocker daemon running, Compose available
ContainersAll expected containers running and healthy
PostgreSQLpg_isready responds
Redisredis-cli ping returns PONG
App/api/health returns 200
DNSVARDO_DOMAIN and *.VARDO_BASE_DOMAIN resolve to server IP
TLSHTTPS certificate valid for VARDO_DOMAIN
DiskFree space (warn < 20GB, fail if critically low)

Exit summary:

  • All clear — N checks passed
  • Mostly healthy — N passed, N warning(s)
  • Issues found — N passed, N warning(s), N failed

Uninstall

sudo bash /opt/vardo/install.sh uninstall

Stops all Vardo containers. Data is preserved.

--purge

sudo bash /opt/vardo/install.sh uninstall --purge

Stops containers, removes Docker volumes (database, Redis, project data), and deletes /opt/vardo. Requires explicit confirmation. This is irreversible.


Flags

FlagDescription
--unattendedSkip all interactive prompts. Set required values via environment variables before running.
--yesAuto-confirm prompts (less strict than --unattended; still asks for destructive operations)
--purgeUsed with uninstall — removes all data and the installation directory
--dry-runSimulate the install without making changes. Prints what would happen at each step — useful for verifying a new server before committing.
--verboseEnable detailed output and logging. Writes a timestamped log to /opt/vardo/install.log (or ~/vardo/install.log on macOS). Helpful for debugging failed installs.

Unattended / CI installs

Set these environment variables before running with --unattended:

export VARDO_DOMAIN=host.example.com
export VARDO_BASE_DOMAIN=example.com
export ACME_EMAIL=[email protected]

curl -fsSL https://get.vardo.sh | sudo --preserve-env bash -s -- --unattended

Generated Files and Directories

PathDescription
/opt/vardo/Installation root (git repo)
/opt/vardo/.envRuntime configuration — never overwritten on re-install
/opt/vardo/backups/Pre-update SQL dumps
/var/lib/host/projects/Deployed project files (Docker volume mount)

Environment Variables

The installer generates /opt/vardo/.env on first install. Key variables:

VariableDescription
VARDO_ROLEdevelopment, staging, or production
VARDO_INSTANCE_IDRFC 4122 v4 UUID — uniquely identifies this instance
COMPOSE_PROFILESSet to production by the installer; omit for dev
DB_PASSWORDGenerated randomly — 32-char alphanumeric
BETTER_AUTH_SECRETGenerated randomly — 48-char auth secret
ENCRYPTION_MASTER_KEYGenerated with openssl rand -hex 32
GITHUB_WEBHOOK_SECRETGenerated randomly
VARDO_DOMAINDashboard domain, e.g. host.example.com
VARDO_BASE_DOMAINWildcard base domain for deployed apps
ACME_EMAILLet's Encrypt registration email
VARDO_PROJECTS_DIRProject files directory (default: /var/lib/host/projects)

Application configuration (email providers, GitHub App, feature flags) lives in vardo.yml / the admin UI — not in .env.


Docker Compose Services

With COMPOSE_PROFILES=production, all services start:

ServiceContainerDefault Port
Next.js appvardo-frontend— (behind Traefik)
PostgreSQLvardo-postgres7100
Redisvardo-redis7200
Traefikvardo-traefik80, 443
cAdvisorvardo-cadvisor7300
Lokivardo-loki7400

In development (no COMPOSE_PROFILES), only Postgres, Redis, cAdvisor, and Loki start. Run the app with pnpm dev.


Post-Install: Setup Wizard

After installation, the summary screen prints:

  Dashboard   https://vardo.example.com
  Setup       https://vardo.example.com/onboarding

The setup wizard walks through:

  1. Create your admin account
  2. Name your instance
  3. Optionally connect a GitHub App for repo-based deployments

The wizard tracks progress in the database, so you can close the browser and pick up where you left off. If you've already completed a step, the wizard skips it automatically.

You can skip the GitHub App setup and configure it later under Settings → Integrations.

Vardo CLI — Coming Post-v1

Planned — Tracked in #298

A standalone vardo CLI is planned for a post-v1 release. It will be a separate tool from install.sh that wraps the Vardo REST API for use in CI/CD pipelines, deployment scripts, and AI agents.

The CLI will support:

  • Triggering deployments from the terminal
  • Tailing logs
  • Managing apps, environments, and secrets
  • Piping into CI/CD workflows and automation scripts

In the meantime, the REST API provides full programmatic access to everything you can do in the dashboard.

On this page