[实战AWS EC2]一、基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站
发布于 1年前 作者 sogego 3026 次浏览

**技术交流加入QQ群:261654896 **

实战AWS EC2文章目录http://cnodejs.org/topic/5295e58aa6957a0809b0fe43

假设你已经拥有了一个aws的账号,前提是你必须得有信用卡才能使用。我们以ubuntu为例

首先选择ping值最高,速度最快的鬼子的region 在你的aws控制台的右上角选择如下图:

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 选择地区

然后,我们来创建一下key 这个key创建完成后,妥善保存到本地电脑上,如果丢失了,就再创建一个key,但是要把你的instance重新指到这个新建的key上,才能使用最新的key登录

在 NETWORK & SECURITY 菜单下选择:Key Pairs 后点击:Create Key Pair

并输入Key pair name : phoneqq.com

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 创建登录key

接下来,在 INSTANCES 菜单下的 instances 中点击:Launch Instance

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Choose an Amazon Machine Image

第一步,在Step 1: Choose an Amazon Machine Image (AMI)中选择操作系统,在此我们选择64位的ubuntu server 13.10,因为32位的如果安装mongodb最大仅支持2G的数据库,为了以后的扩展所以选64位的

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Launch Instance

第二步:在Step 2: Choose an Instance Type中 选择instance的类型,默认是micro instance,t1.micro (up to 2 ECUs, 1 vCPUs, 0.613 GiB memory, EBS only) 也是免费不要钱的,当然也是配置最低的,并且只能使用EBS,不能使用instance storage,这个instance storage也就是实例存储,它最大的好处就是IO都是免费的,你可以用吃奶的力气往里面写数据,用拉屎的力气从里面取数据,经常用在读写log日志,比如:nginx的log,mongodb的log,redis的log,还有就是实际应用中写入文件后又马上删除,这些务必放在instance storage中,因为它是免费的,而且其读写速度要高于EBS的读写,如果放在EBS中读写log,那么IO的费用就够你受的了,但instance storage最大的缺点是当instance重启(先stop,再start instance)后,会丢失所有的数据。仅仅Reboot intance的时候不会丢

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Choose an Instance Type

我们再看看General purpose下的m1.small类型 m1.small (1 ECUs, 1 vCPUs, 1.7 GiB memory, 1 x 160 GiB Storage Capacity),这个instance有一个160G的instance storage,我们选择它。当然月底你的信用卡账单上就会有费用了,如果你只有玩玩的话,可以选择t1.micro这种类型的。

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Choose an Instance Type

第三步,在Step 3: Configure Instance Details中 Network默认是选择的:Launch into EC2-Classic

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Configure Instance Details

我们在下拉列表中选择成vpc,那么Subnet会自动的填上,其它的全部默认就可以了。如果没有vpc,可以创建一个

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Configure Instance Details

插曲开始创建VPC

首先在控制台的左上角:Services下拉菜单中选择VPC,点击:VPC Dashboard,然后点击:Start VPC Wizard 我们使用创建VPC向导来创建vpc,下面的第一种方式:VPC with a Single Public Subnet Only 其实和上面所说的 Launch into EC2-Classic是一样的,没有什么区别,意思就是说把你的instance放在公网上启动。

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Start VPC Wizard 直接点击:Create VPC就可以了 alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Start VPC Wizard

而我们既然选择把instance创建在VPC中,就应该,至少使用第二种方式,它的好处是,看面下图就明白啦,如果你有两台以上的instance,就可以比如用A或B两台机器,它们之间可以使用私网IP访问,我们可以把web服务器来供给网络上的任何人来访问,而把B做为数据库服务器,那么B与A之间用私网IP来访问,保证对数据库服务器的安全。

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Start VPC Wizard

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Start VPC Wizard

第四步,在Step 4: Add Storage中,我们先看一下t1.micro类型的instance ,前面说过t1.micro类型的仅支持EBS,所以在下图中Type是以EBS为root盘的,默认大小为8G,当然这个我们可以修改,比如改成20G。Volume Type是指的EBS是使用Standard,还是有IOPS的,这里我们使用standard,因为就算你选择了IOPS,也是不管用的。因为优化的EBS,只能使用在特定的instance类型中,比如m1.large或是m1.xlarge等。Delete on Termination默认是选中的,意思是当把你的instance执行termination后,它会自动删除掉Volume,也就是EBS会随着instance的销毁而自动删除,如果不选,你就只能手动删除你的EBS了。

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Add Storage

