From 0a61fde0ff1bf546c17cd06eff959f438ec2c206 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Thu, 30 Jul 2020 19:18:36 +0200 Subject: [PATCH] services: add Jupyter Lab --- docker-compose.yml | 18 +++++++ jupyter/hooks/install-jupyter-debugger.sh | 6 +++ jupyter/hooks/install-jupyter-git.sh | 6 +++ .../.jupyter/jupyter_notebook_config.json | 5 ++ .../nginx/proxy-confs/lab.subdomain.conf | 52 +++++++++++++++++++ 5 files changed, 87 insertions(+) create mode 100755 jupyter/hooks/install-jupyter-debugger.sh create mode 100755 jupyter/hooks/install-jupyter-git.sh create mode 100644 jupyter/notebooks/.jupyter/jupyter_notebook_config.json create mode 100644 letsencrypt/nginx/proxy-confs/lab.subdomain.conf diff --git a/docker-compose.yml b/docker-compose.yml index 6186e73..fa2334d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -364,3 +364,21 @@ services: env_file: - ./recipes/recipes.env - ./recipes/recipes.env.secret + + jupyter: + image: jupyter/datascience-notebook:lab-2.1.5 + restart: unless-stopped + container_name: jupyter + volumes: + - ./jupyter/notebooks:/home/jovyan/ + - ./jupyter/hooks/:/usr/local/bin/start-notebook.d/ + environment: + - JUPYTER_ENABLE_LAB=yes + - NB_UID=1000 + - NB_GID=1000 + - CHOWN_HOME=yes + - GRANT_SUDO=yes + - RESTARTABLE=yes + expose: + - 8888 + user: root diff --git a/jupyter/hooks/install-jupyter-debugger.sh b/jupyter/hooks/install-jupyter-debugger.sh new file mode 100755 index 0000000..fb8a2bc --- /dev/null +++ b/jupyter/hooks/install-jupyter-debugger.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +set -e + +pip install --upgrade xeus-python +jupyter labextension install @jupyterlab/debugger diff --git a/jupyter/hooks/install-jupyter-git.sh b/jupyter/hooks/install-jupyter-git.sh new file mode 100755 index 0000000..cbdadd3 --- /dev/null +++ b/jupyter/hooks/install-jupyter-git.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +set -e + +pip install --upgrade jupyterlab-git +jupyter lab build diff --git a/jupyter/notebooks/.jupyter/jupyter_notebook_config.json b/jupyter/notebooks/.jupyter/jupyter_notebook_config.json new file mode 100644 index 0000000..0816744 --- /dev/null +++ b/jupyter/notebooks/.jupyter/jupyter_notebook_config.json @@ -0,0 +1,5 @@ +{ + "NotebookApp": { + "password": "sha1:1028b9608ef0:2c83acc24c76369e2c537f3c070b032f0d85311f" + } +} \ No newline at end of file diff --git a/letsencrypt/nginx/proxy-confs/lab.subdomain.conf b/letsencrypt/nginx/proxy-confs/lab.subdomain.conf new file mode 100644 index 0000000..4d23445 --- /dev/null +++ b/letsencrypt/nginx/proxy-confs/lab.subdomain.conf @@ -0,0 +1,52 @@ +# make sure that your dns has a cname set for lab and that your lab container is named jupyter + +server { + listen 443 ssl; + listen [::]:443 ssl; + + server_name lab.*; + + include /config/nginx/ssl.conf; + + client_max_body_size 0; + + # enable for ldap auth, fill in ldap details in ldap.conf + #include /config/nginx/ldap.conf; + + # enable for Authelia + include /config/nginx/authelia-server.conf; + + location / { + # enable the next two lines for http auth + #auth_basic "Restricted"; + #auth_basic_user_file /config/nginx/.htpasswd; + + # enable the next two lines for ldap auth + #auth_request /auth; + #error_page 401 =200 /ldaplogin; + + # enable for Authelia + include /config/nginx/authelia-location.conf; + + include /config/nginx/proxy.conf; + resolver 127.0.0.11 valid=30s; + set $upstream_app jupyter; + set $upstream_port 8888; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + } + + location ~* /(api/kernels/[^/]+/(channels|iopub|shell|stdin)|terminals/websocket)/? { + # enable for Authelia + include /config/nginx/authelia-location.conf; + + include /config/nginx/proxy.conf; + resolver 127.0.0.11 valid=30s; + set $upstream_app jupyter; + set $upstream_port 8888; + set $upstream_proto http; + proxy_set_header Upgrade "websocket"; + proxy_set_header Connection "Upgrade"; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + } +}