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 许可协议。转载请注明出处!源站会及时更新知识点及修正错误,阅读体验也更好。欢迎分享,欢迎收藏~

posted @ 2022-03-25 22:18  幽见〆南山  阅读(1179)  评论(0编辑  收藏  举报