Jupyterhub安裝配置及心得

Jupyter簡介

Jupyter是一款基於python的web notebook服務,目前有大多python數據挖掘與機器學習愛好者使用這款服務,其特性其實與Ipytohn Notebook差很少,準確說Ipython Notebook是一款提供加強型交互的功能的shell,而Jupyter除了Ipython的功能,還加入了普通編輯器的通用功能,是一款帶代碼交互的動態文檔web編輯器。html

Jupyterhub簡介

因爲Jupyter只支持單用戶的使用場景,做爲一個可交互的web服務,只支持單用戶模式實在讓人難以理解。估計開發者也以爲這個問題太過雞肋,因而Jupyterhub因有而生。python

安裝Anaconda

JupyterHub是基於Python的,因此咱們須要安裝一下Python的相關環境。Anaconda是一個很是成熟的Python包管理工具,所以本文檔選用該工具進行基礎環境的安裝,首先就是安裝該工具。nginx

下載安裝

  • 下載
    • 這裏我使用清華的鏡像站點下載,速度很nice,50-60MB/s
      wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda2-2018.12-Linux-x86_64.sh
  • 安裝
    bash Anaconda2-2018.12-Linux-x86_64.sh

    根據提示安裝便可,安裝過程當中會詢問你是否將anaconda的路徑加入到環境變量.bashrc中,默認是no,因此若是在安裝的過程當中手太快,一鍵到底了的話,能夠經過手動添加的方式進行設置。git

將anaconda3加入環境變量

vim ~/.bashrcgithub

在bashrc文件的最後添加web

# added by Anaconda3 2018.12 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/opt/anaconda3/bin/conda' shell.bash hook 3> /dev/null)"
if [ $? -eq 0 ]; then
    \eval "$__conda_setup"
else
    if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/opt/anaconda3/etc/profile.d/conda.sh"
        CONDA_CHANGEPS1=false conda activate base
    else
        \export PATH="/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda init <<<

保存並退出
而後shell

source ~/.bashrc

檢測Anaconda是否安裝成功:npm

conda list

若是提示conda: command not found,請參考是否將Anaconda3加入環境變量,而且更新生效。vim

Jupyterhub安裝

  • 可使用清華的conda源加速
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge  
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/  
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/  
conda config --set show_channel_urls yes
conda install -c conda-forge jupyterhub
  • 若是感受conda安裝慢可使用pip安裝
    • pip安裝Jupyterhub:
$ pip3 install jupyterhub notebook -i https://pypi.douban.com/simple/

檢測安裝是否成功

jupyterhub -h
npm install -g configurable-http-proxy
configurable-http-proxy -h

生成配置文件

jupyterhub --generate-config -f /etc/jupyterhub/jupyterhub_config.py

修改配置

  • 如下是個人配置
c.JupyterHub.ip = '192.168.2.4'
c.JupyterHub.port = 12443
c.Spawner.ip = '127.0.0.1'
c.PAMAuthenticator.encoding = 'utf8'
c.Authenticator.whitelist = {'root','admin', 'tv', 'aiker'}  #默認不能使用root登陸,須要修改配置
c.LocalAuthenticator.create_system_users = True
c.Authenticator.admin_users = {'root', 'admin'}
c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator'
c.JupyterHub.statsd_prefix = 'jupyterhub'
#c.NotebookApp.notebook_dir = '/volume1/study/python/' #jupyter 自定義目錄使用
c.Spawner.notebook_dir = '/volume1/study/' #jupyterhub自定義目錄
c.JupyterHub.statsd_prefix = 'jupyterhub'
c.JupyterHub.ssl_cert = '/usr/syno/etc/certificate/_archive/xYa1nX/fullchain.pem'
c.JupyterHub.ssl_key = '/usr/syno/etc/certificate/_archive/xYa1nX/privkey.pem'
  • 若是須要使用root登陸,須要修改配置
    修改源碼 $jupyterhub_安裝目錄/site-packages/jupyterhub/spawner.py,找到以下代碼塊作修改:
def get_args(self):  
 """Return the arguments to be passed after self.cmd  

 Doesn't expect shell expansion to happen.  
 """  
 args = []  

 if self.ip:  
 args.append('--ip="%s"' % self.ip)  

 if self.port:  
 args.append('--port=%i' % self.port)  
 elif self.server.port:  
 self.log.warning("Setting port from user.server is deprecated as of JupyterHub 0.7.")  
 args.append('--port=%i' % self.server.port)  

 if self.notebook_dir:  
 notebook_dir = self.format_string(self.notebook_dir)  
 args.append('--notebook-dir="%s"' % notebook_dir)  
 if self.default_url:  
 default_url = self.format_string(self.default_url)  
 args.append('--NotebookApp.default_url="%s"' % default_url)  

 if self.debug:  
 args.append('--debug')  
 if self.disable_user_config:  
 args.append('--disable-user-config')  
 args.append('--allow-root') ##添加此行代碼,實現root訪問與登錄  
 args.extend(self.args)  
 return args

