1. 程式人生 > >ldap認證jupyter notebook

ldap認證jupyter notebook

expose config PE 配置 oca nginx tails scrip com

雖然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