用MongoDB和AWS云容器构建一个NodeJS APP-部分1

Posted 前端手艺人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用MongoDB和AWS云容器构建一个NodeJS APP-部分1相关的知识,希望对你有一定的参考价值。

前言

mongodb是一个分布式文件存储的数据库(非关系型数据库) AWS云容器是亚马逊的云服务机器。

现在因为有云服务,构建一个app很快速和方便:不用担心Linux机子挂了,甚至不用SSH到这些机子。

在这两个部分,我会介绍怎么用MongoDb和Amazon EC2 Container Service (ECS)构建一个Node.js APP。

第一部分: 1 如何用Docker部署app应用 2 构建一个MongoDB连接 3 连接到一个Node.js APP进行CRUD操作 4 本地开发环境启动

第二部分:会讲如何在Linux的AWS容器跑APP。

两个部分结束后,你会知道怎么开始Node.js应用,知道如何构建MongoDB容器,如何用AWS部署应用。

Docker的快速介绍

Docker让开发者更快速地在不同环境部署应用,分发应用。

什么是容器?Docker官网上是这么定义的: 一种打包软件的方式,这种方式可以让它独立运行在共享系统上。并且可以让你的应用运行在一个独立资源进程中。用了容器,你可以方便地打包应用,配置依赖。这样就保证了你部署更快,更可靠,并且不用考虑开发环境,而专注于构建你的APP。并且容器更容易管理微服务,并且支持持续集成和敏捷开发的工作流,对生产环境影响小。

开始

我们要用mern-crud:https://github.com/cefjoeii/mern-crud(用了MongoDB, Express.js, React.js, and Node.js ),快速地构建一个记录系统。我们会在AWS云平台结合多个服务构建一个功能完整的,容器化的应用,支持负载均衡和自动扩展。我们的前端代码会运行在:Amazon EC2 Container Service (ECS)

第一部分,我们要配置我们的环境。用本地的工作环境构建应用。会展示如何用Node.js和MongoDB。第二部分,会把我们的代码用coldbrew-cli工具(一个命令行工具)部署到ECS。

以下是我们的准备工作:

1 AWS账户: https://aws.amazon.com/cn/

2 IAM Access Key https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html

3 coldbrew-cli https://github.com/coldbrewcloud/coldbrew-cli

3 MongoDB Atlas Cluster https://www.mongodb.com/cloud/atlas?utmmedium=dw-synd&utmsource=dw&utm_content=container1&jmp=dw-ref 用免费的就行:

4 Docker (本地电脑部署) https://www.docker.com/

5 mern-crud github仓库 https://github.com/cefjoeii/mern-crud

用MongoDB和AWS云容器构建一个NodeJS APP-部分1

6 安装git 

7 安装Node.js v6.11.2 Amazon EC2 Container Service (ECS)允许我们用AWS管理面板,部署和管理我们的Docker实例。在说明它如何工作之前,我建议阅读:https://github.com/abby-fuller/ecs-demo(如何开始ECS的介绍文章),它介绍了Docker部署各个部分以及他们是如何工作的保证你可复用和可扩展你的应用的。

配置AWS和codebrew-cli和AWS环境变量

开始前要登录你的AWS账号,创建你的Identity and Access Management (IAM) keys。你可以通过codebrew-cli文档看下它的所有权限列表: https://github.com/coldbrewcloud/coldbrew-cli/wiki/AWS-IAM-Policies。 IAM keys是用来认证你的你AWS API操作的,我们可以导出这些keys作为环境变量。我们用的是coldbrew-cli 命令(上面有介绍它是一个命令行工具):

 
   
   
 
  1. export AWS_ACCESS_KEY_ID="PROVIDEDBYAWS

  2. export AWS_SECRET_ACCESS_KEY="PROVIDEDBYAWS

弄好以后,我们就有权限用coldbrew-cli创建我的一些基础东西。

开始coldbrew-cli

coldbrew-cli是一个部署AWS的Docker容器。它省略了很多步骤:创建Docker镜像,创建环境,自动扩展AWS组上的Node.js服务器。最重要的是它是便携式的和可扩展的。 coldbrew文档上说:coldbrew操作两个部分:应用和集群。 

1 应用是部署的最小单元 

2 一个或多个应用可以部署在集群上,它们共享电脑资源

我们会用很多工具去简化一个写公共的任务来创建一个生产级别的ECS集群。会做一下几个部分:

1 创建一个VPC:https://aws.amazon.com/cn/vpc/

用MongoDB和AWS云容器构建一个NodeJS APP-部分1

2 创建 Security Groups https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html

3 配置: Elastic Load Balancing & Auto Scaling Groups 4 构建Docker容器 5 构建Docker镜像 6 把Docker镜像推到ECR仓库 7 部署镜像到容器

