CentOS安裝配置Jupyter


前言
如果在服務器上安裝一個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 許可協議。轉載請注明出處!源站會及時更新知識點及修正錯誤,閱讀體驗也更好。歡迎分享,歡迎收藏~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM