Deployed as a tenant of the Hill90 homelab —
hill90.com serves the UI, and identity comes from the homelab’s
Keycloak at
auth.hill90.com, realm platform. Verified 2026-08-06 07:45 UTC: 23
containers running, 0 unhealthy — the homelab’s 16 and the application’s 7.Identity and data are the platform’s. The tenant’s databases sit on the homelab’s
Postgres under a dedicated non-superuser role, and app-auth.hill90.com is not a live
surface — it returns 404. Authorization uses client roles on the hill90-ui client
rather than realm roles, so holding a homelab realm role does not by itself grant
access to the application. A local stack runs its own Postgres, and --standalone its
own Keycloak, so pages describing those locally remain accurate.Signing in was completed on 2026-07-30, reported by the operator who performed it.
That is not independently re-verified here: realm platform has event storage
disabled, so there is no server-side record left to read.Where a page in this section disagrees with
AI Application, the overview is newer.Architecture Overview
Hill90 is a Docker-based microservices platform hosted on a single VPS running AlmaLinux.System Layers
The platform is organized into four layers:Edge Layer
Traefik serves as the reverse proxy and load balancer, providing:- Automatic HTTPS via Let’s Encrypt
- HTTP-01 challenges for public services
- DNS-01 challenges for VPN-only services
- Routing, middleware, and rate limiting
Application Layer
Application services handle business logic:- API — REST API gateway (Express/TypeScript) for agent management, model policies, and user profiles
- AI (Model-Router) — Internal policy-gated LLM inference gateway (FastAPI/Python)
- Knowledge (AKM) — Persistent agent memory with hybrid search (FTS + pgvector semantic, FastAPI/Python)
- MCP — Model Context Protocol gateway (FastAPI/Python), JWT-authenticated
- Agentbox — Sandboxed agent runtime containers (Python, Starlette/uvicorn)
- Keycloak — Identity provider (OIDC/OAuth2). In production this is the homelab’s Keycloak at
auth.hill90.com, realmplatform; the application’s own was retired on 2026-07-30 andapp-auth.hill90.comreturns 404. Local development uses that same homelab Keycloak, realmplatform, and has since 2026-08-01; only the self-contained--standalonefork runs a Keycloak of its own, onlocalhost:18080and also realmplatform - UI — Next.js frontend application
Data Layer
- PostgreSQL + pgvector — Relational database with vector similarity search for semantic embeddings
- MinIO — S3-compatible object storage for files and avatars
- OpenBao — Secrets management (vault-first with encrypted backup)
Observability Layer
A full LGTM stack provides monitoring, logging, and tracing:- Prometheus — Metrics collection and alerting
- Grafana — Dashboards and exploration
- Loki — Log aggregation
- Tempo — Distributed tracing
- OpenTelemetry — Application tracing instrumentation
- Collectors: Promtail, Node Exporter, cAdvisor, postgres-exporter
Network Architecture
VPN-only services (Traefik dashboard, Grafana, MinIO console) are protected by IP whitelist middleware, accessible only through the VPN network. The AI service and Knowledge service are internal-only — they are not publicly routed through Traefik.
Certificate Management
The DNS Manager is an internal webhook that translates Traefik ACME requests into DNS API calls for TXT record management.
Deployment Model
- VPS provisioning — Automated via infrastructure APIs
- Configuration — Ansible playbooks for OS bootstrap
- Container orchestration — Docker Compose per service group
- CI/CD — GitHub Actions with path-filtered triggers
- DNS management — Automated via DNS API
Next Steps
Services
Detailed breakdown of each service and its responsibilities.
API Reference
Explore the REST API endpoints.