美文网首页我爱编程
AWS EC2配置Node线上环境

AWS EC2配置Node线上环境

作者: Devildi已被占用 | 来源:发表于2018-03-04 09:16 被阅读0次

本地的Webapp搭建完成,自然要送到外网上,是骡子是马遛一遛先,于是自然而然地选择了拥有一年免费试用权的AWS EC2服务器。闲话少叙,直接上配置(账号申请步骤略去,只需要有有效的Email、信用卡和手机号即可):

一 初见EC2

  1. 进入EC2控制台后,首先选择EC2节点的地域,目测并没有中国相关的可以选,我先选择了新加坡节点,后来发现并不好用,于是选择了首尔节点。


    选择区域
  2. 依次完成以下步骤:


    启动实例
  3. 选择实例类型


    选择实例类型
    默认走起
    点击启动
  4. 配置秘钥


    选择“创建新密钥对”
    填写密钥对名称并下载,然后启动实例
    wellDone
    可以查看实例状态

    至此,免费的EC2实例搞定!

二 配置EC2

  1. 连接EC2
chmod 400 devildi.pem

ssh -i "devildi.pem" ec2-user@ec2-13-124-88-25.ap-northeast-2.compute.amazonaws.com
  1. 安装nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash

source ~/.bashrc

nvm install 8
  1. 安装配置Nginx
//安装
sudo yum install nginx
//配置

cd /etc/nginx 
sudo vim nginx.conf

//配置http反向代理
server {
       listen 80 default_server;
       listen [::]:80 default_server;
       server_name nextsticker.cn;
       root /home/ec2-user/mywork/build;
       index index.html index.htm;
       location / {
           try_files $uri /index.html =404 ;
           add_header   Cache-Control no-cache;
           expires      1d;
       }
       location /api/ {
           proxy_pass http://127.0.0.1:4000;
       }
      }

//配置https
server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  nextsticker.cn;
        root        /home/ec2-user/mywork/build;//静态文件的位置

        ssl_certificate "/home/ec2-user/mywork_backend/Nginx/nextsticker.cn.pem";
        ssl_certificate_key "/home/ec2-user/mywork_backend/Nginx/nextsticker.cn.key";
#        # It is *strongly* recommended to generate unique DH parameters
#        # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
#        #ssl_dhparam "/etc/pki/nginx/dhparams.pem";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
        ssl_prefer_server_ciphers on;
        include /etc/nginx/default.d/*.conf;
         location / {
           index  index.html index.htm;
           try_files $uri /index.html =404 ;
           add_header   Cache-Control no-cache;
           expires      1d;
        }
        location /api/ {
           proxy_pass http://127.0.0.1:4000;
       }
  }

//重启Nginx
sudo service nginx restart
  1. 安装git并clone项目
sudo yum install git
git clone https://github.com/devildi/nt-koa.git
  1. 安装配置mongodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.2.7.tgz
tar -zxvf mongodb-linux-x86_64-amazon-3.2.7.tgz
mkdir -p mongodb/data
mkdir -p mongodb/log
touch /home/ec2-user/mongodb/log/master.log
touch /home/ec2-user/mongodb/master.pid
cd mongodb-linux-x86_64-amazon-3.2.7
sudo vim config.conf

//在config.conf文件中编辑
dbpath=/home/ec2-user/mongodb/data
logpath=/home/ec2-user/mongodb/log/master.log  
pidfilepath=/home/ec2-user/mongodb/master.pid  
directoryperdb=true  
logappend=true  
#replSet=testrs  
bind_ip=127.0.0.1
port=27017  
oplogSize=10000  
fork=true  
noprealloc=true  

//启动mongod服务
./bin/mongod -f config.conf

//数据迁移
./mongorestore -h 127.0.0.1 -d nt /home/ec2-user/nt-koa/dump/nt/routes.bson
  1. 安装PM2
npm install pm2 -g

pm2 start app.js -i max//启动服务
  1. 配置EC2 入口策略
    选择安全组


    选择安全组

    添加策略


    添加策略
  2. 阿里云域名解析
    11.11买的域名,一年十几块钱:


    阿里云注册域名

三 大功告成

浏览器输入nextsticker.cn或者https://nextsticker.cn,成功访问!

大功告成!

附录

将本地项目上传至github

  1. 删除本地仓库rm -rf .git
  2. 在本地项目根目录下git init
  3. git add .
  4. git status
  5. git commit,若出现了很多红色文件,那么就需再次进git add .
  6. git remote add origin+这个项目的github地址 ,当出现fatal: remote origin already exists.时,使用此命令git remote rm origin即可
  7. git push -u origin master

搞定收工!

为mongodb增加安全措施

部署于AWS EC2的mongodb中的数据“离奇失踪”了,但是多了一份Readme数据表,打开一看:

勒索文件
结合搜索引擎的结果来看,我的部署在公网的裸奔数据库怕是受到攻击了,于是亡羊补牢:为mongodb添加用户权限。
  1. 修改ip地址
    默认值(0.0.0.0)是所有的IP地址都能访问,该参数指定MongoDB对外提供服务的绑定IP地址,用于监听客户端 Application的连接,客户端只能使用绑定的IP地址才能访问mongod,其他IP地址是无法访问的。
    config.conf中修改bind_ip=127.0.0.1
  2. 修改默认mongodb TCP端口
    登录时需要./bin/mongo -port ****
  3. 创建管理员用户
#登录数据库后
use admin
db.createUser({user:"devildi", pwd:"******",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

其中,userAdminAnyDatabase为授予在所有数据库上管理User的权限,然后在admin库下进行授权:db.auth('devildi','******'),当返回值为1时,就可以对其他业务数据库授权了。

  1. 创建单个数据库管理员
db.createUser({user:"woody", pwd:"******",roles:[{role:"readWrite",db:"nt"}]})
#即用户woody对nt数据库有读写权限
  1. 开启权限认证
    config.conf中添加auth=true
  2. 重启mongod服务
pkill mongod
./bin/mongod -f config.conf
  1. 登录nt数据库
mongo 127.0.0.1:27017/nt -u woody -p ******

通过PM2脚本启动node服务

//在production.yaml中编辑:
apps:
  - script: ./SSR/server.js
    name: woody 
    env_production:
      NODE_ENV: production
      HOST: localhost

之后可以通过pm2 start production.yaml命令启动脚本。pm2

相关文章

网友评论

    本文标题:AWS EC2配置Node线上环境

    本文链接:https://www.haomeiwen.com/subject/ryhxfftx.html