十分钟配置云端数据科学开发环境

做数据科学开发,目前最流行的语言之一是 Python,这主要得益于其提供 Numpy、Pandas等强大的软件包,以及 Jupyter 这样便捷的开发环境。

本文将介绍如何在一台云服务器上配置 Jupyter Notebook 环境,从此只要有浏览器和网络,就是可以随时随地进行数据科学开发工作,不用担心家庭环境与办公环境多次配置的问题。

前提条件

如果想跟随本教程一起完成环境搭建工作,需要拥有一台云服务器,笔者使用的是腾讯云提供的 CVM,操作系统为 Ubuntu 14.04。如果不满足该条件,可以考虑通过笔者的推荐链接购买

如果你打算长期使用该服务器,可以参考这篇文章:如何正确配置 Ubuntu 14.04 云服务器?

购买服务器并完成配置之后,即可通过如下命令登录:

ssh ubuntu@cvm-ip

安装依赖

Jupyter 是使用 Python 编写的一个软件包。而且,我们希望在 Jupyter 中使用 Python 2 和 Python 3等多个版本,因此先安装 Python 3 和 pip 。(Ubuntu 14.04 默认安装了 Python 2.7)

sudo apt-get install update
sudo apt-get install python3 python-pip

配置国内 PyPI 源

后续使用 pip 安装第三方库时,由于受国内网络限制,速度会比较慢。我们首先将 PyPI 的源修改为国内源,这里使用的是中国科学技术大学提供的源。

编辑 ~/.pip/pip.conf ,在最上方加入如下内容:

[global]
index-url = https://mirrors.ustc.edu.cn/pypi/web/simple
format = columns

配置好之后,即可享受风一般的安装速度。

虚拟环境

下面,为 Jupyter 创建一个独立的虚拟环境,与系统自带的 Python 隔离开来。为此,先安装 virtualenv 库:

sudo pip install -U virtualenv

由于我们目前是以 ubuntu 用户,可能要以 sudo 执行命令,避免 pip 安装时出现权限问题。

然后,创建一个专门的虚拟环境,并直接激活:

virtualenv venv -p python3
source venv/bin/activate

在创建虚拟环境时,指定的 Python 版本为 3,方便后续的操作。

安装 Jupyter

Jupyter 的安装其实很简单,只需要执行一行命令即可:

sudo pip install -U jupyter

由于会安装其他相关的依赖库,这一步所需的时间可能较长。

配置 Jupyter

安装好 Jupyter 之后,我们需要对其进行简单的配置,比如设置访问密码,默认不自动打开浏览器等。Jupyter 默认会使用 ~/.jupyter/jupyter-noteboook-config.py 配置文件,我们在 ~/venv/ 目录下新建一个 conf.py 文件作为自定义配置文件。

mkdir -p ~/venv/conf.py

创建密码

为了方便,我们选择 jupyter 作为访问密码。

需要在命令行依次执行如下命令,结束之后会得到一个密码的 sha1 值,后续要填写在配置文件中。

PASSWD=$(python -c 'from notebook.auth import passwd; print(passwd("jupyter"))')
echo "c.NotebookApp.password = u'${PASSWD}'"

其他设置

此外,为了能够直接通过浏览器打开 http://cvm-ip:8881 地址,访问 Jupyter Notebook,我们还要做如下设置:

c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8881
c.NotebookApp.password = u'sha1:${PASSWD}' # ${PASSWD} 替换为实际的 sha1 值

将上面两处设置,写入 conf.py 文件,然后执行如下命令即可:

jupyter notebook --config ~/venv/conf.py

新建 Jupyter 系统服务

为了能够长时间访问 Jupyter Notebook,避免每次都需登陆服务器手动执行命令,我们需要让该命令一直在后台自动运行,最好是支持系统重启时自动启动。因此,我们可以将 jupyter 变成一个系统服务。

创建 /etc/init/jupyter.conf 文件,写入如下内容:

start on runlevel [2345]
stop on runlevel [!2345]

setuid ubuntu
setgid ubuntu

env PATH=/home/ubuntu/venv/bin
chdir /home/ubuntu/jupyter
exec jupyter notebook --config /home/ubuntu/venv/conf.py

上面定义了该服务在 runlevel 为 2、3、4、5 时启动,而在非这几个 runlevel 时停止该服务。

运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别2:多用户状态(没有NFS) 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 运行级别4:系统未使用,保留 运行级别5:X11控制台,登陆后进入图形GUI模式 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

