Skip to content

Quickstart

Tring runs as a set of Docker containers. You need Docker with the Compose plugin.

  1. Download the installer, read it, then run it. It only creates a tring/ directory with docker-compose.yml, .env.example and a few empty data folders.

    Terminal window
    curl -fsSLO https://raw.githubusercontent.com/shridarpatil/tring/main/install.sh
    less install.sh
    sh install.sh
    cd tring

    Set TRING_DIR=/srv/tring before sh install.sh to install somewhere else.

  2. Review your config. install.sh created .env with random secrets, including the admin password (TRING_ADMIN_PASSWORD). For a first local run the other defaults work.

  3. Start everything:

    Terminal window
    docker compose pull && docker compose up -d
Container Port What it does
tring 8085, 8087 The api role on 8085: REST API, admin console (/admin/), SDK bundles (/sdk/). The gateway role on 8087: media plane and brain (IVR, routing, recording, call records)
tring-fs 5060 SIP, 8021 ESL FreeSWITCH, the edge to phone trunks. Keep it private.
tring-db 5434 Postgres
tring-redis 6379 Agent presence and single-use call tokens

Follow the logs with docker compose logs -f. Stop everything with docker compose down.

  1. Open http://localhost:8085/admin/.

  2. Sign in with TRING_ADMIN_EMAIL / TRING_ADMIN_PASSWORD from .env. The first start creates this tenant and user automatically (default admin@tring.local). If you kept the default password, change it now.

  3. Create an API key in the console for your backend. Keep it in an environment variable or secret manager, never in front-end code.

  1. In the console, build a small IVR flow: a greeting, then a transfer to a team. Use the Test panel to simulate it.

  2. Add yourself as an agent in that team.

  3. Embed the agent widget in a page and the visitor widget in another, as described in the browser SDK docs, or use the demo portal in examples/demo-portal/.

  4. Call from the visitor page: you hear the greeting, then the agent widget rings.

For anything beyond localhost, the network settings are what people get wrong. Set at least these in .env (section 5 of .env.example explains each):

Terminal window
TRING_GATEWAY_PUBLIC_URL=https://gw.example.com # browser-reachable, must reach /rtc
TRING_PUBLIC_IP=203.0.113.10 # public / Elastic IP of the gateway
TRING_REDIS_ADDR=127.0.0.1:6379 # required when gateway auth is on