前言
如果在服務器上安裝一個jupyter,那么就可以隨時隨地使用jupyter,很方便。
本文主要記錄centos7上jupyter的安裝方法,設置密碼的方法,添加守護進程的方法,順便給它設置個域名。
安裝jupyter
參考《Jupyter notebook》或者官網文檔,完成jupyter的安裝。
1、升級pip
pip install --upgrade pip
2、安裝jupyter
pip install jupyter
如果安裝報錯:
_scandir.c:14:20: fatal error: Python.h: No such file or directory
#include <Python.h>
^
compilation terminated.
error: command 'gcc' failed with exit status 1
那么需要先安裝python-devel
yum install python-devel
如果用不成用下這條命令
yum install python36-devel
yum -y groupinstall "Development Tools"
3、啟動
jupyter notebook
[root@localhost home]# jupyter notebook
[I 18:29:32.677 NotebookApp] 把notebook服務器的cookie密碼寫入 /root/.local/share/jupyter/runtime/notebook_cookie_secret
[C 18:29:32.907 NotebookApp] 不建議以root身份運行。請使用 --allow-root 繞過。
查看密碼:
vi /root/.local/share/jupyter/runtime/notebook_cookie_secret
iN8JN0mr1jffz+uoxzqoCPem+ADUlbZ2esvXovHEksg=
如果報錯:
socket.error: [Errno 99] Cannot assign requested address
那么在啟動時加上參數:
jupyter notebook --ip 0.0.0.0 --allow-root
4、開放端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload
5、測試訪問
訪問地址:http://ip:8888
設置密碼
在安裝完成jupyter后,我們看到,登錄頁面給出了三種登錄方式。
方式一:復制啟動時的token,粘貼到頁面中,直接登錄。
方式二:參照the documentation on how to enable a password進行配置。
方式三:復制啟動時的token,粘貼到頁面中,同時輸入新密碼,修改密碼並登錄。
這里,我們選擇方式二,首先關閉jupyter,然后具體配置步驟如下:
1、生成jupyter配置文件
jupyter notebook --generate-config
該命令會生成文件/root/.jupyter/jupyter_notebook_config.py
2、設置密碼
jupyter notebook password
提示兩次輸入密碼,然后密碼被hash化之后保存到jupyter_notebook_config.json中。
3、測試訪問
再次啟動jupyter,使用密碼訪問成功。
jupyter notebook --ip 0.0.0.0 --allow-root
4、禁止啟動瀏覽器
[root@localhost home]# jupyter notebook --ip 0.0.0.0 --allow-root
[I 18:42:30.298 NotebookApp] notebooks 運行所在的本地路徑: /home
[I 18:42:30.298 NotebookApp] Jupyter Notebook 6.4.10 is running at:
[I 18:42:30.298 NotebookApp] http://localhost.localdomain:8888/
[I 18:42:30.299 NotebookApp] 使用 Control-C 停止此服務器並關閉所有內核(連續操作兩次便可跳過確認界面)。
[W 18:42:30.304 NotebookApp] 沒有找到網頁瀏覽器: could not locate runnable browser。
此時,啟動jupyter時會默認啟動本地瀏覽器,這個需要關閉。
vim /root/.jupyter/jupyter_notebook_config.py,修改一行:
c.NotebookApp.open_browser = False
5、指定根目錄
在哪里執行jupyter notebook,哪里就是根目錄,這里,我們也可以指定根目錄。
(1)創建根目錄
mkdir /opt/notebook
(2)vim /root/.jupyter/jupyter_notebook_config.py,修改一行:
c.NotebookApp.notebook_dir = u'/opt/notebook'
守護進程
參考《CentOS安裝配置Supervisor》,安裝配置好supervisor。
1、新建配置文件jupyter.conf
vim /etc/supervisor/jupyter.conf
寫入內容如下:
[program:jupyter]
command=/usr/bin/jupyter notebook --ip 0.0.0.0 --allow-root
user=root
autostart=true
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
2、重啟supervisor
systemctl restart supervisord
設置域名
假設nginx的安裝目錄為/usr/local/nginx/。
1、創建vhost目錄
mkdir /usr/local/nginx/conf/vhost
2、修改nginx.conf,添加子配置目錄
include /usr/local/nginx/conf/vhost/*.conf;
3、在vhost目錄中新建jupyter.voidking.com.conf文件,內容為:
server {
listen 80;
server_name jupyter.voidking.com;
charset utf-8;
location ~* /(api/kernels/[^/]+/(channels|iopub|shell|stdin)|terminals/websocket)/? {
proxy_pass http://127.0.0.1:8888;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
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";
}
}
4、重啟nginx
/usr/local/nginx/sbin/nginx -s reload
5、本機測試
(1)修改hosts文件,添加
127.0.0.1 jupyter.notebook.com
然后用curl命令測試:
curl -L jupyter.notebook.com
6、設置域名解析
在dnspod上,設置A記錄,主機記錄填入jupyter,記錄值填入服務器IP,稍等幾分鍾。理論上,此時即可使用域名訪問自己的jupyter。
然而,遇到了坑,神坑。。。
瀏覽器訪問 http://jupyter.voidking.com ,看到的是nginx的歡迎頁面。excuse me? 再次使用curl命令測試,原來,拿到的確實是nginx的頁面。那么問題來了?這次解析為什么沒有生效?
使用systemctl重啟nginx,歡迎頁面;指定nginx配置文件重啟nginx,歡迎頁面;修改jupyter.voidking.com.conf,反向代理到8080的tomcat,歡迎頁面;刪除jupyter.voidking.com.conf文件,把內容寫入nginx.conf,歡迎頁面;把新添加內容放在nginx.conf的上部,作為第一個server配置,歡迎頁面;換另外一個域名(jupyter.imsnail.com)設置解析,歡迎頁面。。。
至此我嚴重懷疑,nginx有毛病!
卸載nginx
上次安裝nginx是編譯安裝,按照下列步驟卸載。
1、刪除安裝目錄
rm -rf /usr/local/nginx
rm -rf /var/log/nginx
rm -rf /var/temp/nginx
rm -rf /var/temp/run/nginx
2、刪除開機自啟動文件
find / -name "nginx*"
rm -rf /usr/lib/systemd/system/nginx.service
systemctl daemon-reload
重新安裝nginx
接下來,參考nginx官方文檔,安裝nginx。
1、創建/etc/yum.repos.d/nginx.repo,內容如下:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
2、安裝nginx
yum install nginx
3、設置開機啟動
systemctl enable nginx
4、殺死nginx進程,重新啟動
ps aux | grep nginx
kill -9 [nginx_id]
systemctl start nginx
5、查看運行狀態
systemctl status nginx -l
發現配置文件位置為:/etc/nginx/nginx.conf
6、在/etc/nginx/conf.d/中創建jupyter.voidking.com.conf,內容同上。
7、重啟nginx
systemctl restart nginx
接下來,見證奇跡的時刻!再次訪問 http://jupyter.voidking.com ,依然是歡迎頁面。。。
掙扎
大哥,好歹給個報錯也行啊!沒有報錯,訪問就歡迎,這是要鬧哪樣!決定再次換成反向代理8080端口的tomcat,測試一下是不是仍然出現歡迎頁面。
1、先創建/var/data/client_body_temp和/var/data/proxy_temp兩個目錄
mkdir -p /var/data/client_body_temp
mkdir -p /var/data/proxy_temp
2、然后修改jupyter.voidking.com.conf文件為:
server {
listen 80;
server_name jupyter.voidking.com;
charset utf-8;
location /{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 1024m;
client_body_buffer_size 128k;
client_body_temp_path /var/data/client_body_temp;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /var/data/proxy_temp;
proxy_pass http://127.0.0.1:8080;
}
}
3、重啟nginx
systemctl restart nginx
4、測試訪問
訪問 http://jupyter.voidking.com/ ,成功訪問到tomcat!看來上一個nginx確實有問題,因為重裝nginx前,同樣的配置,上一個nginx給我返回的是歡迎界面!
5、jupyter.voidking.com.conf修改成:
server {
listen 80;
server_name jupyter.voidking.com;
charset utf-8;
location /{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 1024m;
client_body_buffer_size 128k;
client_body_temp_path /var/data/client_body_temp;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /var/data/proxy_temp;
proxy_pass http://127.0.0.1:8888;
}
}
重啟nginx,測試訪問,成功!但是,上面的配置可以訪問jupyter頁面,卻無法連接kernel,也就是說無法執行python代碼。
6、jupyter.voidking.com.conf修改為:
server {
server_name jupyter.voidking.com;
listen 80;
location / {
proxy_pass http://127.0.0.1:8888/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
}
重啟nginx,測試訪問,成功;執行代碼,成功。
后記
繞了好大一個圈。
首先是jupyter.voidking.com.conf的配置文件寫錯了,我也認為是配置文件寫錯了,於是各種修改配置文件,可無論我怎樣修改配置文件,nginx只返回一個歡迎頁面。
這就誤導我認為nginx出了問題,於是開始了針對nginx的各種測試。修改配置也好,重啟nginx也好,nginx只返回一個歡迎頁面,於是我認定nginx除了問題。
重裝nginx后,保持最開始的jupyter.voidking.com.conf配置,依然返回歡迎頁面,但是修改配置文件,正常訪問到tomcat,這就說明配置文件寫錯了。
綜上,我認為這個鍋是配置文件的。之所以最開始修改配置文件nginx毫無反應,孜孜不倦地返回歡迎頁面,要么是存在僵屍進程,要么是瀏覽器存在緩存,干擾了測試,因為nginx壞的可能性太低。
本文作者: 好好學習的郝本文鏈接: https://www.voidking.com/dev-centos-jupyter/ 版權聲明: 本博客所有文章除特別聲明外,均采用 BY-NC-SA 許可協議。轉載請注明出處!源站會及時更新知識點及修正錯誤,閱讀體驗也更好。歡迎分享,歡迎收藏~
