学习Python,或者刷算法题的时候,希望可以免去本地装配python环境、命令行解释运行等烦恼。利用jupyter-notebook,可以在自己的服务器上搭建一个web端快速编写代码、一键解释运行的平台。以后就可以把精力专注在python学习和刷题上了。
准备工作
这里准备采用docker镜像的方式快速搭建,非常方便。另外,网站最好使用ssl加密一下,让数据传输更加安全,也通过域名让平台更加容易访问。因此,需要提前安装:
- Docker
- Nginx
安装步骤
确定自己需要的镜像
jupyter notebook 的官方镜像有很多个版本:
- jupyter/base-notebook:最最基本的版本,所有其他版本都在此基础上扩展
- jupyter/minimal-notebook: 在base的基础上增加了一些实用的命令行工具
- jupyter/r-notebook: minimal的基础上增加了R语言支持
- jupyter/scipy-notebook: python科学版,增加了很多python中数据分析、过滤等需要使用的库。
- jupyter/datascience-notebook: r和scipy的结合版
- jupyter/tensorflow-notebook:包含了tensorflow,可用于机器学习模型训练。基于scipy
- jupyter/pyspark-notebook all-spark-notebook: 包含了Apache Spark支持。all-spark还包含了r语言支持。
具体可以参考https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html
这里因为我们的服务器主要供学习Python和刷题使用,scipy版本就比较合适了。
Docker运行容器
sudo docker run -d -p 10000:8888 --restart=always -v /mnt/jupyter:/home/jovyan jupyter/scipy-notebook
其中,-p是映射端口,-d指定后台运行,–restart指定每次意外关闭后还会自动启动,-v指定数据映射到宿主机,防止丢失。
Nginx 配置
server {
listen 443 ssl http2;
server_name j.claws.top;
ssl_certificate /root/cert/claws.top/fullchain.cer;
ssl_certificate_key /root/cert/claws.top/cert.key;
location / {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:10000;
}
location ~*/(api/kernels/[^/]+/(channels|iopub|shell|stdin)|terminals/websocket)/? {
proxy_pass http://127.0.0.1:10000;
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";
}
}
注意,一定要配置websocket支持,否则无法正常新建和编辑脚本文件,也无法正常连接内核。