1. 前言
如果在服务器上安装一个jupyter,那么就可以随时随地使用jupyter,很方便。
本文主要记录centos7上jupyter的安装方法,设置密码的方法,添加守护进程的方法,顺便给它设置个域名。
2. 安装jupyter
参考《Jupyter notebook》或者官网文档,完成jupyter的安装。
1、升级pippip install --upgrade pip
2、安装jupyterpip install jupyter
如果安装报错:
1 | _scandir.c:14:20: fatal error: Python.h: No such file or directory |
那么需要先安装python-develyum 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.confvim /etc/supervisor/jupyter.conf
写入内容如下:
1 | [program:jupyter] |
2、重启supervisorsystemctl 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 | server { |
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 | rm -rf /usr/local/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 | [nginx] |
2、安装nginxyum 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、重启nginxsystemctl 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 | server { |
3、重启nginxsystemctl restart nginx
4、测试访问
访问 http://jupyter.voidking.com/ ,成功访问到tomcat!看来上一个nginx确实有问题,因为重装nginx前,同样的配置,上一个nginx给我返回的是欢迎界面!
5、jupyter.voidking.com.conf修改成:
1 | server { |
重启nginx,测试访问,成功!但是,上面的配置可以访问jupyter页面,却无法连接kernel,也就是说无法执行python代码。
6、jupyter.voidking.com.conf修改为:
1 | server { |
重启nginx,测试访问,成功;执行代码,成功。
9. 后记
绕了好大一个圈。
首先是jupyter.voidking.com.conf的配置文件写错了,我也认为是配置文件写错了,于是各种修改配置文件,可无论我怎样修改配置文件,nginx只返回一个欢迎页面。
这就误导我认为nginx出了问题,于是开始了针对nginx的各种测试。修改配置也好,重启nginx也好,nginx只返回一个欢迎页面,于是我认定nginx除了问题。
重装nginx后,保持最开始的jupyter.voidking.com.conf配置,依然返回欢迎页面,但是修改配置文件,正常访问到tomcat,这就说明配置文件写错了。
综上,我认为这个锅是配置文件的。之所以最开始修改配置文件nginx毫无反应,孜孜不倦地返回欢迎页面,要么是存在僵尸进程,要么是浏览器存在缓存,干扰了测试,因为nginx坏的可能性太低。