Quickstart
Tring runs as a set of Docker containers. You need Docker with the Compose plugin.
Install
Section titled “Install”-
Download the installer, read it, then run it. It only creates a
tring/directory withdocker-compose.yml,.env.exampleand a few empty data folders.Terminal window curl -fsSLO https://raw.githubusercontent.com/shridarpatil/tring/main/install.shless install.shsh install.shcd tringSet
TRING_DIR=/srv/tringbeforesh install.shto install somewhere else. -
Review your config.
install.shcreated.envwith random secrets, including the admin password (TRING_ADMIN_PASSWORD). For a first local run the other defaults work. -
Start everything:
Terminal window docker compose pull && docker compose up -d
-
Clone the repository:
Terminal window git clone https://github.com/shridarpatil/tring && cd tringmake .env # copies .env.example with random secrets -
Build and start:
Terminal window docker compose up -d --build -
For hot-reload while developing, run the Go services on the host against the same Postgres, Redis and FreeSWITCH:
Terminal window make run # REST API + admin console on :8085, media plane + brain on :8087make helplists all targets. After changing Go code orfreeswitch/conf/*, runmake imagessodocker compose uppicks up the changes.
What’s running
Section titled “What’s running”| 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.
Sign in
Section titled “Sign in”-
Sign in with
TRING_ADMIN_EMAIL/TRING_ADMIN_PASSWORDfrom.env. The first start creates this tenant and user automatically (defaultadmin@tring.local). If you kept the default password, change it now. -
Create an API key in the console for your backend. Keep it in an environment variable or secret manager, never in front-end code.
Make a test call
Section titled “Make a test call”-
In the console, build a small IVR flow: a greeting, then a transfer to a team. Use the Test panel to simulate it.
-
Add yourself as an agent in that team.
-
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/. -
Call from the visitor page: you hear the greeting, then the agent widget rings.
Running on a server
Section titled “Running on a server”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):
TRING_GATEWAY_PUBLIC_URL=https://gw.example.com # browser-reachable, must reach /rtcTRING_PUBLIC_IP=203.0.113.10 # public / Elastic IP of the gatewayTRING_REDIS_ADDR=127.0.0.1:6379 # required when gateway auth is onNext steps
Section titled “Next steps”- Connect a phone trunk: add it in the console under Trunks, then add your numbers.
- Take WhatsApp calls on your business number.
- Read the architecture overview to understand how calls flow.