安装coldbrew-cli: 到这里下载安装包:https://github.com/coldbrewcloud/coldbrew-cli/wiki/Downloads 然后部署到环境变量$PATH

 
   
   
 
  1. $ which coldbrew

  2. 'usr/local/bin/coldbrew

准备好我们的APP和MongodB

ECS运行门额运行一个前端无状态应用。我们的所有数据都将存在MongdoDB Atlas上。我们会创建我们的数据库集群,并连接到我们的应用。我们用coldbrew去管理部署新版本应用。

你的Atlas集群

创建一个Atlas集群很简单,看我们的视频:https://www.youtube.com/watch?v=_d8CBOtadRA

集群建好以后:https://docs.atlas.mongodb.com/setup-cluster-security/?utmmedium=dw-synd&utmsource=dw&utm_content=container1&jmp=dw-ref 通过这个文档创建白名单。这样我们可以存数据到MongoDB.

用MongoDB和AWS云容器构建一个NodeJS APP-部分1

下载和配置你的APP

 
   
   
 
  1. $ git clone git@github.com:cefjoeii/mern-crud.git

  2. Cloning into 'mern-crud'...

  3. remote: Counting objects: 303, done.

  4. remote: Total 303 (delta 0), reused 0 (delta 0), pack-reused 303

  5. Receiving objects: 100% (303/303), 3.25 MiB | 0 bytes/s, done.

  6. Resolving deltas: 100% (128/128), done.

然后看一下代码:

用MongoDB和AWS云容器构建一个NodeJS APP-部分1

server.js依赖数据库配置(config/db.js文件)。

APP安全配置

我们创建一个基础的用户用去保证我们不是具有数据库的管理权限。所有基础用户能读和写就行。 在 MongoDB Atlas UI,点击“Security”选项,然后点击:MongoDB Users

然后点击Add new user ,创建一个可读和可写的用户:

用MongoDB和AWS云容器构建一个NodeJS APP-部分1

1 输入用户名 

2 点击:Show Advanced Options

3 在Database区域选择“merndb” 再选择readWrite,“collection”留空

4 创建一个密码

5 点击"Add User"

连接我们的应用

在Atlas的“Clusters”区域,点击“Connect”按钮

这个区域提供了一些白名单和方法连接到你的集群。我们选择:”Connect Your Application“,复制连接字符串。默认的连接字符串:

 
   
   
 
  1. mongodb://<font color="red">mernuser:demopass</font>@mern-demo-shard-00-00-x8fks.mongodb.net:27017,mern-demo-shard-00-01-x8fks.mongodb.net:27017,mern-demo-shard-00-02-x8fks.mongodb.net:27017/<font color="red">merndb</font>?ssl=true&replicaSet=mern-demo-shard-0&authSource=admin

需我们改动下,名字和密码用我们之前创建的账户替换,而且必须具体化我们的merndb数据库

我们把连接字符串放到:config/db.js

用MongoDB和AWS云容器构建一个NodeJS APP-部分1

然后安装包:npm install

把我们本地的IP设置为白名单,这样我们就可以连接到数据库了:在MongoDB Atlas UI 点击CONNECT,选择MongoDB Atlas UI

测试一下是否按预期跑起来了

 
   
   
 
  1. $ npm start

  2. > mern-crud@0.1.0 start /Users/jaygordon/work/mern-crud

  3. > node server

  4. Listening on port 3000

  5. Socket mYwXzo4aovoTJhbRAAAA connected.

  6. Online: 1

  7. Connected to the database.

浏览器上一下:打开http://localhost:3000

下面一个部分就是如何用coldbrew-cli部署了。

如果你对mongodb部署:可以看看这个: free tier:https://www.mongodb.com/cloud/atlas?utmmedium=dw-synd&utmsource=dw&utmcontent=container1&jmp=dw-ref 和https://www.mongodb.com/cloud/atlas/lp/compare/mlab?utmmedium=dw-synd&utmsource=dw&utmcontent=container1&jmp=dw-ref(如何开始3个月的免费服务)

今天的内容就是这样,感谢阅读。

更多内容,点击阅读原文:

以上是关于用MongoDB和AWS云容器构建一个NodeJS APP-部分1的主要内容,如果未能解决你的问题,请参考以下文章

在 aws 上部署使用 mongodb 的节点 js 应用程序

云数据库 Top 12:AWS甲骨文MongoDB微软和谷歌领导者;Redis Labs阿里SAPIBM 强劲表现者

AWS 上的 Node js 和 MongoDB 应用程序

AWS 云技术专栏系列文章

2019年云计算第一撕:AWS为什么和MongoDB怼上?

在单独的 docker 容器 (AWS ECS) 中连接到 MongoDB