我们也可以为你的instance另外添加一块EBS盘,比如root盘是20G,那么data盘是30G,但经过实际使用发现两块EBS是分开计费的,因为标准的EBS,也就是standard的Volume Type的IO标准是100个IOPS,如果你分开使用了两块盘,那么你的IO就会暴涨,以鬼子的为例30G的话要:30G的要31.63美元,加上root盘的 20G的也是31.63美元,也就是一个月光是IO的费用就是差不多62美元,所以,以我看是不划算的,还不如把root盘加大到50G,把数据库安装在某个目录下也是一样的,这样的话费用仅为:31.63美元,因为是m1.small类型的instance,如果换成了m1.large的instance,就可以使用优化的EBS,那么同样的50G的root盘仅需要12美元,但每小时的费用也会加大,当然instance的配置也就提高了。大家可以使用aws的费用计算一下:http://calculator.s3.amazonaws.com/calc5.html?lng=zh_CN#

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Add Storage

当我们选择IOPS后,可以设置它的IOPS的值,比如是900,当然这个费用太多了,你可以在上面的计算器中发现,当使用了m1.large的instance那么就可以选择优化的EBS,也就是可以选择这个Volume Type为Provisioned IOPS,如果我们设置为:300个IOPS那么就是每个月36美元,也就相当于standard下的3倍,standard的EBS默认的IOPS就是100个,不过standard的EBS会自动调节,当突发时IO可以自动提高到几百个IOPS

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Add Storage

我们主要讲一下instance storage 也就是实例存储的添加,如果你选择了t1.micro这种类型的instance的话是看不到下图显示的Instance Store 0 的,前面说过t1.micro仅支持EBS,我们现在选择的了m1.small这种类型的instance,默认带有160G的实例存储,你可以使劲往里面读入数据,它默认会挂载到/dev/sdc这个下面

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Add Storage

第五步,在Step 5: Tag Instance中,随便输入就可以了,不输也可以的,如下图

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Add Storage

第六步,在Step 6: Configure Security Group中,是配置你的instance的访问接口,默认是:Create a new security group,你可以点击:Add Rule来添加你的Rule。

如果上面我们建立了VPC,那么它会自动引入VPC下面的Security Group,在些我们选择:Select an existing security group,并对下面的策略组打勾,它就相当于linux下的防火墙,你可以在VPC下面更改安全策略组,也可以在些直接添加,默认会开启22端口,且不能删除,因为22要我们使用SSH登录的,我们要建立网站,当然要找开80端口,

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Configure Security Group

你可以按照下面的配置为你的Securiy添加Rule
HTTP 的80端口 当作web服务器
Custom TCP Rule的 3000端口 用来运行sogego.com这个应用的nodejs服务器
Custom TCP Rule的 3001端口 用来运行phoneqq.com这个应用的nodejs服务器
Custom TCP Rule的 6379端口 用来运行redis数据库,因为你可能需要使用redis客户端在win7的机器上远程连接redis数据库
Custom TCP Rule的 27017端口 用来运行mongodb服务器,你也可能会使用mongodb客户端在win7的机器上远程连接 Custom UDP Rule的 1080端口 如果你要把你的服务器当作代理服务器来访问facebook,twitter等就打开它吧 All ICMP的 如果不打开这个,那么你的服务器就ping不通,为了安全起见,你也可以不打开

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Configure Security Group

第七步,接下来是选择Key,我们在开始的时候已经创建过Key了,如果没有的话可以新建一个

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Choose Key

在此我们使用已有的Key,如下图

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Choose Key

最后经过我们的review,我们启动这个instance就可以了,成功之后,如下图所示

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 Configure Security Group

现在我们回到了aws控制台,在Instances下面发现多了一个正在running的instance如下图,我把它的Name设置为:new_server,以方便区分不同的instance

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 show instances

我们进入到Volumes菜单,发现多了两个硬盘,分别是下图中打勾的20G和30G的,standard EBS,并且它所在的AZ是ap-northeast-1c,我们看到这两块EBS都挂载到了new_server下

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 show volumes

