[实战AWS EC2]一、基于Ubuntu,Tengine服务器构建Git管理Nodejs,Redis,MongoDB的网站

[实战AWS EC2]一、基于Ubuntu,Tengine服务器构建Git管理Nodejs,Redis,MongoDB的网站

**技术交流加入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的存储

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


3 回复

[实战AWS EC2]一、基于Ubuntu,Tengine服务器构建Git管理Nodejs,Redis,MongoDB的网站

技术交流加入QQ群:261654896

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

假设你已经拥有了一个AWS的账号,并且已经完成了信用卡验证。我们将以Ubuntu为例,逐步介绍如何在AWS EC2上搭建一个包含Node.js、Redis和MongoDB的网站。

选择Region

首先,在AWS控制台的右上角选择一个Ping值最高、速度最快的区域。这将影响你的服务器响应时间和延迟。

创建Key

接下来,我们需要创建一个Key对,用于SSH登录。选择NETWORK & SECURITY -> Key Pairs,点击Create Key Pair,并输入Key pair名称(例如:phoneqq.com)。保存生成的.pem文件到本地电脑上,确保安全存放。

创建EC2实例

  1. 选择INSTANCES -> Instances,点击Launch Instance
  2. Choose an Amazon Machine Image (AMI)步骤中,选择64位的Ubuntu Server 13.10。
  3. Choose an Instance Type步骤中,根据需求选择合适的实例类型。对于开发测试,可以考虑t1.micro;对于生产环境,推荐选择m1.small
  4. Configure Instance Details步骤中,选择VPC网络类型,并填写其他必要信息。
  5. Add Storage步骤中,配置根磁盘和其他附加磁盘的大小和类型。如果选择实例存储(Instance Store),则会在/dev/sdc下自动挂载。
  6. Tag Instance步骤中,可为实例添加标签以便识别。
  7. Configure Security Group步骤中,开放必要的端口,如80(HTTP)、3000(Node.js应用)、3001(另一个Node.js应用)、6379(Redis)、27017(MongoDB)等。
  8. 最后,选择之前创建的Key对,完成实例创建。

配置安全组

确保你的安全组配置允许必要的端口访问。例如:

  • HTTP(80端口)
  • Node.js应用(3000和3001端口)
  • Redis(6379端口)
  • MongoDB(27017端口)

访问EC2实例

通过Bitvise SSH或其他SSH客户端工具连接到EC2实例。输入之前创建的公网IP地址,并使用之前创建的.pem文件进行身份验证。

安装软件

连接到实例后,开始安装所需的软件和服务。例如:

# 更新系统包
sudo apt-get update
sudo apt-get upgrade

# 安装Node.js
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs

# 安装Redis
sudo apt-get install -y redis-server

# 安装MongoDB
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org

# 配置Tengine(Nginx)
sudo apt-get install -y nginx

启动服务

安装完成后,启动并启用上述服务:

sudo systemctl start nodejs-app
sudo systemctl enable nodejs-app
sudo systemctl start redis
sudo systemctl enable redis
sudo systemctl start mongod
sudo systemctl enable mongod

部署应用

将你的Node.js应用部署到服务器上。可以使用Git或其他版本控制系统来管理代码。

git clone https://github.com/your-repo/your-nodejs-app.git
cd your-nodejs-app
npm install

总结

以上步骤涵盖了在AWS EC2上基于Ubuntu搭建一个包含Node.js、Redis和MongoDB的网站的基本流程。通过合理配置安全组和选择适当的实例类型,可以确保系统的安全性及性能。


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


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

在这个帖子中,你将学习如何在AWS EC2上使用Ubuntu搭建一个包含Tengine、Git、Node.js、Redis和MongoDB的Web服务器。以下是搭建过程中涉及的关键步骤和代码示例:

1. 启动EC2实例

确保你在AWS控制台中选择了一个Ubuntu镜像,例如Ubuntu Server 13.10。

2. 配置安全组

确保开放以下端口:

  • HTTP (80)
  • Node.js 应用端口 (如 3000 和 3001)
  • Redis (6379)
  • MongoDB (27017)
sudo ufw allow 80
sudo ufw allow 3000
sudo ufw allow 3001
sudo ufw allow 6379
sudo ufw allow 27017

3. 安装必要的软件

sudo apt-get update
sudo apt-get install nginx tengine git nodejs redis-server mongodb

4. 配置Node.js应用

假设你已经通过Git克隆了一个Node.js项目到 /var/www/node-app,你可以启动应用:

cd /var/www/node-app
npm install
node app.js

5. 配置Tengine

编辑 /etc/nginx/sites-available/default 文件,配置反向代理指向Node.js应用。

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

6. 设置开机自启动

你可以使用pm2来管理Node.js应用,确保在系统重启后也能自动启动。

sudo npm install pm2 -g
pm2 start app.js
pm2 startup
sudo env PATH=$PATH:/usr/local/bin pm2 startup systemd -u ubuntu --hp /home/ubuntu
pm2 save

以上步骤将帮助你在AWS EC2上搭建一个基本的Web服务器,包含所有必需的服务。

回到顶部