在阿里云ECS上运行Jupyter Notebook并远程访问

这是关于如何在阿里云ECS上运行Jupyter Notebook并远程访问的简要步骤介绍。

分析《银河帝国》基地系列的时候,有一行代码把我的 Surface 跑死机花屏了。于是我想到可否用服务器?于是权衡之下(主要是看谁便宜)入了阿里云 ECS 的学生基础版,想在上面运行 Jupyter Notebook 来进行基地系列的分析。虽然最后这个目的没有达到,但部署 Jupyter Notebook(以下简称 JN) 的过程确挺有意思的,记下来备忘。 关于环境,云端用的是 CentOS 7 系统,安装了 Anaconda3 的环境。在本地用 Xshell 进行连接。

  1. 要生成 JN 的配置文件:

    1
    $jupyter notebook --generate-config

    运行以上代码就可以生成了。

  2. 设置远程访问密码:

    1
    2
    3
    $ipython #打开ipython
    from notebook.auth import passwd
    passwd() #生成密码

    运行以上代码,输入两遍远程访问的密码,就会生成哈希值,它本身不是密码,但这个值后面要用到。

  3. 修改 JN 配置文件:

    1
    $vi ~/.jupyter/jupyter_notebook_config.py

    用 Vim 打开第一步生成的配置文件,然后添加下列内容:

    1
    2
    3
    4
    c.NotebookApp.ip='*'
    c.NotebookApp.password = u'密码哈希值'
    c.NotebookApp.open_browser = False
    c.NotebookApp.port =8888 #随便指定一个端口

    注意:在 JN 某次更新之后,

    1
    c.NotebookApp.ip='*'

    需改为

    1
    c.NotebookApp.ip='0.0.0.0'

    另外,根据指定的端口和后面运行 JN 时的提示,记得把阿里云端的防火墙端口打开。

  4. 运行 JN:

    在 Shell 输入:

    1
    $jupyter notebook

    但是呢,因为我是用 root 用户登录的系统,所以服务器提示我:

    1
    2
    WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
    Running as root is not recommended. Use --allow-root to bypass.

    就是说我这样运行是有风险的,但我目前先这样运行着吧,后面再优化。于是键入:

    1
    $jupyter notebook --allow-root

    运行成功。

  5. 本地运行:

    在本地浏览器输入地址:

    1
    http://[all ip addresses on your system]:88/

    就可以输入密码进行愉快的远程 JN 之旅啦!