From b887e7036d1d7e484387f8d7fac4749f748de518 Mon Sep 17 00:00:00 2001 From: David Crompton Date: Tue, 16 Jan 2024 11:01:22 -0500 Subject: [PATCH] Add JupyterHub TODO: Add documentation about customizing and making requests for JupyterHub --- machines/kcnhub/servers.nix | 2 + machines/kcnhub/servers/jupyterhub.nix | 61 ++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 machines/kcnhub/servers/jupyterhub.nix diff --git a/machines/kcnhub/servers.nix b/machines/kcnhub/servers.nix index 2370d6c..656ba0c 100644 --- a/machines/kcnhub/servers.nix +++ b/machines/kcnhub/servers.nix @@ -8,5 +8,7 @@ ./servers/guac.nix # Overleaf (Collaborative LaTeX) ./servers/overleaf.nix + # Basic remote editting in jupyer notebooks + ./servers/jupyterhub.nix ]; } diff --git a/machines/kcnhub/servers/jupyterhub.nix b/machines/kcnhub/servers/jupyterhub.nix new file mode 100644 index 0000000..09935bf --- /dev/null +++ b/machines/kcnhub/servers/jupyterhub.nix @@ -0,0 +1,61 @@ +{ config, pkgs, lib, ... }: { + services.jupyterhub = { + enable = true; + port = 6501; + # https://github.com/jupyterhub/systemdspawner + # Configuration options defined ^ + extraConfig = '' + c.SystemdSpawner.mem_limit = '2G' + c.SystemdSpawner.cpu_limit = 1.0 + ''; + kernels = { + python = { + python3 = let + env = (pkgs.python3.withPackages (pythonPackages: with pythonPackages; [ + # Necessary for use as a kernel + ipykernel + + # Common Python Libraries + numpy + scipy + scikit-learn + pandas + matplotlib + seaborn + + # Neural Data Processing Libraries + mne-python + nibabel + neo + + # Neurosimulators + neuronpy + nest + brian2 + ])); + in { + displayName = "Python 3 for Computational Neuroscience"; + argv = [ + "${env.interpreter}" + "-m" + "ipykernel_launcher" + "-f" + "{connection_file}" + ]; + language = "python"; + logo32 = "${env}/${env.sitePackages}/ipykernel/resources/logo-32x32.png"; + logo64 = "${env}/${env.sitePackages}/ipykernel/resources/logo-64x64.png"; + }; + }; + }; + }; + + services.caddy.virtualHosts = { + "jupyter.ws.kcnhub.com" = { + extraConfig = '' + reverse_proxy 127.0.0.1:${toString config.services.jupyterhub.port} + ''; + }; + }; + +}