Self-hosted

Requestarium can run on your own server instead of Requestarium Cloud. Everything stays inside your network: the server never calls Paddle or any Requestarium service, and your licence is checked offline.

The self-hosted server is the same product as the cloud: the web app, sync for the desktop app, the CLI and MCP server, and the editor extensions all connect to it.

What you get

After you buy a self-hosted licence, we send you:

  • the installation bundle: Docker Compose files, an install script, and a backup script;
  • access to the Requestarium container images;
  • a signed licence file with your plan, number of seats, and end date.

Requirements

  • A Linux host with Docker Engine 24 or later and Docker Compose 2.20 or later. 2 vCPU, 4 GB of RAM, and 20 GB of disk are enough for a team of 50.
  • A DNS name for the server, for example requestarium.example.com.
  • Ports 80 and 443 open to your users. Port 80 is needed for Let's Encrypt unless you bring your own certificate.
  • Optional: an SMTP relay, for sign-up codes and invitations.

The stack runs four containers: Postgres, the Requestarium API, the web app, and Caddy for HTTPS. You can also point it at your own Postgres.

Install

./install.sh                     # creates .env and generates the secrets
$EDITOR .env                     # your domain, mail settings
docker compose --profile db up -d
docker compose ps                # every service "running" or "healthy"

Open https://<your domain> and sign up. The first account creates the first organization. Until mail is set up, the sign-up code is printed by docker compose logs backend.

HTTPS

SetupSetting in .env
Public DNS, automatic Let's Encrypt (default)REQUESTARIUM_DOMAIN=requestarium.example.com
Your own certificateput cert.pem and key.pem in ./certs, and set REQUESTARIUM_TLS=tls /certs/cert.pem /certs/key.pem
Intranet without public DNSREQUESTARIUM_TLS=tls internal, and trust Caddy's root certificate on your computers
HTTPS ends at your load balancerREQUESTARIUM_SITE_ADDRESS=:80, and forward the load balancer to port 80

Connect the apps

  • Web app: open https://<your domain>.
  • CLI and MCP server: requestarium login --api-url https://<your domain>/api, or set REQUESTARIUM_API_URL.
  • Desktop app: on the sign-in screen, click Change next to Server and enter https://<your domain>/api. To switch back, choose Use Requestarium Cloud. Sign out first to switch servers later.

Sign-in with Google or GitHub works with your own OAuth app: use https://<your domain>/api/auth/google/callback (or /github/callback) as the redirect URL, and set the TAIRI_GOOGLE_* or TAIRI_GITHUB_* variables in .env.

Activate your licence

Without a licence, the server runs with the Free plan limits. To unlock your plan:

  1. Set TAIRI_LICENSE_PROVIDER=manual in .env and run docker compose --profile db up -d.
  2. In the web app, open Settings → License, paste the licence (it starts with RQL1.), and click Activate license.

When the licence ends, the organization keeps all its data and falls back to the Free plan limits. Activate a renewed licence the same way. Licence terms are in the Terms of Service.

Upgrade

./backup.sh
sed -i 's/^REQUESTARIUM_VERSION=.*/REQUESTARIUM_VERSION=<new version>/' .env
docker compose --profile db pull && docker compose --profile db up -d

Database migrations run when the server starts.

Back up

./backup.sh writes a compressed database dump to backups/ and keeps the newest 14. Run it every night from cron and copy backups/ to another machine.

Keep a copy of .env too. It holds the encryption keys for secrets and two-factor authentication; without them, a restored server can't read encrypted values.

To restore on a fresh install:

docker compose --profile db up -d postgres
gunzip -c backups/<file>.sql.gz | docker compose exec -T postgres psql -U requestarium -d requestarium
docker compose --profile db up -d

Troubleshooting

  • docker compose logs -f backend caddy shows startup errors. The server refuses to start with an invalid setting and names the variable.
  • A 502 right after start: the server is still running migrations. Wait a few seconds.
  • Let's Encrypt fails: check that port 80 is open and that the DNS name points at the server.

Questions about self-hosting: [email protected].