Installing on your own server
Server requirements, one-command install, first sign-in with the PIN and which sections are enabled.
Rivo runs on a single VPS and belongs entirely to its owner: data, encryption keys and backups never leave the server. The short version is on the Install page.
Before you install
| Minimum | Recommended | |
|---|---|---|
| OS | Ubuntu 22.04 / 24.04, x86_64 (for arm64 ask at [email protected]) | Ubuntu 24.04 |
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 GB | 2 GB |
| Disk | 5 GB free | 20–40 GB (database, documents, backups) |
| Network | public IP, ports 80 and 443 open |
- Ports 80 and 443 must be free — Caddy listens on them and issues the HTTPS certificate itself. If nginx or apache already runs there, remove it or give Rivo other ports (
HTTP_PORT,HTTPS_PORT) and proxy yourself. - DNS. Point an A record for your domain (e.g.
rivo.example.com) at the server's IP before installing and wait until it propagates (dig +short rivo.example.com). Without it the certificate can't be issued.
One-command install
curl -fsSL https://get.me.rivo.day/install.sh | sudo bash -s -- --domain rivo.example.com --email [email protected]
The installer sets up Docker, downloads ready-made images and deploys everything into /opt/rivo. Nothing is built on the server — it takes a couple of minutes. Without flags it asks for the domain, email and license key itself.
| Flag | Purpose |
|---|---|
--license RIVO-… | license key from your customer account. Optional: you can enter it later in Settings → License |
--version 1.4.2 | install a specific version instead of the latest |
--dir /opt/rivo | a different install directory |
--yes | don't ask anything (for automation) |
--no-schedule | don't enable the daily backup |
--registry-user U --registry-token T | access to a private registry (issued in your account) |
The installer generates the secrets (APP_SECRET, VAULT_KEY, database password) and a random sign-in PIN — the instance is never left open, not even for a minute. The database schema is created on first start; there are no manual steps. Running the installer again is safe: secrets, data and version stay as they are.
First sign-in
At the end the installer prints the sign-in PIN — once, so write it down right away; it isn't shown anywhere else.
Open https://your-domain and enter it. Then:
- Change the PIN to your own — Settings → Access.
- Keep a copy of
/opt/rivo/deploy/.envoff the server (in a password manager, for example). WithoutAPP_SECRETandVAULT_KEYuploaded files and passwords can't be decrypted by anything — not even from a backup. - Save
BACKUP_PASSPHRASE, printed by the installer at the end — backups don't open without it. - If needed: an LLM key for the assistant, a Telegram bot token, Google Calendar, currency and time zone.
Which sections are enabled
Your license decides which sections are on: change the plan and the set changes by itself. Without a license everything is on. You can trim the set with a MODULES=… line in deploy/.env (comma-separated), then rivo restart; a disabled module is hidden in the interface.
Troubleshooting
| Symptom | What to do |
|---|---|
| The site doesn't open | rivo logs caddy; check the A record and that 80/443 aren't blocked by a firewall (ufw allow 80,443/tcp) |
| The certificate isn't issued | Let's Encrypt must reach the server on port 80; make sure no other web server holds it |
API is unhealthy | rivo logs api — usually the database didn't start or memory ran out |
| Download fails during install | the registry is private: pass --registry-user/--registry-token from your account |
Forgot the PIN
Reset it in the database, put a new APP_PIN into /opt/rivo/deploy/.env and restart the stack:
cd /opt/rivo
docker compose -f deploy/docker-compose.yml --env-file deploy/.env exec -T db psql -U rivo -d rivo -c "DELETE FROM settings WHERE key='APP_PIN';"
rivo restart
Updates and backups are covered in Updates, backup and restore.

