Skip to main content

Quickstart

This guide gets a full Ticketra stack running on your machine with Docker Compose and walks you through the first login.

Prerequisites

  • Docker and Docker Compose v2
  • ~8 GB of RAM available to Docker (the stack is tuned to fit within an 8 GB cap)
  • Git

1. Get the code

git clone https://github.com/ticketra/ticketra.git
cd ticketra

2. Configure environment and secrets

Copy the environment template and review it:

cp .env.example .env

Secrets are not stored in .env — they live as files in the secrets/ directory and are mounted as Docker secrets. At minimum you need:

Secret filePurposeRequirement
secrets/jwt_secretSigns session tokens≥ 32 characters
secrets/db_passwordPostgreSQL passwordstrong value
secrets/admin_passwordInitial SUPER_ADMIN password≥ 12 characters
secrets/integration_encryption_keyEncrypts CTI API keys at reststrong value

See secrets/README.md in the repository for generating these safely.

Set strong secrets before exposing the app

The API refuses to start if JWT_SECRET is shorter than 32 characters or admin_password is shorter than 12. Never commit the secrets/ directory or .env.

3. Start the stack

docker compose up -d --build

This builds and starts four containers: frontend, api, postgres, and opensearch. The API automatically runs database migrations and seeds the initial admin user on first boot.

Check that everything is healthy:

docker compose ps

You can also hit the health endpoint:

curl -k https://localhost/api/v1/health
# {"status":"healthy","database":"connected","opensearch":"connected","version":"1.0.0"}

4. Log in

Open https://localhost in your browser. (Local deployments use a self-signed certificate, so you'll need to accept the browser warning.)

Log in with:

  • Username: the value of TICKETRA_ADMIN_USERNAME in .env (default admin)
  • Password: the value you placed in secrets/admin_password
You'll be asked to change your password

On first login the seed administrator is required to change its password before it can access any resources. This is expected behavior.

5. Tail the logs (optional)

docker compose logs -f api

Next steps