阿里云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 可以修改为自己的邮箱[email protected]

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  instead of mkdir-p . 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();查看刚刚添加的所有用户

你可能感兴趣的:(阿里云ESC(ubuntu16.04) + node + pm2 + Nginx + mogodb 环境搭建)