阿里云ESC(ubuntu16.04) + node + pm2 + Nginx + mogodb 环境搭建

1、准备

阿里云服务器ESC,window客户端远程链接软件PUTTY,本次演示我的是mac ,所以可以直接打开终端输入相应命令行即可

2、链接ESC

1、ssh root@(ESC公网ip地址wwygxxxxxx)回车

2、输入实例登录密码

3、成功之后如下图(图1.png)

4、fdisk -l 可查看数据盘信息

5、df -h 查看硬盘使用情况

6、ctr + d 退出当前命令行环境
1.png

3、配置权限

   每次登录都使用root显然是不安全的,因为他是最高权限,有可能会造成误删 
   
   操作所以我们需要配置root以及应用账号

1、adduser yg 添加用户名然后添加这个用户登录的密码可以默认和实例登录密

   码一致, 然后成功后会提示输入一个名字(图2.png)

2、gpasswd -a yg sudo 给这个用户授权,yangguang这个用户他与sudo的角色调

   用系统命令这样就是具备了部分代理了超级权限才能够调用到的一些命令,但

   是必须输入密码,到这一步只是进入到了sudo这个组里边去,还没有完成

3、sudo visudo 然后在root下添加yg ALL(这条规则对所有数组生效)=(ALL(可

   以任何yg来执行命令):ALL(yg可以任何的组来执行命令)) ALL(这个规则适

   用于所有命令),其实就是yg这个用户只要提供密码他可以通过sodu和root一 
  
   样来运行任何root可以运行的命令,然后ctl+x,然后再按下sift+y保存,然后回车

   就好了
   
4、然后ssh yg@xxx即可登录

5、配置本地无密码SSH登录(未完成,太麻烦了,所以不想搞了)

   (1) 进入根目录pwd;查看是否有.ssh文件ls  -a;如果有cd .ssh进入,ls会看到

       id_rsa(私钥), id_rsa.pub(公钥),known_hosts这几个文件,没有的话就创建

   (2) cp id_rsa id_rsa_backup 复制文件

   (3) cp id_rsa.pub id_rsa_backup.pub 复制文件

   (4) 没有的.ssh文件的话新建 mkdir .ssh  ===>  生成公钥和私钥 ssh-keygen -

       t rsa -b 4096 -C 

       "邮箱"打印私钥cat id_rsa  打印公钥cat  id_rsa_pub (图3.png)
2.png

3.png

4、修改服务器默认登录端口,我们登录的时候默认不写是22为了安全要修改掉

1、ssh yg@xxx(服务器IP地址)  进入,进入目录修改配置目录 sudo vi /etc/ssh/sshd_config

2、把Port修改为0-39999即可一般推荐1024-3999

3、然后在最后一行输入AllowUser yg,然后按下esc,然后再shift+:来保存

4、然后重启sudo service ssh restart

5、然后登录的时候 ssh -p (修改的port) yg@xxx

6、当然这里变还可以做很多安全的的修改比如禁止root登录之类的

7、这里我本人为了方便记忆并没有修改还是原来的22

5、配置iptables(防火墙)和Fail2Ban增强安全性


sudo ufw status 查看状态  sudo ufw enable 开启  sudo ufw disable 关闭

1、新建iptables文件:sudo vi /etc/iptables.up.rules

1、-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  =>  允许所有建立起来的链接

2、-A OUTPUT -j ACCEPT  =>  允许所有出去的流量,可以设置一些特定的规则

3、-A  INPUT -p tcp --dport 443 -j ACCEPT  =>  允许http,https协议这种请求的链接

4、-A  INPUT -p tcp --dport 80 -j AXXEPT  =>  所有的网站理论上来说你访问一台服务器都是从80端

   口进的所以要让80端口量可进出

5、-A  INPUT  -p tcp -m state --state NEW --dport  22  -j ACCEPT   =>  为ssh这种登录方

   式建立通道

6、-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT   =>  允许外网(某台服务器上来pin到这台

   服务器上,方便我们来测试服务器有没有停机,网络不同,光缆断了)

7、-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7 

   记录下来被拒绝的请求对恶意访问网站的ip加以拦截

8、-A INPUT -p -tcp --dport 80 -i eth0 -m state NEW -m recent --set

