最輕量化的 JupyterHub:The Littlest JupyterHub
如何在 AWS 建置一個 TLJH

A multi-user version of the notebook designed for companies, classrooms and research labs.
TL; DR 摘要
我們在這篇文章中介紹如何在 Amazon Web Services(AWS) 上建置一個可供 0 至 100 位課堂學員使用的 Jupyter 伺服器:最輕量化的 JupyterHub,亦被稱為 The Littlest JupyterHub(TLJH) 。
什麼是 JupyterHub 與 TLJH?
JupyterHub 是 Jupyter 伺服器的多人版本,她將原本在個人電腦上運行的筆記本伺服器功能延伸給了一組使用者,讓這一組使用者可以使用伺服器所設定好的環境、計算能力與資料集等,只需要開啟瀏覽器並使用被授權的帳號登入即可,不需要在自己的個人電腦中進行環境安裝或維護;JupyterHub 的特點有:
- 客製化:JupyterHub 能支援常見的資料科學整合開發環境,包含最基本的 Jupyter Notebook 以及進階的 JupyterLab、RStudio 或 nteract 等
- 驗證:JupyterHub 能支援常見的使用者身份驗證,例如 OAuth、GitHub 等
- 延展性:JupyterHub 能支援現代容器技術進行部署,例如 Kubernetes,讓一組的使用者人數可以擴充至數百、數千人
The Littlest JupyterHub(TLJH) 是 JupyterHub 的最輕量化版本,她可以在單一伺服器上運行,適合人數在 0 至 100 人的中小型資料科學團隊、課堂與研究室使用。一般而言,在選擇是否要部署 TLJH 的時候可以問自己兩個問題:
- 是否要使用伺服器叢集?
- 是否要使用容器技術?
如果這兩個問題的答案是「否」,那麼 TLJH 就是我們的首選!
在 AWS 建置一個 TLJH
前往 Amazon Web Services(AWS) 並登入自己的帳戶(尚未建立帳戶的使用者可以前往註冊頁面),在管理主控台的服務選單中點擊 Compute 類別下的 EC2。

進入到 EC2 的儀表板之後,在下方選單點選 Launch Instance。

在步驟一,選擇 Ubuntu Server 18.04 LTS (HVM), SSD Volume Type — ami-XXXXXXXXXXXXXXXXX。

在步驟二,選擇 Free tier eligible 的 t2.micro 之後點選 Next: Configure Instance Details。

在步驟三,沿用預設值,之後點選 Next: Add Storage。

在步驟四,沿用預設值,之後點選 Next: Add Tags

在步驟五,為 TLJH 命名,之後點選 Next: Configure Security Group。

在步驟六,指派一個新的 Security Group 並為其命名,再新增 HTTP 與 HTTPS 兩條規則,之後點選 Review and Launch。

在步驟七,我們可以檢視前面六個步驟的設定是否正確,之後點選 Launch,這時會跳出一個對話框提示創建一個新的 key pair 並下載至電腦中。這個副檔名為 .pem 的 key pair 將可以在進階的疑難問題解決時作為 SSH 的連結憑證,之後點選 Launch Instances。

前往 EC2 的儀表板將可以看到我們有了一個 running instance,可以點選 Actions > Instance Settings > Get System Log 檢視進度。


再來,我們從終端機使用 ssh 指令搭配在步驟七下載的 key pair 連線至 running instance,請替換
chmod 400 <your_pem_name.pem>
ssh -i "<your_pem_name.pem>" ubuntu@<your_ec2_instance_public_dns>Windows 作業系統的使用者可以參考 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html?icmpid=docs_ec2_console 以 PuTTY 連線至 running instance。
最後我們以 curl 指令安裝 TLJH,請替換
curl https://raw.githubusercontent.com/jupyterhub/the-littlest-jupyterhub/master/bootstrap/bootstrap.py | sudo python3 - --admin <admin_user_name>耐心等待安裝完成之後,可以把 running instance 的 Public DNS(IPv4) 貼到瀏覽器的網址列,這將會帶領我們到 TLJH 的登入頁面。

使用在安裝 TLJH 時自訂的

大功告成,我們在 Amazon Web Services(AWS) 上建置了一個 The Littlest JupyterHub(TLJH)!

設定 HTTPS
設定 HTTPS 能夠讓使用者安全地傳輸帳號、密碼與資料,TLJH 支援 Let’s Encrypt,只要具備自己的網域名就能利用終端機指令自動配置 HTTPS;首先使用 ssh 指令搭配在步驟七下載的 key pair 連線至 running instance,請替換
ssh -i "<your_pem_name.pem>" ubuntu@<your_ec2_instance_public_dns>在終端機依序輸入並執行這三個指令,其中
sudo tljh-config set https.enabled true
sudo tljh-config set https.letsencrypt.email <[email protected]>
sudo tljh-config add-item https.letsencrypt.domains <yourhub.yourdomain.edu>以 sudo tljh-config show 指令檢視設定檔是否已經修改成功:
$ sudo tljh-config show
users:
admin:
- <admin-user-name>
https:
enabled: true
letsencrypt:
email: <[email protected]>
domains:
- <yourhub.yourdomain.edu>如果是從既有的網域中新增一個子網域來做測試,要記得前往網域名稱供應商做好設定,以我的例子來說,就要新增一筆 A 記錄對應 TLJH 的 IPv4 Public IP。
A tljh <your_ec2_public_ip>最後則是在終端機以 sudo tljh-config reload proxy 指令重新讀取修改後的設定檔。
$ sudo tljh-config reload proxy
active
Proxy reload with new configuration complete耐心等待 proxy 與 Let’s Encrypt 溝通之後,我們就可以在瀏覽器的網址列以 https://yourhub.yourdomain.edu 來到 TLJH 的登入頁面。

小結
我們在這篇文章中介紹如何在 Amazon Web Services(AWS) 上建置一個可供 0 至 100 位課堂學員使用的最輕量化 JupyterHub(The Littlest JupyterHub, TLJH),內容包含建置步驟與設定 HTTPS。
