学习Python,或者刷算法题的时候,希望可以免去本地装配python环境、命令行解释运行等烦恼。利用jupyter-notebook,可以在自己的服务器上搭建一个web端快速编写代码、一键解释运行的平台。以后就可以把精力专注在python学习和刷题上了。

准备工作

这里准备采用docker镜像的方式快速搭建,非常方便。另外,网站最好使用ssl加密一下,让数据传输更加安全,也通过域名让平台更加容易访问。因此,需要提前安装:

  1. Docker
  2. 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支持,否则无法正常新建和编辑脚本文件,也无法正常连接内核。