Vardo

Installation

Install Vardo on your server with a single command or manually via Docker Compose.

Prerequisites

Minimum requirements

Your server needs at least 1 GB RAM and 2 GB free disk space. 2 GB+ RAM and 20 GB+ disk are recommended for production. Ports 80 (HTTP) and 443 (HTTPS) must be accessible.

  • Server: Linux VPS or dedicated server — Ubuntu 22.04+ or Debian 12+ (these are the only distros where the install script can automate package installation). The script detects Fedora, Rocky, Alma, Arch, Alpine, and RHEL/CentOS but cannot install packages on them — you'd need to install Docker and dependencies manually. macOS is supported for local development only (Docker Desktop required). WSL is detected but untested.
  • Domain: A domain you control with access to DNS settings

Docker and Docker Compose are installed automatically by the install script if not already present.

One-command install

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

The installer prompts for an instance role first:

RoleUse case
ProductionPublic server with TLS and domains
StagingTesting environment (homelab, VPS) — domain is optional
DevelopmentLocal development

For production installs, the script then prompts for three values:

  1. Dashboard domain — where the Vardo UI will be accessible (e.g. vardo.example.com)
  2. Base domain — the root domain for auto-generated app subdomains (e.g. example.com)
  3. ACME email — the email address for Let's Encrypt TLS certificates

What the installer does

The install script runs these steps in order:

  1. System checks — Verifies OS compatibility, RAM (minimum 1 GB, warns below 2 GB), available disk space (minimum 2 GB, warns below 20 GB) and required ports.
  2. Swap file — Creates a 2 GB swap file on servers with less than 4 GB RAM, if no swap is already active. Skipped on macOS.
  3. Packages — Installs curl, git and unattended-upgrades (automatic security updates) via your system's package manager. Installs Docker Engine and the Compose plugin if not present, then configures log rotation (10 MB x 3 files per container).
  4. Clone — Clones the Vardo repository to /opt/vardo (or pulls latest if already installed).
  5. Configuration — Prompts for role, domain, base domain and ACME email. Generates random secrets for the database password, auth secret, encryption master key and Traefik dashboard credentials. Writes everything to /opt/vardo/.env.
  6. DNS validation — Detects the server's public IP and checks whether the dashboard domain resolves to it. Warns if DNS isn't configured but allows continuing.
  7. Build and start — Runs docker compose build and docker compose up -d.
  8. Health check — Waits up to 60 seconds for the app to respond on /api/health.
  9. Template seeding — Seeds the built-in service templates (PostgreSQL, Redis, MySQL, etc.) via an internal API call.

The installer does not configure a firewall. Docker publishes ports directly via iptables, bypassing ufw by default. Firewall setup is left to you.

DNS setup

Before or after installation, create two DNS records pointing to your server's IP:

TypeNameValue
Avardo.example.com<server-ip>
A*.example.com<server-ip>

The first record routes traffic to the Vardo dashboard. The wildcard record lets Vardo auto-create subdomains for deployed apps (e.g. myapp.example.com).

The dashboard domain and base domain can use the same root domain or be entirely different. DNS propagation typically takes a few minutes but can take up to 48 hours.

Manual installation

If you prefer not to use the install script:

# Clone the repository
git clone --depth 1 https://github.com/joeyyax/vardo.git /opt/vardo
cd /opt/vardo

# Copy and edit the environment file
cp .env.example .env
# Edit .env with your values — see Configuration docs for details

# Build and start
docker compose up -d

The production Docker Compose stack includes these services:

ServiceDescription
vardo-frontendNext.js application (port 3000 internal)
vardo-postgresPostgreSQL 17 database
vardo-redisRedis Stack server
vardo-traefikReverse proxy with automatic TLS
vardo-cadvisorContainer resource monitoring
vardo-lokiLog aggregation
vardo-promtailLog collector (ships Docker container logs to Loki)
vardo-wireguardWireGuard tunnel for mesh networking

Post-install

After installation:

  1. Visit http://<your-server-ip>:3000 in your browser (or https://your-domain.com if you configured a domain during setup).
  2. Walk through the setup wizard — create your admin account, optionally configure email, backups, GitHub and DNS.
  3. Create your first organization and start deploying.

Useful commands

After installation, management goes through the install script at /opt/vardo/install.sh.

# Re-run from installed location (shows interactive menu)
sudo bash /opt/vardo/install.sh

# Specific commands
sudo bash /opt/vardo/install.sh update    # Pull latest and rebuild
sudo bash /opt/vardo/install.sh doctor    # Run health diagnostics
sudo bash /opt/vardo/install.sh uninstall # Stop and remove

# View logs
docker compose -f /opt/vardo/docker-compose.yml logs -f

# Restart
docker compose -f /opt/vardo/docker-compose.yml restart

# Stop
docker compose -f /opt/vardo/docker-compose.yml down

# Update manually
cd /opt/vardo && git pull && docker compose up -d --build

Doctor mode

Run sudo bash /opt/vardo/install.sh doctor to check system health. It verifies Docker is running, required ports are available, containers are up and the app is responding.

Unattended install

For automated provisioning, set environment variables and pass --unattended:

VARDO_DOMAIN=vardo.example.com \
VARDO_BASE_DOMAIN=example.com \
[email protected] \
curl -fsSL https://vardo.run/install.sh | sudo bash -s -- --unattended

Backups

Back up these items regularly:

  • .env — Contains all secrets (database password, auth secret, encryption key). Located at /opt/vardo/.env.
  • PostgreSQL datadocker compose -f /opt/vardo/docker-compose.yml exec -T vardo-postgres pg_dumpall -U vardo > backup.sql
  • Docker volumes — The vardo_projects volume contains deployment data.

Migrations run automatically on app startup via Drizzle. No need to run migrations manually after updates.

macOS (development)

The installer also works on macOS for local development. Install path defaults to ~/vardo instead of /opt/vardo, and the role is automatically set to development. Docker Desktop must be installed and running first.

On this page