JupyterHub 5 on Ubuntu 24.04
by cloudimg
JupyterHub 5 on Ubuntu 24.04 | 24/7 Support by cloudimg
JupyterHub 5 on Ubuntu 24.04 by cloudimg
JupyterHub 5.4.6 on Ubuntu 24.04 LTS (Noble Numbat), purpose-built for Microsoft Azure and maintained by cloudimg. JupyterHub is the de facto open-source multi-user platform for hosting Jupyter notebooks at organisations: data science teams, classrooms, research labs, and engineering groups all use it to share a single VM among many users while keeping each user's notebooks, files, and kernels isolated.
Why Choose cloudimg?
- 24/7 Expert Support with guaranteed 24-hour response and 1-hour critical-issue average. Contact support@cloudimg.co.uk
- Production-Ready from Launch — security-patched, validated, and pre-configured before publication
- Azure-Native Integration — Azure Linux Agent, cloud-init, Gen2 Hyper-V boot
- Per-VM Admin Credential Generation — `jupyter` user password rotated uniquely on first boot, written to `/etc/cloudimg-credentials.txt` (mode 0600). No two virtual machines ever share an admin password.
- Websocket-Aware Reverse Proxy — nginx is pre-configured with `proxy_http_version 1.1`, `Upgrade`/`Connection` headers, and `proxy_buffering off` so kernel comms work end-to-end without manual tuning
What is Included
- JupyterHub 5.4.6 installed into a Python 3.12 venv at `/opt/jupyterhub` (no system pip pollution)
- JupyterLab + classic Notebook UIs available; default landing is JupyterLab via `c.Spawner.default_url = '/lab'`
- configurable-http-proxy (Node.js) — JupyterHub's required routing component
- PAMAuthenticator using Linux system users — log in with the `jupyter` user and the per-VM password
- nginx reverse proxy on port 80 → 127.0.0.1:8000 with websocket Upgrade for kernel channels
- jupyterhub-5-firstboot.service systemd one-shot rotating the `jupyter` password and writing credentials
- jupyterhub.service systemd unit auto-starting on boot
- Ubuntu 24.04 LTS base with latest security patches at build time
- Azure Linux Agent for SSH key injection and seamless cloud integration
Use Cases
- Single-VM multi-user JupyterLab for small data-science teams
- Educational notebook server (classroom labs, training, workshops)
- Engineering shared analysis environment with persistent kernels and files
- Research-lab compute server for data scientists who don't want a Kubernetes deployment
- Replacement for shared SaaS notebook services where data residency matters
Technical Specifications
- Operating System: Ubuntu 24.04 LTS (Noble Numbat)
- JupyterHub Version: 5.4.6
- Python Runtime: Python 3.12 (system) + venv at /opt/jupyterhub
- Authenticator: PAMAuthenticator (Linux system users)
- Default User: azureuser (sudo, OS); jupyter (JupyterHub admin)
- Web UI Port: 80 (nginx) → 8000 (JupyterHub)
- Service Management: systemd (jupyterhub.service, jupyterhub-5-firstboot.service)
- Recommended Size: Standard_B2s for development; Standard_D4s_v3 or larger for multiple concurrent users
- VM Generation: Hyper-V Gen2 with UEFI boot
Notes on Hardening for Multi-User Production
The default PAMAuthenticator authorises only the `jupyter` user. To add more users, create them as Linux system users (`useradd -m -s /bin/bash <name>`, set a password via `chpasswd`) and add their usernames to `c.Authenticator.allowed_users` in `/etc/jupyterhub/jupyterhub_config.py`, then `systemctl restart jupyterhub.service`. For external authentication (GitHub, Google, OIDC), install the `oauthenticator` package and switch `c.JupyterHub.authenticator_class`.
Support
cloudimg provides 24/7/365 expert technical support. Contact support@cloudimg.co.uk or visit www.cloudimg.co.uk.