文章

The Littlest Jupyter Hub 搭建草稿

简要的记录一下Jupyter Hub的搭建流程。虽然感觉已经上线的Jupyter Hub在当前阶段不太实用——免费的Amazon EC2套餐太垃圾,性能好的价格又太贵了。

这篇文章的许多内容参照官方的搭建教程,并根据实践中发现的错误进行了修改和建议。作者水平有限,不做任何保证。

什么是Jupyter Hub

先来一个官方的定义,简而言之就是多用户线上的Jupyter Notebook使用环境。

Jupyter Hub Graph

JupyterHub is the best way to serve Jupyter notebook for multiple users. It can be used in a class of students, a corporate data science group or scientific research group. It is a multi-user Hub that spawns, manages, and proxies multiple instances of the single-user Jupyter notebook server.

本篇文章搭建的Jupyter Hub是运行在单个虚拟机上的The Little Jupyter Hub(TLJH),适用于小于100人的用户群。用户量更多的话,根据官方的建议,适用于Zero to JupyterHub with Kubernetes。Z2JH将会运行在容器中更方便扩容和调度。

虚拟机准备

实例选择

这里使用的虚拟机是Amazon EC2的服务。跟官方教程所说不一致的是,免费版无法完成TLJH的搭建,必须要收费版的实例(内存不小于2GB)才能完成TLJH的搭建。本文使用的是Amazon EC2 US East-2的t3.small(具有2个vCPU和2GB内存)实例进行的搭建。目前为止运行了5天左右,已经花费5美元了,遂决定停机。

至于硬盘的大小,建议选择不少于20GB的硬盘(免费硬盘空间有30GB)。

安全组(Security Group)配置

这里的安全组我觉得可以理解为用户组的配置,主要是链接的协议类型、开放的端口和允许进入的IP地址段的一个配置。这里实际上只需要配置SSH-22端口(默认)和添加一个HTTPS-443端口即可。我们在后文会通过SSH优先配置HTTPS,保证第一次进入TLJH就是通过HTTPS连接。

实例Review

这一阶段Amazon会让你下载、添加或选择已有的Key-Pair作为SSH连接的认证方式。若是下载生成的Key-Pair,建议将其添加到本机的SSH-agent中,方便后续的连接。

配置TLJH

登入虚拟机实例,进行TLJH的安装和配置,这一部分几乎与官方教程的Installing on your own server的部分一致。

安装TLJH

首先安装TLJH所需的相关软件和环境。

1
sudo apt install python3 python3-dev git curl

安装完所依赖的软件后,安装TLJH。

1
curl -L https://tljh.jupyter.org/bootstrap.py | sudo -E python3 - --admin <admin-user-name>

此处的<admin-user-name>替换为GitHub的用户名,因为后续本文会通过设置GitHub来进行认证和登陆TLJH。请务必设置正确,因为这是TJLH第一个admin账户的用户名。

设置HTTPS

由于我们在启动实例的时候阻止了HTTP的流量进入,所以需要先设置HTTPS。这里根据官方教程使用Let’s Encrypt的自动签名认证。

1
2
3
sudo tljh-config set https.enabled true
sudo tljh-config set https.letsencrypt.email you@example.com
sudo tljh-config add-item https.letsencrypt.domains yourhub.yourdomain.edu

设置完成可以通过sudo tljh-config show命令来确认是否正确配置。正确配置会出现如下信息。

1
2
3
4
5
6
https:
  enabled: true
  letsencrypt:
    email: you@example.com
    domains:
    - yourhub.yourdomain.edu

设置正确可以通过sudo tljh-config reload proxy重启proxy服务。

别忘了在DNS服务器配置相关的A记录!

设置GitHub认证(OAuth)

在GitHub的Settings -> Developer Settings -> OAuth Apps可以看到新建OAuth Apps。点击新建,将主页URL设置为域名地址,将Authorization callback URL设置为https://yourhub.yourdomain.edu/hub/oauth_callback即可。然后生成Client Secret并保存好。

连接到虚拟机实例,输入以下命令进行密钥配置。

1
2
3
4
sudo tljh-config set auth.GitHubOAuthenticator.client_id '<my-tljh-client-id>'
sudo tljh-config set auth.GitHubOAuthenticator.client_secret '<my-tljh-client-secret>'
sudo tljh-config set auth.GitHubOAuthenticator.oauth_callback_url 'http(s)://<my-tljh-ip-address>/hub/oauth_callback'
sudo tljh-config set auth.type oauthenticator.github.GitHubOAuthenticator

通过sudo tljh-config show检查无误后,再使用sudo tljh-config reload使配置生效。

至此,配置完成,输入域名即可通过GitHub登陆访问。

目前已知的一些问题

Kernel连接问题

GitHub认证需要挂上梯子,但是进入Notebook连接Kernel的时候必须关掉梯子,否则Kernel死活连接不上。

证书的设置问题

首次设置证书是没有问题的。但是终止实例并通过新的实例连接时,若使用相同的域名,始终无法从Let’s Encrypt获取到正式的证书。这应该是TLJH的问题。通过GitHub Issues的讨论,目前可以通过CerBot从外部配置证书解决问题。

本文由作者按照 CC BY 4.0 进行授权

热门标签