Skip to main content

Documentation Index

Fetch the complete documentation index at: https://support.rallly.co/llms.txt

Use this file to discover all available pages before exploring further.

This guide installs Rallly using the Rallly CLI. It bundles the app, a PostgreSQL database, S3-compatible object storage, and an HTTPS reverse proxy — everything runs on one machine with no extra setup. If you’d rather use a managed database or object store, see External services.
Already running Rallly from a hand-edited docker-compose.yml or config.env? Follow the upgrade guide to move onto the new stack without losing data.

Requirements

  • A server with at least 2 GB RAM
  • Docker 19.03+ with Compose v2
  • Ports 80 and 443 open on the server (bundled proxy only — see External reverse proxy if you’re bringing your own)
  • A domain name with a DNS A record pointing to the server’s IP
  • An SMTP server for sending emails (e.g. Resend, Postmark, Mailgun, Brevo)
Use a transactional email provider. We don’t recommend running your own SMTP server — deliverability depends on IP reputation, SPF/DKIM/DMARC, and reverse DNS, which are hard to get right. Consumer inboxes like Gmail or Proton Mail are also a poor fit: they rate-limit automated senders and will eventually block sign-in emails.

Quick install

Run the installer on your server:
curl -fsSL https://get.rallly.co | bash
The installer will:
  1. Check that Docker and the required ports are available.
  2. Download the stack to /opt/rallly.
  3. Walk you through configuration (domain, support email, SMTP).
  4. Generate secure secrets automatically.
  5. Start the stack.
On first boot, Traefik will request a Let’s Encrypt certificate for your domain. This can take up to a minute. Once it’s ready, your instance is available at https://<your-domain>.

Claim the admin account

After the stack is running, the first user whose email matches INITIAL_ADMIN_EMAIL can navigate to /control-panel and claim the admin role. See the Control Panel guide for details.

External services

The bundled reverse proxy, Postgres database, and object storage containers are the default. You can swap any of them for external providers (your own Nginx/Caddy/Cloudflare Tunnel, managed Postgres, AWS S3, Cloudflare R2, MinIO, etc.) by setting the relevant variables in .env. The installer uses Docker Compose profiles to skip any bundled service that has an external endpoint configured, so no stack edits are needed.

External reverse proxy

Set PROXY_MODE=external to disable the bundled Traefik. The web container is then published on a host port that your reverse proxy can route to. WEB_PORT controls the bind — defaults to 127.0.0.1:3000 (loopback only).
PROXY_MODE=external
WEB_PORT=127.0.0.1:3000
Your reverse proxy is responsible for terminating TLS and forwarding to WEB_PORT. Set WEB_PORT=0.0.0.0:3000 to expose on all interfaces, or pick a different port if 3000 is in use. The installer prompts for this during ./rallly.sh setup — pick option 2 (“external”) at the reverse proxy step.

External database

Set DATABASE_URL in .env to your Postgres connection string. When this variable is set, the bundled db container is not started.
DATABASE_URL=postgres://user:password@db.example.com:5432/rallly

External object storage

Set the S3 variables in .env to point at your bucket. When S3_ENDPOINT is set to anything other than the bundled Garage endpoint, the bundled garage container is not started.
S3_ENDPOINT=https://s3.us-east-1.amazonaws.com
S3_BUCKET_NAME=my-rallly-bucket
S3_REGION=us-east-1
S3_ACCESS_KEY_ID=...
S3_SECRET_ACCESS_KEY=...
Apply changes with ./rallly.sh restart.

Next steps