Hexo+Jupyter
本文最后更新于:2020年5月23日 下午
本文以域名pxxyyz.com
为例。
安装Jupyter
- 安装
Anaconda
$ mkdir anaconda //创建目录
$ cd anaconda //进入目录
// 在镜像站找到安装包并下载
$ wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2020.02-Linux-x86_64.sh
$ bash Anaconda3-2020.02-Linux-x86_64.sh //安装anaconda3
- 生成
Jupyter Notebook
配置文件
$ jupyter notebook --generate-config
- 打开
ipython
并设置登入密码
ipython
In [1]: from IPython.lib import passwd
In [2]: passwd() #设置Jupyter Notebook密码
Enter password:
Verify password:
Out[2]: '' #生成的密钥在配置文件有用
- 修改服务器配置文件
$ vim ~/.jupyter/jupyter_notebook_config.py
- 按
i
键进入文件的编辑模式,在该文件中添加代码,按Esc
键退出编辑模式,输入:wq
保存退出。(先输入:
,然后输入wq
回车)
# 设置所有ip地址皆可访问
c.NotebookApp.ip='*'
# 输入密码的哈希值,见Out[2]
c.NotebookApp.password = u'sha1:XXX'
# 禁止自动打开浏览器
c.NotebookApp.open_browser = False
# 指定端口,需要在服务器安全组开发该端口
c.NotebookApp.port =8888
# 远程访问
c.NotebookApp.allow_remote_access = True
# 使用mathjax,可输入公式
c.NotebookApp.enable_mathjax = True
启动
Jupyter
$ nohup jupyter notebook --allow-root & # nohup避免关闭终端则终止了Jupyter 程序的运行,--allow-root允许root权限,& 将程序放入后台运行
打开端口步骤: 本实例安全组->配置规则->入方向->手动添加
授权策略 | 优先级 | 协议类型 | 端口范围 | 授权对象 |
---|---|---|---|---|
允许 | 100 | 自定义 TCP | 目的:8888/8888 | 源:0.0.0.0/0 |
- 浏览器访问
Jupyter notebook
(移动端或桌面端),并输入刚才配置的密码即可使用http://HostIP:8888 http://域名:8888
注意:
- 第二种方式需要域名解析到服务器公网IP,域名等价于公网IP
https://HostIP:8888
访问出错,https://域名:8888
同理
anaconda换源,分别测试一下下载速度和稳定性,自行选择最优的
# 添加清华源 $ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ $ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ $ $ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge $ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ $ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ # 添加上交源 $ conda config --add channels https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main/ $ conda config --add channels https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/free/ $ conda config --add channels https://mirrors.sjtug.sjtu.edu.cn/anaconda/cloud/conda-forge/ # 添加中科大源 $ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ $ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/ $ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/ $ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/ $ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/ $ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/ # 设置搜索时显示通道地址 有资源显示源地址 $ conda config --set show_channel_urls yes # 换回默认源(重置用) $ conda config --remove-key channels
可以在
Jupyter notebook
的工作目录中上传或下载.ipynb
文件,当然别的文件也可以。
nginx重定向
希望在我的博客中添加一个菜单按钮直接访问我的Jupyter notebook
。然而菜单链接是通过url_for
自动生成的,如添加link: ':8888'
,生成的是pxxyyz.com/:8888/
,而不是pxxyyz.com:8888
。当然,可以设置链接为link: 'pxxyyz.com:8888'
,直接且简单,但这不能学到一些有趣的东西!
下面通过特点子页面来访问域名的指定端口,即通过pxxyyz.com/jupyter
访问pxxyyz.com:8888
在此之前上传了
SSL证书
并配置HTTPS
2修改服务器配置文件
$ vim /etc/nginx/nginx.conf
按
i
键进入文件的编辑模式,在该文件找到server
,修改代码,按Esc
键退出编辑模式,输入:wq
保存退出。(先输入:
,然后输入wq
回车)
server {
listen 443 ssl;# 80 default_server;
# listen [::]:80 default_server;
server_name pxxyyz.com;
root /home/hexo;
# ssl on; # 老版本指令
ssl_certificate /etc/nginx/conf/XXXXbundle.crt;
ssl_certificate_key /etc/nginx/conf/XXXX.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4!DHE;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
# http://pxxyyz.com/jupyter/ to http://pxxyyz.com:8888
location ~ /jupyter/?$ {
return 302 http://pxxyyz.com:8888;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
server { #把http的域名请求转成https
listen 80;
server_name pxxyyz.com;
return 301 https://$host$request_uri;
}
重启
nginx
并检查配置$ service nginx restart # systemctl restart nginx.service $ nginx -t # 得到结果是 # nginx: the configuration file /etc/nginx/nginx.conf syntax is ok # nginx: configuration file /etc/nginx/nginx.conf test is successful
当然,一开始不是这么做的,错误的方法也贴出来,避免入坑
server { listen 80; server_name pxxyyz.com; location /jupyter { proxy_pass http://pxxyyz.com:8888/tree? } }
分析
- 用
proxy_pass
得到的重定向是https://pxxyyz.com/jupyter
- 对应的服务器访问的是
https://HostIP:8888
- 正确的
Jupyter notebook
访问地址却是http://HostIP:8888
- 因此问题出在http的域名强制转成https
- 解决方法:遇到指定链接用
return 302
返回http从而得到正确的结果3 - 结果:
https://pxxyyz.com/jupyter
、http://pxxyyz.com/jupyter
、http://pxxyyz.com:8888
和http://HostIP:8888
均能打开Jupyter notebook
- 但IP的SSL证书不免费!
https+port
的组合访问会出错。
- 用
参考
-[1] 搭建 ipython/jupyter notebook 服务器
-[2] hexo部署服务器之配置HTTPS
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!