avatarYao-Jen Kuo

Free AI web copilot to create summaries, insights and extended knowledge, download it at here

3689

Abstract

gcaption></figure><p id="1866">在步驟七,我們可以檢視前面六個步驟的設定是否正確,之後點選 Launch,這時會跳出一個對話框提示創建一個新的 key pair 並下載至電腦中。這個副檔名為 .pem 的 key pair 將可以在進階的疑難問題解決時作為 SSH 的連結憑證,之後點選 Launch Instances。</p><figure id="3d7a"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*G3DNtVFOFGAnx_yN7_RZpg.png"><figcaption>創建一個新的 key pair 並下載至電腦中</figcaption></figure><p id="f9a7">前往 EC2 的儀表板將可以看到我們有了一個 running instance,可以點選 Actions > Instance Settings > Get System Log 檢視進度。</p><figure id="3aa6"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*9Evp3Hsu59nQyD7ieNUycQ.png"><figcaption>檢視進度</figcaption></figure><figure id="5f9f"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*hlrL0CWgnDCFEefxj9IN1g.png"><figcaption>檢視進度</figcaption></figure><p id="be2d">再來,我們從終端機使用 <code>ssh</code> 指令搭配在步驟七下載的 key pair 連線至 running instance,請替換 <your_pem_name.pem> 為自己的 key pair 檔名、<your_ec2_instance_public_dns> 則是 running instance 的 Public DNS(IPv4)。</your_ec2_instance_public_dns></your_pem_name.pem></p><div id="3d9b"><pre>chmod 400 <span class="hljs-tag"><<span class="hljs-name">your_pem_name.pem</span>></span> ssh -i "<span class="hljs-tag"><<span class="hljs-name">your_pem_name.pem</span>></span>" ubuntu@<span class="hljs-tag"><<span class="hljs-name">your_ec2_instance_public_dns</span>></span></pre></div><p id="fa2b">Windows 作業系統的使用者可以參考 <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html?icmpid=docs_ec2_console">https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html?icmpid=docs_ec2_console</a> 以 PuTTY 連線至 running instance。</p><p id="f840">最後我們以 <code>curl</code> 指令安裝 TLJH,請替換 <admin_user_name> 為 TLJH 的管理員帳號,亦即第一個登入 TLJH 的使用者名稱(密碼則在登入的同時完成設定。)</admin_user_name></p><div id="d82e"><pre>curl https://raw.githubusercontent.<span class="hljs-keyword">com</span>/jupyterhub/the-littlest-jupyterhub/master/bootstrap/bootstrap.<span class="hljs-keyword">py</span> | sudo <span class="hljs-keyword">python3</span> - --admin <span class="hljs-symbol"><admin_user_name></span></pre></div><p id="1d52">耐心等待安裝完成之後,可以把 running instance 的 Public DNS(IPv4) 貼到瀏覽器的網址列,這將會帶領我們到 TLJH 的登入頁面。</p><figure id="80a8"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*YUbjRiRAI_uRWn26lKSSFQ.png"><figcaption>TLJH 的登入頁面</figcaption></figure><p id="9084">使用在安裝 TLJH 時自訂的 <admin_user_name> 作為 Username,並在此時自訂密碼 Password 進行 TLJH 的第一次登入。此時可以注意到登入頁面有一個警告訊息,TLJH 提示下一步應該要進行 HTTPS 設定,我們將會在下個小節進行,如果您也想要跟著操作,要先購買一個網域名稱或在既有的網域中新增一個子網域。</admin_user_name></p><figure id="e7d9"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*IeQnUWURuzhCSzVLSAdkSg.png"><figcaption>自訂密碼 Password 進行 TLJH 的第一次登入</figcaption></figure><p id="013e">大功告成,我們在 Amazon Web Services(AWS) 上建置了一個 The Littlest JupyterHub(TLJH)!</p><figure id="0568"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*a9k4ZXKo867U0l2OFY9jqw.png"><figcaption>大功告成</figcaption></figure><h2 id="036c">設定 HTTPS</h2><p id="acf2">設定 HTTPS 能夠讓使用者安全地傳輸帳號、密碼與資料,TLJH 支援 <a href="https://letsencrypt.org/">Let’s Encrypt</a>,只要具備自己的網域名就能利用終端機指令自動配置 HTTPS;首先使用 <code>ssh</code> 指令搭配在步驟七下載的 key pair 連線至 running instance,請替換 <your_pem_name.pem> 為自己的 key pair 檔名、<your_ec2_instance_public_dns> 則是 running instance 的 Public DNS(IPv4)。</your_ec2_instance_public_dns></your_pem_name.pem></p><div id="e6ab"><pre>ssh -i <span class="hljs-string">"<your_pem_name.pem>"</span> <span class="hljs-symbol">ubuntu@<span class="hljs-keyword"><your_ec2_instance_public_dns></span></span></pre></div><p id="2c95">在終端機依序輸入並執行這三個指令,其中 [email protected] 是 TLJH 管理員的信箱、<yourhub.yourdomain.edu> 則是自己購買的網域或子網域位址:</yourhub.yourdomain.edu>/[email protected]</p><di

