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