Repository navigation
Releases
v0.7.0
Includes everything listed under 0.6.0 below, which was never published on its own.
Upgrade: Hub and every worker (workers only for the failed-runs list). Hub restart needed.
Hub:
-
Users in several teams choose one at start ("Which team?" on the start page). One-team users see no change. Deleting such a user removes their account on every team's worker.
-
The Hub renews its own Vault token daily; drop the
vault-renewcron job. Add theauth/token/renew-selfpath to the policy (docs/SECURITY.md§4, step 2). -
Stop Server returns as soon as the server has exited (was always 5 s).
-
A slow Vault no longer freezes the Hub while a server starts.
-
After a worker reboot a server no longer shows as running because another program got its process number.
-
If a user's Linux account cannot be created, the start page says so (was an SSH login error).
-
Shared homes: the user's own group gets the same ID as the user on every worker; team-folder links work for users not yet moved.
-
Shared home folders (EFS):
home_baseinhub_settings.json; every user gets the same Linux user ID on every worker (README → Shared home folders). -
Monitoring page redesigned: what needs attention first, compact worker cards, light and dark, no external scripts.
-
15 days of per-user usage (CPU, memory) stored in the state DB and graphed on the monitoring page.
-
Prometheus endpoint for Grafana:
/hub/monitoring/metrics, off untilJUPYTERPILOT_METRICS_TOKENis set.
Workers:
- Scheduled notebooks whose last run failed are listed on
/hub/monitoring. sudo jupyterhub-pilot mount-homes <efs-dns-name>mounts the shared home filesystem.- A scheduled notebook now runs only on the worker where it was scheduled (matters with shared homes).
Full details, including the 0.6.0 changes this release carries: CHANGELOG
Install: pip install "jupyterhub-pilot[hub]==0.7.0" on the Hub, "jupyterhub-pilot[worker,ai]==0.7.0" on workers.
v0.5.1
v0.5.0
Install from pip, per-user monitoring, and a load test.
# Hub
sudo pip3 install --break-system-packages --ignore-installed "jupyterhub-pilot[hub]"
sudo jupyterhub-pilot install-hub
# Each worker
sudo pip3 install --break-system-packages --ignore-installed "jupyterhub-pilot[worker,ai]"
sudo jupyterhub-pilot install-worker
# Then, on the Hub
sudo jupyterhub-pilot add-worker team_beta <worker-private-ip>New
- No git clone. Everything installs from PyPI. The
jupyterhub-pilotcommand sets up a Hub (install-hub) or worker (install-worker), registers workers (add-worker) and runs load tests (load-test). One command set for Ubuntu and Amazon Linux 2023. Each machine's settings and keys stay in/opt/jupyterhub-pilot. (#10) - Per-user usage on the monitoring dashboard: each user's CPU and memory against their limits (the bar turns red near the memory limit), kernels, home-folder size and uptime, plus a summary bar. Admins see everyone; users see only their own row. (#7)
- Load test: start many test users at once across teams and see start times and which kernels hit their limits. (#8)
Fixes
- A stopped worker no longer leaves its users' servers listed as running forever: after 5 minutes unreachable they show as stopped, and users can start again when a worker is back. (#6)
add-workerrefuses to run on a worker; the CPU chart no longer covers "Last update"; metrics agents reconnect within 10 s of a Hub restart. (#6)- Calmer README, also the new PyPI description. (#9)
Upgrading
- Installs made with
git clonekeep working aftergit pull: the repo-rootjupyterhub_config.pynow loads the packaged config with settings from its own folder. - To move one to the pip layout,
pip installthe package and runinstall-hub/install-workeragain; keys and team mapping are kept. - Workers no longer need
get_port.py.oauthenticatoris now part of the[hub]extra.
Known limits
The pip-install setup scripts were checked with the built wheel and JupyterHub 6.2 locally, but have not yet run end to end on a server. Please report anything that breaks.
v0.4.0
Fixes found in a real 1 Hub + 2 worker test on AWS (Ubuntu 24.04 Arm, JupyterHub 6.2).
pip install --upgrade "jupyterhub-pilot[hub]==0.4.0"⚠️ Breaking
Logins over plain http:// now loop: the login cookie is finally Secure (the old cookie_options setting was silently ignored). Serve the Hub through Caddy over HTTPS. See the README's HTTPS with Caddy section, which also has a no-domain test setup.
What's new
- Test login without Google: set
JUPYTERPILOT_TEST_PASSWORDandJUPYTERPILOT_TEST_ADMIN_PASSWORD(32+ chars) in/etc/jupyterhub-pilot/hub.env. scripts/add_worker.sh <team> <ip>: registers a team's worker, loads it into SQLite and tests SSH.install_hub.shcan be re-run safely (keeps your teams) and writes the systemd service and a root-onlyhub.env. Start withsudo systemctl enable --now jupyterhub.- Amazon Linux 2023 install scripts (
scripts/install_*_amazon_linux.sh), not yet tested on real instances.
Fixes
- Metrics agent connects straight to
/hub/monitoring/ws. - A user with no team sees "ask an admin to add you to a team" instead of a 500 error.
- Docs: Caddy compression (
encode zstd gzip, measured 8× faster first load) and pick the region nearest your users.
Upgrading an existing install
- Workers installed before 0.4.0:
sudo sed -i 's#:8000/monitoring/ws#:8000/hub/monitoring/ws#' /etc/systemd/system/jupyterhub_pilot-metrics.service && sudo systemctl daemon-reload && sudo systemctl restart jupyterhub_pilot-metrics - Requires
jupyterhub>=5.3,<7(tested on 6.2).
v0.3.1
Packaging-only release: no code changes from v0.3.0.
- The PyPI page now shows the full README (install, start/stop, adding worker servers, configuration, troubleshooting).
- Author email set to the real address.
- README links work on PyPI as well as GitHub.
Upgrade: pip install --upgrade "jupyterhub-pilot[hub]" (or [worker], [ai]).
Full changes: #3
v0.3.0
Install: pip install --upgrade "jupyterhub-pilot[hub]" (or [worker], [ai]) · PyPI
⚠️ Breaking changes
- Metrics agents need a token. Set the same
JUPYTERPILOT_AGENT_TOKENon the Hub and every agent. The Hub refuses agents without it.install_hub.shgenerates one at/etc/jupyterhub-pilot/agent_token. - No automatic AI-package install.
env_setupis removed;install_worker.shinstalls Jupyter and the AI magics once per worker. RBACManager.assert_can_act_onis removed. JupyterHub's own scopes decide who may start or stop which server.
Security
- The monitoring dashboard and its live feed require a JupyterHub login; agent hostnames are escaped (fixes stored XSS).
- Users see only their own team's workers on the dashboard; admins see all.
- Secrets (Hub API token, Vault secrets) are passed to the worker over stdin, not the command line.
- Usernames are validated before reaching a remote shell; PID and log files moved from
/tmpto the user's home.
Fixes
- SSH work runs off the Hub's event loop, so a slow worker no longer freezes the Hub.
poll()no longer drops a running server on a temporary SSH or database error; a leftover server is ended on the next start.- JIT user creation works:
admin_ssh_useris now stored in SQLite (with migration), dotted names likefirst.lastare supported, and the multi-minute per-user pip install is gone. %fixuses the last real code cell; cell outputs are included in AI context.- The pip package now ships the dashboard page (
/hub/monitoringfailed on 0.2.4 pip installs).
Docs
- New README covering install, start/stop, adding users, adding and removing worker servers, configuration and troubleshooting.
- HTTPS setup with Caddy; fixed admin username (no
@domain) and the Hub systemd unit.