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 bashThis 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. ExitModes
Install
Runs automatically on first install. Sequence:
- 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.
- Swap setup — creates a 2GB swapfile if total RAM < 2GB
- Packages — installs
curl,git,unattended-upgrades, Docker Engine + Compose plugin viaget.docker.com - Clone — shallow-clones the Vardo repo to
/opt/vardo - Configuration — prompts for domain, base domain, and Let's Encrypt email; generates secrets and writes
/opt/vardo/.env - Build & start — runs
docker compose up -dwithCOMPOSE_PROFILES=production - Health wait — waits up to 60 seconds for containers to pass health checks
- Seed templates — loads default deployment templates
- Summary — prints dashboard URL and setup wizard link
Update
sudo bash /opt/vardo/install.sh
# Select: 1. Update VardoOr via --yes for unattended:
sudo bash /opt/vardo/install.sh update --yesSequence:
- Fetches latest commits from origin
- Dumps a pre-update database backup to
/opt/vardo/backups/pre-update-<timestamp>.sql - Pulls via
git pull - Rebuilds containers:
docker compose build - Restarts services:
docker compose up -d - Waits for health checks
- 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 doctorRuns a full system health check and prints pass/warn/fail for each item:
| Check | What it verifies |
|---|---|
| System | OS version, architecture |
| Swap | Memory headroom |
| Installation | /opt/vardo exists, .env present, git repo intact, up to date |
| Docker | Docker daemon running, Compose available |
| Containers | All expected containers running and healthy |
| PostgreSQL | pg_isready responds |
| Redis | redis-cli ping returns PONG |
| App | /api/health returns 200 |
| DNS | VARDO_DOMAIN and *.VARDO_BASE_DOMAIN resolve to server IP |
| TLS | HTTPS certificate valid for VARDO_DOMAIN |
| Disk | Free 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 uninstallStops all Vardo containers. Data is preserved.
--purge
sudo bash /opt/vardo/install.sh uninstall --purgeStops containers, removes Docker volumes (database, Redis, project data), and deletes /opt/vardo. Requires explicit confirmation. This is irreversible.
Flags
| Flag | Description |
|---|---|
--unattended | Skip all interactive prompts. Set required values via environment variables before running. |
--yes | Auto-confirm prompts (less strict than --unattended; still asks for destructive operations) |
--purge | Used with uninstall — removes all data and the installation directory |
--dry-run | Simulate the install without making changes. Prints what would happen at each step — useful for verifying a new server before committing. |
--verbose | Enable 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 -- --unattendedGenerated Files and Directories
| Path | Description |
|---|---|
/opt/vardo/ | Installation root (git repo) |
/opt/vardo/.env | Runtime 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:
| Variable | Description |
|---|---|
VARDO_ROLE | development, staging, or production |
VARDO_INSTANCE_ID | RFC 4122 v4 UUID — uniquely identifies this instance |
COMPOSE_PROFILES | Set to production by the installer; omit for dev |
DB_PASSWORD | Generated randomly — 32-char alphanumeric |
BETTER_AUTH_SECRET | Generated randomly — 48-char auth secret |
ENCRYPTION_MASTER_KEY | Generated with openssl rand -hex 32 |
GITHUB_WEBHOOK_SECRET | Generated randomly |
VARDO_DOMAIN | Dashboard domain, e.g. host.example.com |
VARDO_BASE_DOMAIN | Wildcard base domain for deployed apps |
ACME_EMAIL | Let's Encrypt registration email |
VARDO_PROJECTS_DIR | Project 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:
| Service | Container | Default Port |
|---|---|---|
| Next.js app | vardo-frontend | — (behind Traefik) |
| PostgreSQL | vardo-postgres | 7100 |
| Redis | vardo-redis | 7200 |
| Traefik | vardo-traefik | 80, 443 |
| cAdvisor | vardo-cadvisor | 7300 |
| Loki | vardo-loki | 7400 |
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/onboardingThe setup wizard walks through:
- Create your admin account
- Name your instance
- 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.