9、-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --

   seconds 60 --  hitcount 150 -j DROP   =>  在60s内发出了超过150次的请求

12、拒绝其他所有进到服务器的流量

    -A INPUT -j REJECT 

    -A FORWAED -j REJECT 

    COMMIT提交 然后保存提交

13、写好之后需要告诉iptables这个文件是在哪里,没有任何输出则成功

    sudo iptables-restore < /etc/iptables.up.rules

14、查看防火墙有没有启动

    sudo ufw status  ===> Status: inactive未激活  Status: active已激活

15、sudo ufw enable 激活防火墙

16、防火墙建立起来之后我们需要把一些路径设置一下让他可以开机之后自动启动

    sudo vi /etc/network/if-up.d/iptables 

    #!/bin/sh  指定这是一个可执行的脚本

    sudo iptables-restore /etc/iptables.up.rules

    给这个脚本执行的权限 sudo chmod +x /etc/network/if-up.d/iptables

17、如果好几台服务器都是在内网在这中间呢需要开放一些数据库或者其他第三方端口的访问的时候规则也需要

    相应的添加,允许某个端口或者某个某个协议对外网开放或者某个ip段来开放这时候我们就配置好了iptables

6、接下来配置Fail2Ban

可以看作是一个防御性的动作库通过监控系统的监控文件,根据检测到的任何异常行为触发不同的防御行为

1、安装 sudo apt-get install fail2ban

2、打开配置文件 sudo vi /etc/fail2ban/jail.conf

3、bantime 设置为 3600(可选)

4、destemail 可以修改为自己的邮箱ygcode@foxmail.com

5、action = %(action_mw)s

6、查看fail2ban有没有运行 sudo service fail2ban status

7、sudo service fail2ban start/stop(开启/关掉)

8、升级更新ubantu   sudo apt-get update && sudo apt-get upgrade (可选)

9、sudo iptables -F 清空当前iptables的配置规则   (*filter 过滤)
4.png

7、搭建node环境生产环境

1、可以先更新一下系统(可选)sudo apt-get update

2、安装相关的模块如果安装失败可以尝试一个一个安装

       sudo apt-get install 

  (1)、vim 一个类似于Vi的著名的功能强大,高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性

  (2)、openssl 计算机网络上的一个开源软件包,可用来进行安全通信,避免窃听,确认另一端接受者身份,

        这个包呗广泛应用在互联网的网页服务包上

  (3)、build-essential  安装了该软件包编译c/c++所需的软件包也都会被安装,

        因此如果想再Ubuntu中编译c/c++程序只需要安装该软件包就可以了

  (4)、libssl-dev 

  (5)、curl  是一个利用URL语法在命令行下工作的文件传输工具

  (6)、git管理版本 部署项目的时候需要用到

  (7)、wget是一个从网络上自动下载文件的自由工具支持通过HTTP,HTTPS,FTP,

        三个常见的  TCP/IP协议下载,并可以使用HTTP代理,World Wide Web于get的结合

3、 使用wget安装nvm(github里边就有,node版本管理工具)

    wget -qOhttps://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh|bash

    安装成功后可nvm查看

4、使用nvm安装node (nvm install v10.13.0)  nvm use (版本号) nvm alias default (版本号)

   默认使用那个版本

5、下载源指定到cnpm  npm --registry=https://registry.npm.taobao.org install -g cnpm

6、增加文件监控数目

   echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

8、安装一些常用的工具包 cnpm i pm2 webpack gulp grunt-cli -g

1、用户根目录下我们先创建一个文件vi app.js, 创建完之后vi app.js也可以进入编辑然后在里边输入,
  
   输入完成后按esc退出编辑模式,shift + :保存然后wq!退出 node app.js测试

     const http = require('http')

      http.createServer(function(req,res){

         res.writeHead(200,{'Content-Type':'text/plain'}})

         res.end('测试')

      }).listen(80)

      console.log('-------')

3、node app.js启动失败可能是我们配置的防火墙有关 sudo vi /etc/iptables.up.rules打开

4、添加端口配置-A INPUT -p tcp --dport 8081 -j ACCEPT 然后重载防火墙配置