Options

v id="4b37"><pre>sudo tljh-config set https.enabled true sudo tljh-config set https.letsencrypt.email <[email protected]> sudo tljh-config<span class="hljs-built_in"> add-item </span>https.letsencrypt.domains <yourhub.yourdomain.edu></pre></div><p id="0e63"><code>sudo tljh-config show</code> 指令檢視設定檔是否已經修改成功:</p><div id="7ba5"><pre><span class="hljs-attribute"> sudo tljh-config show users</span><span class="hljs-punctuation">:</span> <span class="hljs-attribute">admin</span><span class="hljs-punctuation">:</span> <span class="hljs-bullet">-</span> <span class="hljs-string">&lt;admin-user-name&gt;</span> <span class="hljs-attribute">https</span><span class="hljs-punctuation">:</span> <span class="hljs-attribute">enabled</span><span class="hljs-punctuation">:</span> <span class="hljs-string">true</span> <span class="hljs-attribute">letsencrypt</span><span class="hljs-punctuation">:</span> <span class="hljs-attribute">email</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&lt;[email protected]&gt;</span> <span class="hljs-attribute">domains</span><span class="hljs-punctuation">:</span> <span class="hljs-bullet">-</span> <span class="hljs-string">&lt;yourhub.yourdomain.edu&gt;</span></pre></div><p id="c17e">如果是從既有的網域中新增一個子網域來做測試,要記得前往網域名稱供應商做好設定,以我的例子來說,就要新增一筆 A 記錄對應 TLJH 的 IPv4 Public IP。</p><div id="d8ca"><pre>A tljh <span class="hljs-tag">&lt;<span class="hljs-name">your_ec2_public_ip</span>&gt;</span></pre></div><p id="5fff">最後則是在終端機以 <code>sudo tljh-config reload proxy</code> 指令重新讀取修改後的設定檔。</p><div id="97ed"><pre> sudo tljh-config reload proxy active <span class="hljs-built_in">Proxy</span> reload <span class="hljs-keyword">with</span> <span class="hljs-keyword">new</span> configuration complete</pre></div><p id="d1e0">耐心等待 proxy 與 <a href="https://letsencrypt.org/">Let’s Encrypt</a> 溝通之後,我們就可以在瀏覽器的網址列以 <a href="https://yourhub.yourdomain.edu">https://yourhub.yourdomain.edu</a> 來到 TLJH 的登入頁面。</p><figure id="0220"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*Lh_ZJG0t5yQ47zQmNiwJ-A.png"><figcaption><a href="https://yourhub.yourdomain.edu">https://yourhub.yourdomain.edu</a> 來到 TLJH 的登入頁面</figcaption></figure><h2 id="8b91">小結</h2><p id="2edc">我們在這篇文章中介紹如何在 Amazon Web Services(AWS) 上建置一個可供 0 至 100 位課堂學員使用的最輕量化 JupyterHub(The Littlest JupyterHub, TLJH),內容包含建置步驟與設定 HTTPS。</p><h2 id="262d">延伸閱讀</h2><div id="a040" class="link-block"> <a href="https://jupyter.org/hub"> <div> <div> <h2>Project Jupyter</h2> <div><h3>JupyterHub brings the power of notebooks to groups of users. It gives users access to computational environments and…</h3></div> <div><p>jupyter.org</p></div> </div> <div> <div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/0*hfxRfNWZ1FPRq9d3)"></div> </div> </div> </a> </div><div id="e592" class="link-block"> <a href="http://tljh.jupyter.org/en/latest/index.html#"> <div> <div> <h2>The Littlest JupyterHub - The Littlest JupyterHub v0.1 documentation</h2> <div><h3>A simple JupyterHub distribution for a small (0-100) number of users on a single server. We recommend reading When to…</h3></div> <div><p>tljh.jupyter.org</p></div> </div> <div> <div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/)"></div> </div> </div> </a> </div></article></body>

