一个计算机技术爱好者与学习者

0%

好好学Python:CentOS安装配置Jupyter

1. 前言

如果在服务器上安装一个jupyter,那么就可以随时随地使用jupyter,很方便。

本文主要记录centos7上jupyter的安装方法,设置密码的方法,添加守护进程的方法,顺便给它设置个域名。

2. 安装jupyter

参考《Jupyter notebook》或者官网文档,完成jupyter的安装。

1、升级pip
pip install --upgrade pip

2、安装jupyter
pip install jupyter

如果安装报错:

1
2
3
4
5
_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

3、启动
jupyter notebook

如果报错:
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登录页面,如下图:

3. 设置密码

在安装完成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,使用密码访问成功。

4、禁止启动浏览器
此时,启动jupyter时会默认启动本地浏览器,这个需要关闭。
vim /root/.jupyter/jupyter_notebook_config.py,修改一行:

1
c.NotebookApp.open_browser = False

5、指定根目录
在哪里执行jupyter notebook,哪里就是根目录,这里,我们也可以指定根目录。
(1)创建根目录
mkdir /opt/notebook

(2)vim /root/.jupyter/jupyter_notebook_config.py,修改一行:

1
c.NotebookApp.notebook_dir = u'/opt/notebook'

4. 配置保活

参考《CentOS安装配置Supervisor》,安装配置好supervisor。

1、新建配置文件jupyter.conf
vim /etc/supervisor/jupyter.conf
写入内容如下:

1
2
3
4
5
6
7
[program:jupyter]
command=/usr/bin/jupyter notebook --ip 0.0.0.0 --allow-root
user=root
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

5. 设置域名

假设nginx的安装目录为/usr/local/nginx/
1、创建vhost目录
mkdir /usr/local/nginx/conf/vhost

2、修改nginx.conf,添加子配置目录

1
include /usr/local/nginx/conf/vhost/*.conf;

3、在vhost目录中新建jupyter.voidking.com.conf文件,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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文件,添加

1
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有毛病!

6. 卸载nginx

上次安装nginx是编译安装,按照下列步骤卸载。

1、删除安装目录

1
2
3
4
5
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

7. 重新安装nginx

接下来,参考nginx官方文档,安装nginx。

1、创建/etc/yum.repos.d/nginx.repo,内容如下:

1
2
3
4
5
[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 ,依然是欢迎页面。。。

8. 挣扎

大哥,好歹给个报错也行啊!没有报错,访问就欢迎,这是要闹哪样!决定再次换成反向代理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文件为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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修改成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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,测试访问,成功;执行代码,成功。

9. 后记

绕了好大一个圈。

首先是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 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~