5、sudo iptables-restore < /etc/iptables.up.rules

7、如果我们的端口还是失败那么可以在esc里边配置安全组
5.png

8、使用pm2 让Nodejs服务常驻

pm2 start app就可以把这个服务跑起来,不仅可以常驻还可以在出现异常时重启

pm2 stop app 关掉

pm2 list 查看现在运行的node服务有哪些

pm2 show app 显示详细信息

pm2 logs 查看当前实时的日子

ctr + c 退出

9、配置Nginx反向代理Nodejs端口

通过nginx可以实现多个应用实现端口代理和负载均衡,自动判断来自那个域名和ip地址的访问,根据配置的规则将这请求原封不动的转发给特定端口或特定机器,在案例中我们将80端口的请求都转发到node启动的8081端口处理

1、预装了appache服务器先

2、关掉 sudo service apache2 stop

3、移除apache  sudo apt-get remove apache2

4、更新ngix  sudo apt-get install nginx

5、cd /etc/nginx/     

6、ls 查看是否存在conf.d文件夹

7、cd conf.d

8、然后新建一个配置文件 …

9、考虑到以后会添加多个项目负载均衡的场景配置如下

      upstream wwygcode(应用的名字) {

         server 127.0.0.1:8081;

       }

       server { 

          listen 80;

          server_name  http://xxx/;(这个也可以不带这个协议xxx)

           location / { 

                 proxy_set_header X-Real-IP $remote_addr;

                 proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;

                 proxy_set_header Host $http_host;

                 proxy_set_header X-Nginx-Proxy true;

                 proxy_pass http://wwygcode;// 把域名代理到集群上面或者应用名字上面

                 proxy_redirect off;

            } 

       }   

我的配置文件在wwygcode-com-8081.conf下

10、保存关闭回到上级目录 cd ..

11、进入文件 sudo vi nginx.conf

