zoukankan      html  css  js  c++  java
  • ldap认证jupyter notebook

    虽然jupyter hub是支持ldap的,见ldapauthenticator

    但是登录成功后似乎要以登录用户名启动notebook,而登录用户在服务器上不存在,于是500了;

    在服务器上通过pam/nss进行ldap验证?别逗了,谁要那么干啊。

    于是转换思路,核心仿照这篇博客:docker+centos7+nginx1.2.0+ldap +jupyter实战

    1. 首先,编译一个带nginx-auth-ldap认证模块的nginx,做为notebook server的proxy,做进一个docker容器里,以后可以复用;

    1.1 下载nginx 1.14.0和nginx-aut-ldap模块,编译,没啥特别;

    ./configure  --add-module=../nginx-auth-ldap  && make && make install
    

    1.2 配置nginx,proxy_pass的主机名写成notebook;寻址问题交由docker-compose帮忙解决;

    websocket的这段配置比较关键,决定了是否能正常执行ipynb notebook文件;

           location ~* /(api/kernels/[^/]+/(channels|iopub|shell|stdin)|terminals/websocket)/? {
               proxy_pass http://notebook:8888;
               proxy_set_header Referer http://proxy:8000;
               # websocket support
               proxy_http_version    1.1;
               proxy_set_header Upgrade "websocket";
               proxy_set_header Connection "Upgrade";
          }
    

    1.3 nginx做进systemd,开机启动; 

    # cat /usr/lib/systemd/system/nginx.service 
    [Unit]
    Description=nginx
    After=network.target
      
    [Service]
    Type=forking
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    PrivateTmp=true
      
    [Install]
    WantedBy=multi-user.target
    

      

    接下来,notebook server在另一个docker容器里,于是需要把两个docker容器连在一起管理,用了一下docker-compose;

    2.1 安装docker-compose:

    pip install docker-compose
    pip install docker_pycreds # 解决 python2.7 ImportError: No module named urllib.parse
    

      

    2.2 写docker-compose.yml

    几个细节:

    • proxy links notebook,这样nginx配置文件中proxy_pass的地址可以直接使用notebook做主机名;
    • notebook expose 8888,把notebook的8888端口只暴露给proxy用,避免被绕过proxy;

    3. 配置jupyter notebook

    3.1 配置jupyter notebook

    c.NotebookApp.token = '' #把token置空,不在notebook这里做认证管理了
    c.NotebookApp.allow_root = True #允许docker内用root启动
    c.NotebookApp.allow_origin = '*' # 因为notebook和proxy在两个docker内,写上这条配置以允许CORS(Cross-Origin Resource Sharing, 跨源资源共享)

    3.2 把jupyter notebook放进systemd,允许开机启动

    # cat /lib/systemd/system/jupyter.service 
    [Unit]
    Description=Jupyter Notebook
    
    [Service]
    Type=simple
    ExecStart=/run_jupyter.sh
    
    [Install]
    WantedBy=multi-user.target

    # systemctl enable jupyter

      

    4 启动几个容器

    docker-compose up -d
    

      

    5 进入notebook以后,发现点quit按钮,不仅退出notebook了,而且会让jupyter notebook进程直接结束;

    稍微看了一下代码,发现有一个配置可以隐藏quit按钮,于是给jupyter加了一条配置:

    c.NotebookApp.quit_button = False
    

      

    这样多人登入同一个jupyte,然后一人一个notebook,应该不会互相打架吧。反正人少,打就打吧。

    jupyterhub spawner?等它发展发展再说,现在来看技术栈太深了些。

  • 相关阅读:
    iOS开发UI篇—核心动画(转场动画和组动画)
    iOS开发UI篇—核心动画(关键帧动画)
    iOS开发UI篇—核心动画(基础动画)
    iOS开发UI篇—核心动画简介
    iOS开发UI篇—使用picker View控件完成一个简单的选餐应用
    iOS开发UI篇—控制器的View的创建
    iOS开发UI篇—控制器的创建
    iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期
    java微信小程序参数二维码生成带背景图加字体(无限生成)
    EXCEL数据读取解析多个sheet
  • 原文地址:https://www.cnblogs.com/ZisZ/p/9134738.html
Copyright © 2011-2022 走看看