用戶認證

Jupyterhub支持多種認證方式:PAM和LDAP,默認使用的是PAM,即與系統用戶層使用同一認證管理,用戶名與密碼與系統配置的相同。安全

首先用py3安裝一個插件

$ pip3 install jupyterhub-dummyauthenticator -i https://pypi.douban.com/simple/

而後,若是遇到生成token問題,在配置文件中修改此配置:

c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator'

具體細節能夠參考這個問題

Kernel

Kernel能夠理解爲每一個notebook運行的後臺環境,Jupyterhub以及Jupyter雖然是基於python的application,但這並不意味着其notebook的功能只能爲python環境使用,事實上Jupyter的強大就體如今此處,其能夠支持任意環境的notebook,目前主流的數據科學環境基本都支持,R, SAS,SPARK等。

Anaconda Kernel安裝

conda環境安裝特別簡單,首先確保anaconda環境已經集成了Ipython,默認是已經集成了。其次在用戶級別下執行一下命令便可:

$ $your_anaconda_install_path/bin/ipython kernel install --user --name anaconda

執行完成後,便會在jupyterhub中看到名爲anaconda的kernel,仍是再重申下,這個命令須要在每一個用戶級別下local執行。new後即可使用anaconda環境中的全部python lib。

同時支持Python2和python3

Notebook的右上角點new 只看到 python 3 kernel,須要同時支持Python2和python3

查看目前的conda環境中的kernels

jupyter-kernelspec list 
Available kernels: 
python3 /root/.local/share/jupyter/kernels/python3

Jupyterhub安裝配置及心得

須要安裝python2,python2下安裝ipython,成功後執行

/opt/anaconda2/bin/ipython kernel install --user --name python2

查看該環境下的kernels

# jupyter-kernelspec list
Available kernels:
  python2    /root/.local/share/jupyter/kernels/python2
  python3    /root/.local/share/jupyter/kernels/python3

重啓jupyterhub便可生效,web效果以下:

Jupyterhub安裝配置及心得

R Kernel安裝

  • 根據須要決定是否安裝,不勉強
    安裝R Kernel以前須要安裝r-irkernel,這步咱們使用anaconda來安裝:

    $ conda install -c r r-irkernel

安裝完畢以後,運行R命令:

IRkernel::installspec()

執行完成後,即可在jupyterhub中看到名爲R的kernel。

啓動

jupyterhub --config=/etc/jupyterhub/jupyterhub_config.py --no-ssl
  • 後臺啓動:
nohup jupyterhub --config=/etc/jupyterhub/jupyterhub_config.py --no-ssl > /dev/null 2>&1 &

注意事項:

  • 若是已經有npm,須要注意npm版本>=6.0
  • 注意jupyterhub-console和python模塊prompt版本
  • 必定注意配置環境變量
  • 若是使用反向代理,注意可能引發ipykernel不能正確解析

    安裝主題

  • 更改主題只對my server生效,不對control面板起做用
    Jupyterhub安裝配置及心得Jupyterhub安裝配置及心得
pip install jupyterthemes
jt -l #列出主題
jt -t monokai -T -N -altp -fs 13 -nfs 13 -tfs 13 -ofs 13 #應用monokai主題

執行完命令後刷新web便可。

Jupyterhub安裝配置及心得

爲jupyterhub啓用代理

目的是爲了更方便和安全
這裏使用nginx代理

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    resolver 192.168.2.1 114.114.114.114;
    set $backend "https://jp.abcgogo.com:12443";

    server_name jp.abcgogo.com;

    ssl_certificate /usr/syno/etc/certificate/ReverseProxy/faea4d05-2458-4ffc-acfe-e4b48e5a04f9/fullchain.pem;

    ssl_certificate_key /usr/syno/etc/certificate/ReverseProxy/faea4d05-2458-4ffc-acfe-e4b48e5a04f9/privkey.pem;

    add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload" always;

    location / {
        proxy_set_header        Host                $http_host;
        proxy_set_header        X-Real-IP           $remote_addr;
        proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto   $scheme;
        proxy_intercept_errors  on;
    # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 120s;
        proxy_next_upstream error;

        proxy_pass $backend;

    }

}

jupyterhub使用了 websocket, 因此須要這樣配置

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

若是nginx代理沒有配置websocket,cell裏面的內容會不能解析,紅框裏面顯示等待。

Jupyterhub安裝配置及心得

能夠根據狀況參考配置:

nginx官網websocket說明

location / {
        proxy_pass http://jupyterhub IP:port;
        proxy_set_header Host $host;
        proxy_set_header X-Real-Scheme $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 120s;
        proxy_next_upstream error;
    }

檢查重啓nginx配置:

nginx -t && nginx -s reload

作好dns解析就可使用域名訪問了。
Jupyterhub安裝配置及心得

相關文章
相關標籤/搜索