最輕量化的 JupyterHub:The Littlest JupyterHub

如何在 AWS 建置一個 TLJH

Project Jupyter | JupyterHub

A multi-user version of the notebook designed for companies, classrooms and research labs.

Project Jupyter | JupyterHub

TL; DR 摘要

我們在這篇文章中介紹如何在 Amazon Web Services(AWS) 上建置一個可供 0 至 100 位課堂學員使用的 Jupyter 伺服器:最輕量化的 JupyterHub,亦被稱為 The Littlest JupyterHub(TLJH) 。

什麼是 JupyterHub 與 TLJH?

JupyterHub 是 Jupyter 伺服器的多人版本,她將原本在個人電腦上運行的筆記本伺服器功能延伸給了一組使用者,讓這一組使用者可以使用伺服器所設定好的環境、計算能力與資料集等,只需要開啟瀏覽器並使用被授權的帳號登入即可,不需要在自己的個人電腦中進行環境安裝或維護;JupyterHub 的特點有:

  • 客製化:JupyterHub 能支援常見的資料科學整合開發環境,包含最基本的 Jupyter Notebook 以及進階的 JupyterLabRStudionteract
  • 驗證:JupyterHub 能支援常見的使用者身份驗證,例如 OAuth、GitHub 等
  • 延展性:JupyterHub 能支援現代容器技術進行部署,例如 Kubernetes,讓一組的使用者人數可以擴充至數百、數千人

The Littlest JupyterHub(TLJH) 是 JupyterHub 的最輕量化版本,她可以在單一伺服器上運行,適合人數在 0 至 100 人的中小型資料科學團隊、課堂與研究室使用。一般而言,在選擇是否要部署 TLJH 的時候可以問自己兩個問題:

  1. 是否要使用伺服器叢集?
  2. 是否要使用容器技術?

如果這兩個問題的答案是「否」,那麼 TLJH 就是我們的首選!

在 AWS 建置一個 TLJH

前往 Amazon Web Services(AWS) 並登入自己的帳戶(尚未建立帳戶的使用者可以前往註冊頁面),在管理主控台的服務選單中點擊 Compute 類別下的 EC2。

在管理主控台的服務選單中點擊 Compute 類別下的 EC2

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

在下方選單點選 Launch Instance

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

選擇 Ubuntu Server 18.04 LTS (HVM), SSD Volume Type

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

選擇 Free tier eligible 的 t2.micro 之後點選 Next: Configure Instance Details

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

沿用預設值

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

沿用預設值

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

為 TLJH 命名

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

指派一個新的 Security Group 並為其命名,再新增 HTTP 與 HTTPS 兩條規則

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

創建一個新的 key pair 並下載至電腦中

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

檢視進度
檢視進度

再來,我們從終端機使用 ssh 指令搭配在步驟七下載的 key pair 連線至 running instance,請替換 為自己的 key pair 檔名、 則是 running instance 的 Public DNS(IPv4)。

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,請替換 為 TLJH 的管理員帳號,亦即第一個登入 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 的登入頁面

使用在安裝 TLJH 時自訂的 作為 Username,並在此時自訂密碼 Password 進行 TLJH 的第一次登入。此時可以注意到登入頁面有一個警告訊息,TLJH 提示下一步應該要進行 HTTPS 設定,我們將會在下個小節進行,如果您也想要跟著操作,要先購買一個網域名稱或在既有的網域中新增一個子網域。

自訂密碼 Password 進行 TLJH 的第一次登入

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

大功告成

設定 HTTPS

設定 HTTPS 能夠讓使用者安全地傳輸帳號、密碼與資料,TLJH 支援 Let’s Encrypt,只要具備自己的網域名就能利用終端機指令自動配置 HTTPS;首先使用 ssh 指令搭配在步驟七下載的 key pair 連線至 running instance,請替換 為自己的 key pair 檔名、 則是 running instance 的 Public DNS(IPv4)。

ssh -i "<your_pem_name.pem>" ubuntu@<your_ec2_instance_public_dns>

在終端機依序輸入並執行這三個指令,其中 是 TLJH 管理員的信箱、 則是自己購買的網域或子網域位址:

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 的登入頁面。

https://yourhub.yourdomain.edu 來到 TLJH 的登入頁面

小結

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

延伸閱讀

Jupyterhub
Amazon Web Services
Recommended from ReadMedium