我们再次进入到instances菜单,在old_server上右键,如果选择Termination,那么整个instance会销毁,就是彻底删除了这个instance,一般情况下我们不要点击这个。
在Termination下有个Reboot,它的意思就是重启啦,如果我们使用的是m1.small这样的带有instance storage的实例,那么如果点了Reboot,这个160G的实例存储内的内容不会丢失
但如果点了Stop,然后又点了Start,那么160G的实例存储中的内容会丢失,也就是这个instance storage是,当instance stop 之后会丢失内容,所以持久化存储不能使用它,也就是数据库,mongodb,redis之类的不能安装在instance storage中

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 show volumes

上面当我们执行了Termination后,如果在创建instance的时候没有打勾,on-termination这一项,那么volume是不会自动删除的,我们再次进入到Volumes菜单,同时选中那两块20G和30G的EBS,右键删除就可以了

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 delete volumes

====接下来就是如何访问我们刚刚创建的这个instance实例,我们要在Elastic IPs中来创建公网的IP地址才可以,注意,创建了IP地址之后,一定要把它指到某个instance实例上,如果不指定那么就会被收费,每个月你可以有100个创建或删除IP的机会,如果不指定某个instance的话,就把IP删除掉====

上面说我们的instance创建在了VPC中,而不是Classic中,所以在这里创建公网IP的时候,也要选择把你的IP创建在VPC中还是Classic中。这里我们选择:Allocate New Address,然后EIP used in : VPC就可以了

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 delete volumes

我们创建的公网IP后,右键选择:Associate Address这一项就是指定某个instance实例,而Disassociate Address是解除公网IP与某个instance的绑定,如果要删除那这个公网IP,就是第一项的:Release Address

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 delete volumes

当我们选择了Associate Address之后,会让我们绑定某个instance,在下拉列表中我们选择,新创建的那个instance,也就是new_server这个,其中instance和network interface是or的关系,我们只选择一项就可以了,它们是对应该的关系,并且把:Allow Reassociation打勾,点击:Associate就可以了

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 delete volumes

接下来我们使用Bitvise SSH来连接刚创建的那具公网IP地址,这里注意的是:ubuntu server没有root用户,aws只给了我们一个ubuntu的用户名,在下图中,我们点击:User keypair manager这一项来导入我们之前创建的那个key

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 delete volumes

选择import之后,选择之前创建的比如是:phoneqq.com.pem这个key

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 delete volumes

登录上去之后,我们会发现19.56GB的root盘,就是之前的那块20G的EBS

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 delete volumes

如果是t1.micro这种类型的instance,使用了两块EBS的话,当使用df -h 命令后只看到/dev/xvda1这块EBS,再执行fdisk -l发现什么也没有,那是因为没有linux下的root权限,我们再执行:sudo fdisk -l就发现了/dev/xvda1:21.5GB的20G的EBS,还有/dev/xvdb:32.2GB的30G的EBS,但这个30GB的还没有格式化,所以不能使用如下图

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 delete volumes

如果是m1.small这种类型的instance的话,我们执行df -Th发现,除了20G的root盘外,还有一块是/dev/xvdc 这种ext3的147G的,它就是instance storage,并且开机自动挂载到了/mnt目录下,我们可以直接使用它,拼死的向里面读写数据,因为它是不收钱的,没有IO的费用。但stop,start instance之后,数据会丢失,前面也说过了,不适合安装数据库等持久化的存储

执行sudo fdisk -l 同样也可以发现30G的EBS和160G的instance storage 它除了/dev/xvdb:32.2GB的这块30G的EBS外,还有一块是:/dev/xvdc: 160.1GB就是实例存储。

alt sogego.com 和 phoneqq.com 基于Ubuntu,Tengine服务器构建Git管理NodeJs,Redis,MongoDB的网站 delete volumes

最后,我要说的是,虽然在上面我们提到过,如果使用两块以上的EBS的话,费用会增加,但如果你非要使用的话,就是上面讲的这些,接下来我们会格式化那块30G的EBS,来做为data的存储

本文完,可以转载,谢谢!

1 回复

赞!写的很详细,我实操一下。

回到顶部