Self-Hosted Install
Run the Velocity backend, Postgres, and storage on your own infrastructure. Same binary as the managed cloud, license-gated.
Requirements
Self-hosted Velocity ships as a single Rust binary plus a Postgres database and an object store. Plan capacity around active sessions: each active session keeps its working copy in an encrypted in-RAM container that costs roughly fifty gigabytes of RAM per session at p95.
- Postgres: version 16 or newer. Vanilla Postgres, no extensions required. Aurora and Neon work.
- RAM: ~50 GB per concurrent active session. Sessions hibernate after idle and release RAM.
- Storage: any S3-compatible object store (R2, S3, Wasabi, MinIO) or a local POSIX disk with at least IOPS for your team size.
- SMTP: outbound SMTP for invite, password reset, and notification emails.
- Network: outbound HTTPS to your chosen CLI providers and to license.aethernaut.ai for license validation (offline mode available for air-gapped installs).
- OS: Linux x86_64 or arm64. Tested on Ubuntu 22.04+, Debian 12+, RHEL 9, Amazon Linux 2023.
Install the binary
Download the binary from your customer portal. Each release is signed and ships with a SHA-256 checksum. The binary is statically linked — no system dependencies beyond a recent libc.
- Log in to the portal at aethernaut.ai/portal and open Downloads → Self-Hosted.
- Pick the version pinned to your license tier. Verify the checksum against the value shown in the portal.
- Place the binary somewhere on PATH and make it executable.
- Create a config file at
/etc/velocity/config.tomlusing the template the portal generated for you.
# minimal config.toml shape
[database]
url = "postgres://velocity:secret@localhost:5432/velocity"
[storage]
backend = "s3"
endpoint = "https://s3.us-east-1.amazonaws.com"
bucket = "velocity-prod"
[smtp]
host = "smtp.example.com"
port = 587
[license]
key_file = "/etc/velocity/license.key"Run the migration tool
Before the binary starts serving traffic, the database schema must be at the version the binary expects. The velocity-migrate CLI handles this on fresh installs and on every upgrade.
velocity-migrate run --backup-first --auto-confirm--backup-firstdumps the current schema to your configured backup location before migrating.--auto-confirmskips the interactive y/n prompts — appropriate for CI/CD or automated upgrades.- Migrations are idempotent and transactional. A failed migration rolls back cleanly.
- Run
velocity-migrate statusany time to see the current schema version and pending migrations.
Set the license key
Your portal account contains an Ed25519-signed license key valid for your tier, seat count, and expiration. Paste it into the file referenced by license.key_file in your config.
- Copy the key text from Portal → License → Key.
- Write it to
/etc/velocity/license.keywith permissions0600owned by the Velocity service user. - Restart the binary. On boot, the license is verified against the embedded public key — no network call required.
- Air-gapped installs work identically. License renewals are issued as new key files; replace and restart.
Configure SMTP
Velocity sends transactional email for invites, password resets, role-change notifications, and optional digest summaries. Any RFC-compliant SMTP relay works.
[smtp]
host = "smtp.example.com"
port = 587
username = "velocity@example.com"
password_file = "/etc/velocity/smtp.secret"
from_address = "velocity@example.com"
from_name = "Velocity"
starttls = true- Use a
password_filepath rather than inline secrets so the config can stay in version control. - Send yourself a test mail with
velocity-admin smtp test --to you@example.com. - STARTTLS is required by default; set
starttls = falseonly on trusted internal relays. - For high-volume deployments, point at Postmark, SES, or your own MTA — Velocity does not enforce a provider.
First boot and admin onboarding
On first boot the binary detects an empty database and enters single-shot bootstrap mode. It prints a one-time URL containing a short-lived token to STDOUT and to the log file.
- Open the printed URL in a browser pointed at your self-hosted hostname.
- Create the first Admin account. This Admin can promote others later.
- Create the first Org. Self-hosted deployments are typically single-org but multi-org is supported on the Enterprise tier.
- Invite the rest of your team by email — invites use the SMTP relay you configured above.
- The bootstrap URL self-destructs after the first Admin is created.
Updating to new versions
Self-hosted Velocity never auto-updates. Every upgrade is a deliberate operator action that follows the same shape regardless of how many versions you're jumping.
- Download the new binary and checksum from the portal. Verify the checksum.
- Stop the running binary. Active sessions are notified and their in-RAM working copies are flushed to encrypted storage.
- Run the migration tool against the new binary:
velocity-migrate run --backup-first --auto-confirm. - Swap the binary in place and restart the service.
- Watch the boot logs — Velocity prints schema version, license status, storage reachability, and SMTP reachability before accepting traffic.
Question we didn't cover?
Email sales@aethernaut.ai — we keep docs honest and respond inside one business day.