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
| Setup | Setting in .env |
|---|---|
| Public DNS, automatic Let's Encrypt (default) | REQUESTARIUM_DOMAIN=requestarium.example.com |
| Your own certificate | put cert.pem and key.pem in ./certs, and set REQUESTARIUM_TLS=tls /certs/cert.pem /certs/key.pem |
| Intranet without public DNS | REQUESTARIUM_TLS=tls internal, and trust Caddy's root certificate on your computers |
| HTTPS ends at your load balancer | REQUESTARIUM_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 setREQUESTARIUM_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:
- Set
TAIRI_LICENSE_PROVIDER=manualin.envand rundocker compose --profile db up -d. - 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 caddyshows startup errors. The server refuses to start with an invalid setting and names the variable.- A
502right 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].