配置好了 jupyter.conf 文件之后,就能够通过如下命令启动、停止和重启 Jupyter Notebook 了:

sudo start jupyter # 启动 jupyter
sudo stop/restart jupyter # 停止/重启 jupyter
sudo status jupyter # 查看 jupyter 的状态

这样,每次系统启动或者出错重启时,都会启动 Jupyter Notebook。

配置 Nignx 并创建系统服务

下一步,我们设置 Nginx 作为 Jupyter 的反向代理服务器。首先,安装 Nginx,并修改default 设置:

sudo apt-get install nignx
sudo vim /etc/nginx/sites-available/default

修改其中的 location / 部分,并注释掉某些行,具体见下面的示例:

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        #root /usr/share/nginx/html;
        #index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;
                proxy_pass http://localhost:8881;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
}

这一步需要注释掉 try_files 一行,并新增 proxy_pass http://localhost:8881;,将对 http://cvm-ip 的访问请求转发至该地址 。

保存并退出文件,然后重启 Nginx 服务即可。

sudo service nginx restart

之后,再修改 conf.py 文件:

#conf.py
c.NotebookApp.ip = 'localhost' # 表示只接受来自本机的请求
...

并重启 Jupyter 服务:

sudo restart jupyter

现在我们访问云服务器的 IP 地址时,就会进入 Jupyter Notebook 的登陆页面。

制作系统镜像

虽然说上面的整个过程并不太复杂,一步一步跟着教程做的话可能十分钟左右就可以搞定了。但是如果希望以后也能够快速复制同样的系统,将整个过程编写为一个脚本来自动安装、配置时比较好的选择。不过,最终安装、配置的时间还是会有的。

推荐一种更加快速的方法,即使用腾讯云等云服务商提供的制作镜像功能,将配置好的系统直接打包,以后可以直接使用镜像,只要1-2分钟,就可以启动 Jupyter Notebook 服务器了。

相关推荐:

  1. 利用Pelican搭建数据科学博客
  2. 人人都可以做深度学习应用:入门篇(上)

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Chef中使用角色和环境来控制服务器配置

在构建基础架构时,管理多服务器,服务,用户和应用程序可能会很快变得很难。配置管理系统可用于帮助您管理这种混乱。

853
来自专栏乐享123

How to Auto Gen Css/js by Grunt and Jenkins

19110
来自专栏张戈的专栏

Linux在批量服务器管理中实用的PS1命令提示符格式

作为一个大公司的运维,手头管理了成百上千的服务器是家常便饭,甚至更多。而我们一般都是用跳板机登陆,由于这些机器一般都是克隆或者虚拟化出来的,所以登陆后的命令行提...

3396
来自专栏安恒信息

IIS4\\IIS5 CGI环境块伪造0day漏洞

大约14年前发现一直到现在的0day 是IIS4\IIS5的漏洞,对应操作系统是winnt和win2000系统,微软不再支持这些软件,他们的策略想淘汰这些系统,...

2637
来自专栏闵开慧

ubuntu命令大全

查看软件xxx安装内容 #dpkg -L xxx 查找软件 #apt-cache search 正则表达式 查找文件属于哪个包 #dpkg -S fil...

3025
来自专栏zhangdd.com

zabbix安装-apache+php+mysql环境zabbix3.2安装文档

zabbix是目前应用比较广泛的是c/s架构监控解决方案,本文从实战的角度教你zabbix在centos7系统下安装配置。

633
来自专栏信安之路

常见的远程执行命令方式整理

当我们已经获取了远程系统的凭证(明文密码或 hash)时,可以直接通过3389远程登录进去收集信息、进行下一步的渗透,但是这样做的话会在系统上留下我们的操作记录...

800
来自专栏程序小工

【SSH】使用SSH登录远程主机,并禁用密码登录

对远程主机进行登录管理,一方面可以简化日常频繁登录的密码和 ip 输入步骤,另一方面,也可以提高远程主机的安全性,避免远程主机被“黑客”轻易攻击。 也借此加强...

1133
来自专栏张戈的专栏

解决网站404页面返回200状态码问题

好久没打理博客,突然收到 CDN 流量预警,发现平均每天 40G 流量消耗!what?就现在这个访问量,不存在的。看了下 CDN 日志发现有小人一直在请求博客页...

463
来自专栏破晓之歌

python+nginx+uwsgi部署云主机遇到的问题

uwsgi中文文档:http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html

721

扫码关注云+社区