# jupyterhub Multi-user JupyterHub. Each authenticated user gets their own notebook container via DockerSpawner. **Cloud-only.** - **Networks**: `app` (UI proxied at `/jupyter` or subdomain) + `mgmt` (Docker socket so JupyterHub can spawn user containers) - **Spawned user containers** land on the `cloud-app` network so they can reach mlflow, influxdb (via grafana proxy), rabbitmq - **Config**: `config/jupyterhub_config.py` — DockerSpawner setup, authenticator, admin list, resource limits ## TODO - DockerSpawner config (image, network, user volumes, idle culling) - Keycloak OAuth via `oauthenticator.generic.GenericOAuthenticator` - Build a project-specific notebook image with EVOLV libs + mlflow client + InfluxDB client preinstalled - Per-user persistent volume mounted at `/home/jovyan/work` - CPU / memory limits per user container - Cull idle servers (`c.JupyterHub.services` cull-idle pattern)