作者 钱亦欣

随着现实中数据可获得性的体高,你是否觉得自己的笔记本已经带不动你在数据方面的宏图大志,是否觉得跑个要花费几个小时的模型实在是虚度青春,但是花钱买高配的电脑又有点肉疼。现在,一种低成本、高效用的解决方案诞生了——利用阿里云的云服务器可以很大程度上解决你的需求。

为了给广大学生(穷苦人民)提供学习试用(赚取 deadweight loss)的机会,阿里云推出了月付学生机,每月只要 9.9 就能租用一台1核(E5-2682 v4 @ 2.50GHz)、2G内存、40G硬盘,1M 带宽的云服务器。

看起来这台服务器的配置并不是太高,然而由于其 cpu 的高性能和无图形桌面的 Linux 系统的低资源占用,它还是可以一战的。并且有了它,你可以在本地调试算法和模型,只在云端进行长时间的计算和数据采集等工作。并且阿里云的服务器基本都支持带宽的弹性调整,在对网络有较大需求的期间花个十几二十块钱调整下带宽就行。

而根据我(一个搞贝叶斯统计的研究生)这大半年的使用体验,阿里云学生机极大地提升了我的生活幸福感。从此我再也不用在跑模型时翘首以盼,而是可以边在云端跑计算,边在本地写文档(打游戏)。更何况每个月只要 9.9,完全不会对你的生活造成任何影响,阿里云此举真是利国利民,普天同庆(20万广告费已到帐),接下来我就根据我个人的使用场景讲解下如何把刚租用到的裸机变为一个可用的科学计算环境。

1. 基本设置

我租用的服务选用了 Centos 7.4 的系统,Unbuntu 其实也大同小异。完成租用后,我大概进行了如下设置以获得更好的用户体验,以下部分的具体操作细节都可以在阿里云的文档里找到帮助:

  • 修改root密码:如果在选择配置时没有设定密码,那么可以在控制台进行相应的设置。
  • 修改防火墙:如果开着 Centos 自带的 firewall 防火墙,会给后续的安装过程带来一定麻烦,所以我这里就把防火墙禁用了,也体现我对阿里云的防火墙的高度信任。
  • 配置安全组:为了方便我直接开发了所有ip段对我这台服务器所有端口的访问权限,我知道这样很不好,大家还是根据每个人的需要来制定安全组策略。
  • 修改默认 shell 为 zsh :这部分应该是我个人的私货,其实用 bash 没有什么问题,但 zsh 带来的方便真是让人无法自拔,光是强悍的自动补全和使用插件后一个命令解压大部分压缩文件这两个功能就值得你使用。尤其是现在有了 oh-my-zsh,配置什么的非常方便,还好看。
  • 配置 EPEL:centos 默认的 yum 源里面的资源还是有限,所以我们添加一些额外的源,EPEL(Extra Packages for Enterprise Linux)就是很棒的一个额外仓库,下文中安装 R 就用到了它。

2. 安装 miniconda 和 jupyter notebook

python 应该是目前数据科学界最流行的语言了,我们就从它入手。一般而言,Linux 系统的各大发行版都自带 python2,这是因为这些系统的很多模块都要依托 python2 来运行。然而 python3 在字符编码等方面有着很大的优势,并且 python2 到2020年就停止维护了,因此在系统里再安装个 python3 还是挺有必要的。为了不污染系统本身环境,我习惯安装 miniconda,你可以到官网下载合适的版本安装,过程如下:

wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 出现如下提示,按enter继续
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
# 出现 license,按多次空格直到底部
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE--More--
# 输入yes吧
Do you accept the license terms? [yes|no]
# 指定安装路径,我就直接按 enter 用的默认路径
Miniconda3 will now be installed into this location:
/root/miniconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/root/miniconda3] >>>
# 之后让你选择是否要把 miniconda 添加入环境变量。喜欢干净的选 no, 喜欢方便的选 yes

至此,miniconda 的安装就基本完成了。如果你把它添加到了 bash/zsh 环境里,这时候你在命令行执行 python 命令默认启动的就是 python3,而如同之前提到,Linux 诸多发行版的模块要依赖 python2,上述操作可能会带来一些意料之外的 bug。

