Bare metal

No Docker: one script installs Postgres and Caddy, builds ravyn from source, and sets both services up under systemd. Meant for a fresh Debian or Ubuntu server.

Run this on a server you're comfortable handing root to for a few minutes - it installs packages, creates a system user, and writes systemd units. Read it before running it if that matters to you; it's a plain bash script, nothing hidden.

1. Point your domain at the server

Two DNS A records to this server's IP: one for the app (files.example.com), one for the API (api.example.com). Caddy needs both resolving before it can get TLS certificates.

2. Run the installer

curl -O https://tryravyn.com/install.sh
chmod +x install.sh
sudo DOMAIN=files.example.com ./install.sh

Leave off DOMAIN=... and it'll just ask. The API domain defaults to api. plus whatever you gave it - override with API_DOMAIN=... if you want something else.

What it actually does

  1. Installs Postgres, Caddy, and the build tools needed to compile Rust.
  2. Creates a dedicated ravyn system user - nothing runs as root.
  3. Installs Rust for that user and clones ravyn into /opt/ravyn.
  4. Builds release binaries for both ravyn-api and ravyn-web.
  5. Creates the Postgres role and database, with a random generated password.
  6. Writes /etc/ravyn/api.env and /etc/ravyn/web.env.
  7. Installs and starts ravyn-api.service and ravyn-web.service under systemd.
  8. Adds a Caddy site block for both domains and reloads it.

3. Create the first account

Open https://your-domain and register. The first account on a fresh instance always becomes admin - no separate setup wizard.

Managing the services

systemctl status ravyn-api ravyn-web
journalctl -u ravyn-api -f
systemctl restart ravyn-api ravyn-web

Updating

There's no update command yet - pull and rebuild by hand:

cd /opt/ravyn
sudo -u ravyn git pull
sudo -u ravyn env PATH="/home/ravyn/.cargo/bin:$PATH" cargo build --release -p ravyn-api
sudo -u ravyn env PATH="/home/ravyn/.cargo/bin:$PATH" cargo-leptos build --release -p ravyn-web
systemctl restart ravyn-api ravyn-web

Where things live

PathWhat
/opt/ravynsource checkout + build output
/var/lib/ravynuploaded files and thumbnails
/etc/ravyn/*.envconfiguration, including the DB password
/etc/caddy/ravyn.caddyfilethe reverse proxy block the installer added

To use S3-compatible storage instead of local disk, or to change anything else, edit /etc/ravyn/api.env and systemctl restart ravyn-api - see the environment variable reference on the Docker page, they're the same variables either way.

Every feature, configuration option, and endpoint (2FA, quotas, webhooks, chunked uploads, and the rest) is on the features page.