12、看到include /etc/nginx/conf.d/*.conf;代表会把conf.d下面的配置文件都加载进来

13、退出,然后测试配置文件看看写的对不对 sudo nginx -t(conf.d文件下)

14、sudo nginx -s reload ===> 重启nginx

15、配置完之后我们node app 后访问的就是app.js 输出的内容this is test....,而不是默认的ngix页面了

10、安装mogodb

1、登录服务器 ssh yg@xxx

2、https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

3、把1,2,3,4里边的东西复制粘贴到服务器打开的命令行理就行

   1.Create the data and log directories:

     Depending on user permissions, you may need to sudo mkdir
     -p <directory> instead of mkdir-p <directory>. Use or omit sudo 
     as appropriate. See your linux man pages for information on mkdir and sudo.

     Create a directory where the MongoDB instance stores its data. For example:

     **   sudo mkdir -p /data/db  ** 

     Create a directory where the MongoDB instance stores its log. For example:

     **   sudo mkdir -p /var/log/mongodb    ** 

     The user that starts the MongoDB process must have read and write permission to the directories.


   2.Run MongoDB:

     To run MongoDB, run the mongod
     (https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod "bin.mongod")
     process at the system prompt:
     
     **  sudo mongod --dbpath /data/db --logpath /var/log/mongodb/mongod.log --fork  ** 

     For details on the command-line options 
     --dbpath (https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-dbpath) and 
     --logpath(https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-logpath), 
     see Options(https://docs.mongodb.com/manual/reference/program/mongod/#mongod-options).

   3.Verify that MongoDB has started successfully:
     
     Verify that MongoDB has started successfully by checking the process output for the following line in the log 
     file /var/log/mongodb/mongod.log:

     [initandlisten] waiting for connections on port 27017

     You may see non-critical warnings in the process output. As long as you see the log line shown above, you 
     can safely ignore these warnings during your initial evaluation of MongoDB.

   4.Begin using MongoDB:

     Start a [`mongo`](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo 
     "bin.mongo") shell on the same host machine as the [`mongod`]
     (https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod "bin.mongod"). You can run 
     the [`mongo`](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo "bin.mongo") shell 
     without any command-line options to connect to a [`mongod`]
     (https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod "bin.mongod") that is running on 
     your localhost with default port 27017:

     **  mongo  **

     For more information on connecting using the [`mongo`]
     (https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo "bin.mongo") shell, such as to 
     connect to a [`mongod`](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod 
     "bin.mongod") instance running on a different host and/or port, see [The mongo Shell]
     (https://docs.mongodb.com/manual/mongo/).

     To help you start using MongoDB, MongoDB provides [Getting Started Guides]
     (https://docs.mongodb.com/manual/tutorial/getting-started/#getting-started) in various driver editions. 
     See [Getting Started](https://docs.mongodb.com/manual/tutorial/getting-started/#getting-started) for the 
     available editions.

4、在第四步安装的时候会很慢所以我们可以指定镜像

   cd 进入 /etc/apt/sources.list.d/mongodb-org-4.0.list

   pwd

   sudo vi mongodb-org-4.0.list  然后修改为https://mirrors.aliyun.com/mongodb/apt/ubuntu

   然后cd 回到根路径

   sudo apt-get update

   然后安装mogondb(第四步)

5、开启服务 sudo service mongod start 检查是否开启成功(cat /var/log/mongodb/mongod.log)

   mongo的时候会提示 connect failed,这是因为我们的防火墙配置的原因 

   sudo vi /etc/iptables.up.rules

   进入防火墙

   # mongodb connect

-A INPUT -s 127.0.0.1 -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT  进入流量可以冲27017端口进入到mongodb

-A OUTPUT -d 127.0.0.1 -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

然后载入 sudo iptables-restore < /etc/iptables.up.rules 然后在输入mongo就成功了

sudo service mongod stop (终止)sudo service mongod start/restart(开启/重启)

但是呢现在还有个问题就是mongodb默认是泡在27017端口上的我们需要改一下

修改默认端口  sudo vi /etc/mongod.conf 这里我改的是19999

修改之后我们mongo链接就失败了原因我们的防火墙没有更新,然后再链接是27017端口肯定是不行的我们需要指定端口 mongo --port 19999就成功了
6.png

11、为数据库配置读写权限

1、首先为mongodb设置一个超级权限

 (1)mongo --port 19999 进入数据库命令行环境

 (2)use admin 切换到这个数据库

 (3)给用户设置角色

      对整个mongodb的数据库设置一个超级权限,role那部分千万别敲错,这个管理员是可以管理所有数据库的

      db.createUser({user:'vue_ssr',pwd:'XXXX',roles:[{role:'userAdminAnyDatabase',db:'admin'}]}

      role:userAdminAnyDatabase(超级权限)readWrite(可读可写)read(读)

      让vue_ssr这个用户对admin数据库有超级权限

 (4)在admin的这个数据库下面对用户登录进行授权 db.auth('vue_ssr','XXXX')  回车为1成功
 
 (5)切换到admin下面通过超级管理员vue_ssr对其他数据库进行授权(想为一个数据库

      创建管理员首先需要到admin下通过超级管理员的认证授权)

      use admin 

      db.auth('vue_ssr','XXXX') 

      use vue_ssr(切换到其他数据库)

      db.createUser({user:'ygssr',pwd:'wwygxxxxxx',roles:[{role:'readWrite',db:'vue_ssr'}]})然后

      创建管理员

      db.createUser({user:'ygssrRead',pwd:'wwygxxxxxx',roles:[{role:'read',db:'vue_ssr'}]})然后

      可以创建一个备份管理员只读

      退出 exit

      这时候mongodb的用户虽然已经创建了但是还不能验证,因为没有把他的验证模式开起来

      下面是开启  

      sudo vi /etc/mongod.conf

      找到#security:把#去掉在下面写上

      authorization: 'enabled'  授权/开启

      sudo service mongod restart   重启monggodb,让配置生效

      mongo --port 19999

      show dbs 这时候就会报错这是因为我们没有权限执行脚本

      怎么做呢 use admin    db.auth('ygssr','wwygxxxxxx') 返回1  show  dbs列出数据库名称就ok了

      db.vue_ssr.insert({name:'aaa'})就ok了 

      访问具体某个数据库  mongo 127.0.0.1:19999/vue_ssr -u ygssr -p wwygxxxxxx

      show tables

      db.users.find({})    看看是否检索出来

      db.system.users.find();查看刚刚添加的所有用户
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容