The IOModel Stack is the complete self-hosted deployment of IOModel: a web application, its realtime collaboration backend, an identity provider, a relational database, and a cache — all sitting behind a single TLS-terminating edge.
What this namespace represents
This object is a logical grouping (namespace) for everything that ships in
one deployment unit. On Kubernetes it maps to a Namespace; with Docker Swarm
it maps to a single stack.
| Component | Role | Workload type |
|---|---|---|
| Reverse Proxy | TLS termination, HTTP/WS routing | Ingress / edge |
| IOModel Studio | Web UI + API | Stateless Deployment |
| Yjs Realtime Server | Live collaboration over WebSocket | Stateless Deployment |
| Keycloak | Identity provider / SSO (optional) | Deployment |
| PostgreSQL | Application database | Stateful (StatefulSet) |
| Redis | Cache & coordination | Stateful (StatefulSet) |
StatefulSets with persistent volumes.Group everything under one namespace and deploy components independently:
kubectl create namespace iomodel
kubectl -n iomodel apply -f k8s/apiVersion: v1
kind: Namespace
metadata:
name: iomodel
labels:
app.kubernetes.io/part-of: iomodel-stackStateful components (postgres, redis) use StatefulSets with
volumeClaimTemplates; stateless components (studio, yjs_server,
keycloak) use Deployments fronted by Services and an Ingress.
Change defaults before exposing the stack
The bundled secrets (database password, Keycloak admin, JWT secrets) are for local use only. Set strong secrets, a real public origin, and TLS before exposing the deployment to a network.
kubectl create namespace iomodel
kubectl -n iomodel apply -f k8s/apiVersion: v1
kind: Namespace
metadata:
name: iomodel
labels:
app.kubernetes.io/part-of: iomodel-stack