CentOS安装配置Jupyter

文章目录
  1. 1. 前言
  2. 2. 安装jupyter
  3. 3. 设置密码
  4. 4. 守护进程
  5. 5. 设置域名
  6. 6. 卸载nginx
  7. 7. 重新安装nginx
  8. 8. 挣扎
  9. 9. 后记

前言

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

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

安装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登录页面,如下图:

设置密码

在安装完成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'

守护进程

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

1
2
3
4
5
6
7
8
[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,添加子配置目录

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

卸载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

重新安装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 ,依然是欢迎页面。。。

挣扎

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

后记

绕了好大一个圈。

首先是jupyter.voidking.com.conf的配置文件写错了,我也认为是配置文件写错了,于是各种修改配置文件,可无论我怎样修改配置文件,nginx只返回一个欢迎页面。

这就误导我认为nginx出了问题,于是开始了针对nginx的各种测试。修改配置也好,重启nginx也好,nginx只返回一个欢迎页面,于是我认定nginx除了问题。

重装nginx后,保持最开始的jupyter.voidking.com.conf配置,依然返回欢迎页面,但是修改配置文件,正常访问到tomcat,这就说明配置文件写错了。

综上,我认为这个锅是配置文件的。之所以最开始修改配置文件nginx毫无反应,孜孜不倦地返回欢迎页面,要么是存在僵尸进程,要么是浏览器存在缓存,干扰了测试,因为nginx坏的可能性太低。