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?等它发展发展再说,现在来看技术栈太深了些。
ldap认证jupyter notebook的更多相关文章
- Python,Jupyter Notebook,IPython快速安装教程
0.安装环境 Windows10,Python3.5.1,IPython,jupyter notebook,and other functionality 官方安装文档Linux版3.x 官方安装文档 ...
- [转]Linux中python3.6+ipython+Jupyter Notebook环境
python3.6安装 下载python安装包,这里下载的最新的3.6.1版本 https://www.python.org/ftp/python/3.6.1/ 将安装包上传到服务器并解压 tar z ...
- python之jupyter notebook
jupyter是一种交互式计算和开发环境的笔记,ipython命令行比原生的python命令行更加友好和高效,还可以运行web版的界面,支持多语言,输出图形.音频.视频等功能. 安装 pip inst ...
- Centos7安装 Anaconda + jupyter notebook
一.安装Anaconda 1 下载Anaconda安装脚本 为了避免漫长的等待,镜像源选择国内的清华镜像源,镜像源地址:https://mirrors.tuna.tsinghua.edu.cn/ana ...
- 远程访问jupyter notebook
远程访问Jupyter Notebook Jupyter Notebook很好用,但是直接远程在服务器上用体验当然不如本地计算机好,那么如何远程访问呢? 首先需要在服务器上安装好ipython, ju ...
- Jupyter Notebook 27绝技——27 Jupyter Notebook tips, tricks and shortcuts
转载自:https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/ Jupyter notebook, formerly ...
- Jupyter notebook 配置目录
默认打开Jupyter notebook,工作目录是C:\Users\Username,这里面有很多其它与Jupyter notebook无关的文件,也很有用,不能看着烦就删掉,所以需要修改Jupyt ...
- No.2 CAS之SPNEGO+LDAP认证配置
1.概述 本文先配置了SPNEGO认证,就是如果用户操作系统如果登陆了公司的Windows域,用户浏览器访问应用服务即可免登录. 然后如果不在域里的员工,用LDAP认证方式,输账号密码登陆. 参考文档 ...
- 如何用Jupyter Notebook打开Spark
电脑已经装了anaconda python,然后下载了spark2.1.0.因为版本太新,所以网上和书上的一些内容已经不再适用.比如关于如何使用IPython和Jupyter,教程给出的方法是用如下语 ...
随机推荐
- chrome 安装setupvpn 解决chorme未能成功加载扩展程序的问题
一: vpn文件 https://pan.baidu.com/s/1wZV2HAC3GHlh1bjlvbilRg 提取码: gz72; 二 : 安装步骤 ------请看完以下步骤,不要直接拖 ...
- Git飞行规则
原文链接 Git飞行规则(Flight Rules)
- python语法_字符编码
二进制: ascll:只能存英文和拉听字符,一个字符占一个字节,8位 gb2312:只能存6700多个中文,1980年 gbk1.0:能存2万多字符,1995年 gbk18030:2000 27000 ...
- ubuntu16.04安装mrpt
源码地址 https://github.com/MRPT/mrpt 安装教程 https://github.com/MRPT/mrpt/blob/master/README.md#32-build-f ...
- Fiddler抓包请求前设置断点
1. 开启抓包 file--->capture traffic2. 在页面底部黑框输入bpu http://www.runoob.com/?s=mysql3. 在浏览器URL输入http://w ...
- [Day16]常用API(正则表达式、Date类、DateFormat类、Calendar类)
1.正则表达式(Regular Expression,regex)-是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串 1.1匹配规则: (1)字符:x -代表的 ...
- python基础4 input()函数
input()函数 赋值输出: name=input('请求输入你喜欢的电影名:')print(name+'是我最喜欢的电影!') 输入:大话西游 输出:大话西游是我最喜欢的电影! print('那么 ...
- esp32驱动SSD1306的oled显示汉字(micropython)
1.完整源码: 主函数oled.py from ssd1306 import SSD1306_SPI from ssd1306 import SSD1306 import font import ma ...
- 流程控制:顺序结构: 代码默认从上到下依次执行 分支结构: 细分在分为如下 循环结构: while .. for ..
# ### 流程控制: ''' 流程: 代码执行的过程 流程控制: 对代码执行的过程进行管控 顺序结构: 代码默认从上到下依次执行 分支结构: 细分在分为如下 循环结构: while .. for . ...
- python基础之 time,datetime,collections
1.time模块 python中的time和datetime模块是时间方面的模块 time模块中时间表现的格式主要有三种: 1.timestamp:时间戳,时间戳表示的是从1970年1月1日00:00 ...