WS-KCNHUB/machines/kcnhub/servers/jupyterhub.nix

218 lines
6.0 KiB
Nix
Raw Normal View History

{ config, pkgs, lib, ... }: let
aiomcache = pkgs.python3.pkgs.buildPythonPackage rec {
pname = "aio-memcache";
version = "0.8.1";
src = pkgs.fetchFromGitHub {
owner = "aio-libs";
repo = "aiomcache";
rev = "v${version}";
hash = "sha256-oRMN1seEjFSsq4wjkIXHM7Osq8y/5WFExGCEr6eM9vc=";
};
propagatedBuildInputs = with pkgs.python3.pkgs; [
python-memcached
];
# Networking required
doCheck = false;
};
aiohttp-session = pkgs.python3.pkgs.buildPythonPackage rec {
pname = "aiohttp-session";
version = "2.12.0";
src = pkgs.fetchFromGitHub {
owner = "aio-libs";
repo = "aiohttp-session";
rev = "v${version}";
hash = "sha256-7MNah4OIQnoxLoZkLOdeu5uCwSyPMhc6Wsht8dFconc=";
};
propagatedBuildInputs = with pkgs.python3.pkgs; [
aiohttp
aiomcache
cryptography
multidict
pynacl
redis
yarl
];
# Checks require networking
doCheck = false;
};
matlab-proxy = pkgs.python3.pkgs.buildPythonPackage rec {
pname = "matlab_proxy";
version = "0.12.1";
format = "wheel";
src = pkgs.python3.pkgs.fetchPypi {
inherit pname version format;
dist = "py3";
python = "py3";
hash = "sha256-TDZUJEXJYF5Vh2BG5o13H3wdh/WdVdoESXqL89ckc6I=";
};
propagatedBuildInputs = with pkgs.python3.pkgs; [
aiohttp
aiohttp-session
psutil
# For Xvfb, for plots and graphics
pkgs.xorg.xorgserver
];
};
simpervisor = pkgs.python3.pkgs.buildPythonPackage rec {
pname = "simpervisor";
version = "1.0.0";
format = "pyproject";
src = pkgs.fetchFromGitHub {
owner = "jupyterhub";
repo = "simpervisor";
rev = "v${version}";
hash = "sha256-73vkiQtOT0M9Vww1nYZ76JR2koWt/NPIav46k1fHOzc=";
};
nativeBuildInputs = with pkgs.python3.pkgs; [
hatchling
];
};
jupyter-server-proxy = pkgs.python3.pkgs.buildPythonPackage rec {
pname = "jupyter_server_proxy";
version = "4.1.0";
format = "pyproject";
src = pkgs.python3.pkgs.fetchPypi {
inherit pname version;
hash = "sha256-LPrDtCMv5xROjmApa0+GFwi08TspJgos8ol2v45hf3A=";
};
nativeBuildInputs = with pkgs.python3.pkgs; [
hatchling
hatch-jupyter-builder
hatch-nodejs-version
jupyterlab
];
propagatedBuildInputs = with pkgs.python3.pkgs; [
notebook
simpervisor
aiohttp
];
# tests require network
doCheck = false;
};
jupyter-matlab-proxy = pkgs.python3.pkgs.buildPythonPackage rec {
pname = "jupyter_matlab_proxy";
version = "0.11.0";
format = "wheel";
src = pkgs.python3.pkgs.fetchPypi {
inherit pname version format;
python = "py3";
dist = "py3";
hash = "sha256-KzQgs1zXGPjONCnLvCNQkQBkkkn9J29YFi8BHbh+D1I=";
};
propagatedBuildInputs = with pkgs.python3.pkgs; [
jupyter-server-proxy
simpervisor
matlab-proxy
psutil
requests
ipykernel
];
};
in {
services.jupyterhub = {
enable = true;
port = 6501;
# https://github.com/jupyterhub/systemdspawner
# Configuration options defined ^
# mem_limit must be higher to allow for MATLAB
extraConfig = ''
2024-07-10 10:29:40 -04:00
c.SystemdSpawner.mem_limit = '32G'
c.SystemdSpawner.cpu_limit = 2.0
c.SystemdSpawner.isolate_devices = False
c.SystemdSpawner.extra_paths = [
'${pkgs.buildEnv {
name = "jupyterhub-system-spawner-env";
paths = with pkgs; [
gcc
# For MATLAB Kernel
matlab
# For matlab-proxy-app
(pkgs.python3.withPackages (p: with p; [
# For pkg_resources
setuptools
matlab-proxy
jupyter-matlab-proxy
]))
];
}}/bin']
c.SystemdSpawner.environment["MATLAB_INSTALL_DIR"] = "${config.environment.sessionVariables.MATLAB_INSTALL_DIR}"
c.SystemdSpawner.environment["LM_LICENSE_FILE"] = "${config.environment.sessionVariables.LM_LICENSE_FILE}"
c.SystemdSpawner.environment["MLM_LICENSE_FILE"] = "${config.environment.sessionVariables.MLM_LICENSE_FILE}"
# c.SystemdSpawner.environment["MWI_JUPYTER_LOG_LEVEL"] = "DEBUG"
'';
2024-01-17 17:20:04 -05:00
# Extra Paths used to add gcc et al for packages like Brian2
# https://github.com/jupyterhub/systemdspawner#extra_paths
jupyterlabEnv = pkgs.python3.withPackages (p: with p; [
jupyterhub
jupyterlab
# Extensions:
2024-07-10 10:29:40 -04:00
# jupyter-collaboration
jupyter-server-mathjax
jupyter-console
jupyterlab-lsp
python-lsp-server
# MATLAB Proxy Needs to be here in order to modify and add the "launch matlab" etc.
jupyter-matlab-proxy # <-- This in effect adds the kernel
]);
kernels = {
python3 = let
env = (pkgs.python3.withPackages (pythonPackages: with pythonPackages;
(config.pythonPackages pythonPackages) ++ [
# Necessary for use as a kernel
ipykernel
ipdb
# Interactive widgets
ipywidgets
# Show images/media
mediapy
# Progress bars etc. for in Jupyter/IPython
halo
# Tables displayed in Jupyter: like Pandas Dataframes
ipytablewidgets
])).override (args: { ignoreCollisions = true; });
# Odd collision between tensorboard of torch & tensorflow
# need to resolve later
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";
};
};
};
2024-01-17 17:20:04 -05:00
services.caddy.virtualHosts = {
"jupyter.ws.kcnhub.com" = {
extraConfig = ''
reverse_proxy 127.0.0.1:${toString config.services.jupyterhub.port}
'';
};
};
}