Skip to content

Service Inventory

Source of truth

hns-platform/components.yml (the deploy list), inventory/group_vars/all/main.yml (in-cluster URLs), and each service's own .platform.yml (the deployments it renders). Update this page when those change.

Deployed services

components.yml is the list the deploy loop walks. Each entry is a git repo cloned and deployed by the hns-service role.

Service (repo) Stack Version knob
hns-ticketing-backend PHP/Symfony REST API — system of record BACKEND_VERSION
hns-admin-portal PHP/Symfony + Twig — operations UI ADMIN_VERSION
hns-quota-portal PHP/Symfony + Twig — quota/Petrol UI QUOTA_VERSION
hns-idp Keycloak + SPIs — identity provider IDP_VERSION
hns-mailer Rust — email delivery MAILER_VERSION
hns-ticketing-eventbus Go + NATS JetStream — event delivery EVENTBUS_VERSION
waiting-room Node/Fastify — fair-access queue WAITING_ROOM_VERSION
hns-mobile-web-prototype React/Vite SPA — fan web client MOBILE_WEB_VERSION

Each version defaults to the git ref dev and is overridable per composition via the env var above (e.g. BACKEND_VERSION=platform). See Compositions & environments.

Grafana is in the list but commented out

hns-ticketing-grafana (observability stack) has an entry in components.yml that is currently commented out — it is not deployed by the standard run. Uncomment it (and set GRAFANA_VERSION) to include it.

Service ≠ deployment

One git repo can render multiple Kubernetes Deployments. The .platform.yml deployments: list is what actually becomes pods. For example, hns-ticketing-backend renders four: the backend (nginx + php), hns-backend-redis, hns-backend-worker (the Redis expiry subscriber), and hns-ticketing-ntfy (dev push inbox). hns-idp similarly brings its own hns-idp-db. The full per-service breakdown lives in each repo's .platform.yml — see the contract.

In-cluster endpoints

Services address each other by Kubernetes DNS name over ClusterIP. These are the wired URLs from main.yml (and backend's .platform.yml):

DNS name Port Purpose
hns-ticketing-backend 80 Backend REST API (backend_url; /api/v1 prefix via backend_api_url)
hns-idp 8080 Keycloak — JWKS + token endpoints (keycloak_jwks_url, keycloak_token_url)
hns-backend-redis 6379 Cart holds, waiting queue, masquerade sessions, JWKS/app cache (redis_url)
nats 4222 Event bus (nats_url)
hns-mailer 6006 Email delivery (mailer_url)
waiting-room-api 3000 Waiting-room API (waiting_room_url) — not the public api.wr ingress
hns-ticketing-ntfy 80 Dev push inbox (NTFY_URL)
hns-mailpit 8025 / 1025 Dev mail catcher: UI (mailpit_base_url) + SMTP (mailer_dsn)
loki 3100 Business logs (loki_business_url)
loki-ops 3101 Ops logs (loki_ops_url)
prometheus 9090 Metrics (prometheus_url)
tempo 4318 Traces, OTLP (tempo_url)

Public ingress hosts

Browser-facing subdomains, all under {{ domain }} (default portal.hnst.dev3.wsagency.io) and served by Traefik on one shared certificate. Each is declared as ingress.host in the owning service's .platform.yml:

Host Service
api.{{ domain }} backend
admin.{{ domain }} admin portal
quota.{{ domain }} quota portal
idp.{{ domain }} Keycloak
ntfy.{{ domain }} dev push inbox
mobile.{{ domain }} mobile-web SPA
api.wr.{{ domain }} / admin.wr.{{ domain }} waiting-room API / admin UI

Last Updated: June 2026