JupyterHub配置过程,路由以及代码基本逻辑
这篇博客主要描述我学习的以下⼏点:
1. 安装JupyterHub以及配置过程
2. JupyterHub基本配置和⼯作原理
3. 代码层⾯的运作处理
⼀. 安装以及运⾏JupyterHub
安装环境: 虚拟机Ubuntu20.4; ⾃带Python版本3.8.2
1. 先决条件
Linux/Unix操作系统
Python版本3.5以上
nodejs/npm
TLS证书和HTTPS通信密钥
域名
由于现在我处在学习研究阶段, 不关注部署, 对我来说只需要能够运⾏和⾃定义组件即可. 所以在我的虚拟机上没有TLS证书和域名也没有关系
ubuntu使用入门教程2. 安装过程
1.进⼊虚拟环境
我使⽤的Pycharm新建项⽬时候的⾃动创建的虚拟环境
然后在pycharm中使⽤terminal就会直接进⼊虚拟环境
2.安装wheel, jupyterhub, jupyterlab, ipywidgets, nodejs, npm 和 configurable-http-proxy
先安装wheel, jupyterhub, jupyterlab, ipywidgets
sudo /opt/jupyterhub/bin/python3 -m pip install wheel
sudo /opt/jupyterhub/bin/python3 -m pip install jupyterhub jupyterlab
sudo /opt/jupyterhub/bin/python3 -m pip install ipywidgets
这⾥的路径地址在我这⾥是
(jh_study_venv) xiexuezhen@xiexuezhen-vir:~/jupyterhub_study$ sudo jh_study_venv/bin/python3 -m pip install XXXX 继续安装nodejs, npm和configurable-http-proxy
sudo apt install nodejs npm
npm install -g configurable-http-proxy
安装configurable-http-proxy需要root选项, 可在前⾯加上sudo
3. 创建JupyterHub的配置
为JupyterHub配置创建⽂件夹, 然后进⼊⽂件夹所在⽬录
sudo mkdir -p jh_study_venv/etc/jupyterhub/
cd jh_study_venv/etc/jupyterhub/
然后⽣成默认配置⽂件
sudo ../../bin/jupyterhub --generate-config
默认情况下,您将需要编辑配置⽂件以创建JupyterLab接⼝。在jupyterhub_config.py⽂件中设置以下配置选项:
c.Spawner.default_url = '/lab'
需要注意的是, 我们创建的⽂件可能被设置成只读⽂件, 需要输⼊指令解锁:
sudo chown -R xiexuezhen ../jupyterhub/
4.设置Systemd服务
Systemd(负责管理在Ubuntu中启动时运⾏的所有服务和服务器)
由于需要使⽤Systemd将JupyterHub设置为系统服务运⾏, 所以会在虚拟环境的⽂件夹中创建⼀个服务⽂件, 然后将其链接到系统服务(jh_study_venv) xiexuezhen@xiexuezhen-vir:~/jupyterhub_study$ sudo mkdir -p jh_study_venv/etc/systemd
在该⽂件夹下创建⽂本⽂件jupyterhub.service
内容如下:
[Unit]
Description=JupyterHub
After=syslog.target network.target
[Service]
User=root
Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:home/xiexuezhen/jupyterhub_study/jh_study_venv/bin
"
ExecStart=/home/xiexuezhen/jupyterhub_study/jh_study_venv/bin
-f /home/xiexuezhen/jupyterhub_study/jh_study_venv/etc/jupyterhub/jupyterhub_config.py
[Install]
WantedBy=multi-user.target
将⽂件符号链接到systemd的⽬录中:
(jh_study_venv) xiexuezhen@xiexuezhen-vir:~/jupyterhub_study$ sudo ln -s /home/xiexuezhen/jupyterhub_study/jh_study_venv/etc/systemd/jupyterhub.se rvice /etc/systemd/system/jupyterhub.service
然后告诉systemd重新加载配置和启⽤服务
sudo systemctl dearmon-reload
sudo systemctl enable jupyterhub.service
5. 建⽴反向代理
通常不建议以运⾏在8000端⼝上的⽅式运⾏开放式Web服务-⽽是使⽤在标准HTTP / HTTPS端⼝上运⾏的反向代理。
使⽤Nginx, 带补充.
6. 运⾏JupyterHub
JupterHub
sudo Jupyterhub
⼆.JupyterHub基本使⽤
1. 基础配置(也可以使⽤命令⾏,但是最好通过⽂件配置)
1. 输⼊以下命令⾏, 就可以⽣成配置⽂件(jupyterhub_config.py)
jupyterhub --generate-config
2. 使⽤这个配置⽂件运⾏jupyterhub
jupyterhub -f /path/to/jupyterhub_config.py
⼤部分配置名称可以直接在⽂档中搜索
例如,配置管理员,搜索admin_user
可以看到配置项的名字是c.JupyterHub.admin_user, 然后在jupyterhub_config.py中配置即可
2.基本的⼯作原理
主要是由三个⼯作单位:Hub, 代理和 Notebook Server
原理介绍
Hub(Python/Tornado): 使⽤Spawner管理账号,⾝份验证并且协调每个Notebook服务
代理: Jupyter⾯向⽤户的部分, 使⽤动态代理来调整HTTP对Hub或者单独⽤户的Notebook服务发送的请求的路线
Notebook Server(Python/Tornado): 当⽤户登录系统的时候, 会为其分配⼀个专⽤的单⽤户的Jupyter notebook服务, 开启单独⽤户的notebook 服务的对象叫做Spawner
⼦系统交互的过程
Hub⽣成代理
代理默认将左右请求发送给Hub
Hub处理登录请求,并且⽣成单⽤户的Notebook服务
Hub为代理配置为将URL前缀转发给Notebook服务
从JupyterHub访问到⽤户登录的过程
登录数据传给实例化的Authenticator进⾏验证
如果登录信息有效, ⾝份验证其将返回⽤户名
为登录⽤户⽣成单⽤户Notebook服务的实例
当单⽤户Notebook服务启动的时候, 将通知代理将所有的"/user/[username]"转发到Notebook服务器
Cookie设置为’/hub/’, 其中包含加密的Token
浏览器被重定向到’/user/[username]’, 并且该请求由单⽤户Notebook服务来进⾏处理
3.JupyterHub代码层⾯的运⾏逻辑
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论