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幫忙解決;
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 # 解決 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啟動
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