安装完 miniconda 并设置好相应的环境变量,你就可以用 pip 来安装相应的库了,jupyter notebook 的安装也不例外,安装完后把 jupyter notebook 在后台启动并且设置为不被挂起就可以了(默认监听8888端口),当然我们还需要生成相应的配置文件(在 ~/.jupyter 下),修改相应的外网IP,登录密码、端口、根目录等。

# install jupyter notebook
pip install jupyter notebook

# generate config file
jupyter notebook --generate-config

# start jupyter notebook
nohup jupyter notebook --allow-root &

之后通过浏览器访问你的 外网IP:8888 就能看到登录界面,输入在配置文件里设定的密码就能使用了。

注:上面的命令中 nohup 代表让这个命令不被挂起,也即关闭这次连接依旧执行该命令,--allow-root 参数使得我们能以 root 用户的身份启动 jupyter notebook,命令末尾的 & 代表在后台执行命令,前台依旧可以做其他事。这样以来只要我们不杀掉相应的进程,就可以随时访问 jupyter notebook 了

3. 安装 R 和 Rstudio server

R 也是数据从业人员最常用的编程语言之一,而 Rstudio 作为 R 语言最好的 ide (没有之一),能极大提升编写 R 代码时的体验。所以我建议大家都入手一个。

对于 R,只要配置了EPEL(参照第一部分),就可以直接通过 yum 来进行安装。

yum install R
# 之后直接在命令行输入大写的 R 就可以启动 repl 环境
[root@fksad carp]# R

R version 3.4.3 (2017-11-30) -- "Kite-Eating Tree"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

>

同样,Rstudio 的安装也非常友好,由于我们用的是没有显示器的服务器,所以这里我们要选择安装基于浏览器的 server 版本。这类已经非常成熟的软件,我们最好的安装方法就是上官网查看他在 Linux 系统下的安装指南。参照官网指南,执行以下命令安装并且启动服务(默认监听8787端口):

wget https://download2.rstudio.org/rstudio-server-rhel-1.1.423-x86_64.rpm
sudo yum install rstudio-server-rhel-1.1.423-x86_64.rpm

systemctl start rstudio-server 

启动后在你本地的浏览器访问外网 IP:8787 就可以看到登录界面了。这里要说明一下,Rstudio Server 是不允许以 root 用户的身份登录的,所以需要预先在系统内设定新的用户,具体怎么操作请自行百度。之后使用这个用户的名称和密码登录,就能和桌面端的一样使用了。不同用户的环境和安装的包都是相互隔离的,所以很适合多用户的场景。 如果你需要修改 Rstudio server 的一些配置,比如改个端口什么的,情创建并修改以下两个文件:/etc/rstudio/rserver.conf /etc/rstudio/rsession.conf。

4. 安装 Mysql-community

如果你上百度搜索了 centos7 安装 mysql 的教程,那么绝大部分教程是这么教你的,上 mysql 官网下载相应的 mysql 仓库并添加,然后直接通过 yum install mysql-server 命令下载安装。当然,这种方式是可行的,只要你能容忍 20-40k/s 的下载速度,下面的就不用看了。

另一种更为节约时间的办法是从官网下载对应的打包好的文件(rpm bundle),解包后利用rpm命令安装,具体步骤如下:

# 选择适合你服务器系统版本的 rpm bundle 并下载
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar
# 解包下载文件
tar -xvf mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar
# 按照顺序逐个用 rpm 命令安装
rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm
# 如果期间报错,显示 libaio 缺失,则运行
yum install libaio
# 安装结束,启动 mysql 服务
systemctl start mysqld

第一次启动后,mysql 会给 root 用户分配一个初始密码,可以用如下命令获取密码并登录 mysql 修改密码

cat /var/log/mysqld.log | grep 'temporary password'
> 2018-01-05T15:25:15.330008Z 1 [Note] A temporary password is generated for root@localhost: kEF?xNHK,9=n
# 利用该临时密码登录
mysql -u root -p
# 进入mysql命令行后修改root密码并开放远程登录权限
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

至此,mysql 基本就可以使用了,我个人比较习惯利用 navicat 等图形化管理工具远程连接,你如果想降低网络延迟,也可以使用基于浏览器的 phpmyadmin。

结语

至此,符合我个人需求的一个科学计算环境就已经部署完成了,其实通过上述软件的安装部署经验,之后要进行别的操作也是大同小异。希望这篇短文能对你有帮助,欢迎各位打赏。