Total Pageviews

Thursday 3 March 2016

搭建远程python私有云环境(关键是免费,免费,免费!!!)



目前因为笔者需要与朋友进行python数据远程讨论,将Python,jupyter noteblook部署在IBM私有云上,让数据可以直接被访问,省去了原来需将代码发给他后需要远程沟通的繁琐!最关键这都是免费的。

    注册并登陆超能云账户

    浏览器打开https://ptopenlab.com/cloudlabconsole/,利用邮箱注册并激活账户,并选择SuperVessel超能云登陆进去;

    左边为控制台操作,右边为虚拟机部分;详细操作过程见链接:
    https://services.ptopenlab.com/mediawiki/index.php/Main_Page

    申请云主机

    通过控制台进入镜像,进行资源申请,目前资源类型有KVM及Docker容器和自己快照三类,有两种资源可以申请:1、全新的空环境,包括Ubuntu,Centos,红旗,i-soft linux我不清楚是什么系统,通过启动云主机进入;2、预装环境系统,包括Python科学计算及应用开发环境,媒体处理,网站开发等类别,通过市场镜像进入;
    网络及安全配置

    虚拟机启动后,需要输入两种账户,用户: opuser ; 密码: p0weruser;用户: root ; 密码: passw0rd;在您第一次登录的时候,系统会强制您修改密码.

    有两种方式进行连接:1、网页终端;2、通过VPN配置网络后,利用类似putty终端工具连接,VPN的密码点击更多服务的头像可见,VPN的配置见链接;

    https://services.ptopenlab.com/mediawiki/index.php/VPN%E7%9A%84%E4%BD%BF%E7%94%A8
    搭建服务环境

    进入系统后利用root账户进行环境安装配置,1、linux安装Python3或者选用已有资源环境;2、键入命令pip3 install jupyter安装jupyter notebook;3、通过云控制台下访问与安全进行端口设置,放开端口的入口与出口;4、通过指令:jupyter notebook -ip=0.0.0.0 --port 8888,启动jupyter notebook的8888服务端口
    启动环境,测试

    确保思科的VPN已经连上,利用外网访问如:http://172.16.17.30:8890/tree, 当然要让python的代码正常运行,相关的库需要提前安装好。
----------

在 Linux VPS 上搭建云端 Jupyter Notebook

相信用过 Jupyter Notebook 的朋友们都知道这个工具的方便和强大。它采用了后台+web端的方式运行,既有可视化的界面,又有web端的灵活。
正常情况下,我们都是在本地运行 Jupyter Notebook,打开一个服务进程,然后在浏览器中访问 Jupyter Notebook。不过,对于拥有 VPS 的朋友们来说,怎么能浪费这么有利的运行方式?当然是把它部署到云端,随时随地通过浏览器来写代码、运行代码啦。
因此,今天我们来看看如何在 Linux 平台的 VPS 上搭建可以远程访问的 Jupyter Notebook。

一、安装 Jupyter Notebook

我们可以使用 pip 来安装 Jupyter,不过由于 Jupyter 的依赖较多,安装过程可能会有一些问题需要处理。
也可以直接安装 Anaconda 这个项目,十分简单方便,一步到位。Anaconda 包含了 Python、Jupyter Notebook 以及常用的科学计算包。
我们这里通过安装 Anaconda 来安装 Jupyter Notebook,Python 版本为 2.7。
Anaconda官网 下载安装包,得到文件 Anaconda2-4.4.0-Linux-x86_64.sh
在 Linux 命令行中输入
$ bash Anaconda2-4.4.0-Linux-x86_64.sh
注意,无论你使用的终端是否是 bash,命令中的 bash 都不能少。执行该文件后,跟随向导一步一步安装就可以了。

二、设置 PATH 环境变量

安装完 Anaconda 之后,需要先配置环境变量,才能直接使用 pythonjupyter notebook 等命令。
打开用户目录下的 .bashrc 文件,添加下面的命令:
export PATH=/wray/anaconda2/bin:$PATH
我的 anaconda 安装目录为 /wray/anaconda2/,大家可以根据自己的安装路径修改该命令。
重新登陆终端,就能打开 python 和 jupyter notebook 了。

三、设置 Jupyter 配置文件

Jupyter Notebook 运行需要一些参数,例如登录密码、默认目录、SSL认证等等。
Jupyter 默认不允许直接使用 root 用户运行 Jupyter Notebook,最好是新创建一个用户帐户。如果一定要用 root 账户运行的话,在下面的生成密码这一步中,需要采用第二种方式手动生成密码。

生成密码

我们需要生成经过加密的密码。
$ jupyter notebook password
Enter password:  ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to /Users/you/.jupyter/jupyter_notebook_config.json
密码将被保存到 ~/.jupyter/jupyter_notebook_config.json 这个文件中。
也可以手动生成密码:
$ python
>>> from notebook.auth import passwd
>>> passwd()
Enter password:
Verify password:
'sha1:a52b35d305df:c8339cf14bf4f0a8f745c1d1041ec87c03282221'

生成SSL证书

该步骤的目的是采用 HTTPS 连接远程访问 Jupyter Notebook,增加安全性,非必须。
~/.jupyter/ 目录下执行以下命令:
$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem
生成的 mykey.keymycert.pem 文件将被保存到 ~/.jupyter/ 目录中。
需要注意的是,由于我们自己制作的SSL证书没有被权威机构认证,所以通过浏览器访问时会提示不安全,只需要添加信任并继续访问即可。
这里有一个问题,是关于 ios 系统的。就是当我采用了 SSL 认证,即 HTTPS 访问时,Windows 平台和 Android 平台都能够正常访问并使用 Jupyter Notebook。但是使用 ios 平台访问时,能够登陆 Jupyter Notebook,并且可以打开和编辑文件,但始终提示 Connecting to kernel,即无法连接到 python 解释器内核,因此没办法执行代码。去掉SSL认证之后,ios 才能成功连接到内核。SSL认证的设置在下文中讲述。

生成配置文件

生成默认的 Jupyter 配置文件:
$ jupyter notebook --generate-config
我们可以在 ~/.jupyter 目录中看到 jupyter_notebook_config.py 文件,该文件用于配置 Jupyter Notebook 的运行参数。
然后打开该文件,添加以下配置:
# 设置默认目录
c.NotebookApp.notebook_dir = u'/defult/dir/'
# 允许通过任意绑定服务器的ip访问
c.NotebookApp.ip = '*'
# 用于访问的端口
c.NotebookApp.port = 9999
# 不自动打开浏览器
c.NotebookApp.open_browser = False
# 设置SSL认证
c.NotebookApp.certfile = u'/path/to/.jupyter/mycert.pem'
c.NotebookApp.keyfile = u'/path/to/.jupyter/mykey.key'
# 设置登录密码
c.NotebookApp.password = u'sha1:28436903e41b:e36a5f61317d4f515d46178a81834b20ae60d57b'
如果不设置默认目录,则起始目录就是执行 jupyter notebook 命令时所在的工作目录。
在 Linux 中,非 root 用户无法监听 1024 以内的端口号。
在终端中执行 jupyter notebook,如果是 root 用户,则需要加上 --allow-root 选项。此时,若是没有其它问题出现,你就可以通过你的域名和端口号 https://domain.com:9999 来访问 Jupyter Notebook 了。
注意,如果采用了 SSL 认证,则访问的网址中必须以 https 开头,表示采用 https 连接方式,否则无法访问。

不挂起后台运行

我们希望即使在退出终端后,Jupyter Notebook 依然在后台运行,仍然可以通过远程被访问。
我们可以使用 nohup command & 来实现,nohup 命令会忽略所有的挂起信号,确保命令在后台长期执行。
nohup jupyter notebook > jupyter.log &
这里我们将标准输出定向到 jupyter.log 文件中,如果不指定该文件,则默认定向到 nohup.out 文件中。
接下来,就尽情地享受云端 Jupyter Notebook 所带来的便捷吧!
------------

https://github.com/jupyter/jupyter/wiki/