nodejs+nginx+mongoDB部署项目学习笔记

1、配置用户权限
https://www.digitalocean.com/community/tutorials/how-to-create-a-sudo-user-on-centos-quickstart
新服务器按照上述配置完成后,vim /etc/sudoers 把%wheel ALL=(ALL) ALL前面的注释符号去掉

2、挂载磁盘
http://blog.csdn.net/miniminixu/article/details/78573943

3、开启免密登录
http://blog.csdn.net/miniminixu/article/details/78574179

4、修改服务器默认端口增强安全防护

>sudo vi /etc/ssh/sshd_config   #将port 22改为10000-65536之间,确认useDNS 是no,最末增加一行 AllowUsers imooc_manager
>sudo service sshd restart #重启ssh服务

如果是阿里云的云服务器,设置安全组规则https://yq.aliyun.com/articles/168203

5、关闭root密码登录增强安全防护

>sudo vi /etc/ssh/sshd_config #将permitRootLogin改为no,PasswordAuthentication改为no,PermitEmptyPasswords改为no
>sudo service sshd restart #重启ssh服务

6、配置 iptables(防火墙) 和 Fail2Ban 增强安全防护
清空iptables规则

>sudo iptables -F

配置留白

7、搭建服务器Nodejs环境
(1)更新服务器环境

>sudo yum update        #安装系统补丁
>sudo yum install vim openssl build-essential libssl-dev wget curl git#装服务器必备的一些东西,无论项目是否需要可以一起安装掉

遇到问题:
这里写图片描述
解决办法:暂不考虑解决,可直接往下走

(2)安装nvm(nodejs版本管理工具)

>wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash

(3)安装nodejs
新开一个终端连上服务器

>nvm install v6.9.5
#指定nodejs版本
>nvm use v6.9.5
>nvm alias default v6.9.5
#检查nodejs版本
>node -v
#将npm下载源指定为淘宝镜像(防止下的东西被墙)
>npm --registry=https://registry.npm.taobao.org install -g npm

#系统文件数限制放大一些,一般不用设置,可以先设置避免后面有问题
>echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
#安装cnpm
>npm --registry=https://registry.npm.taobao.org install -g cnpm
#将koa模块强制同步到国内镜像,koa是nodejs框架
>cnpm sync koa
#常用全局工具包的安装,未必用的上,先装
>npm i pm2 webpack gulp grunt-cli -g

(试运行)在当前用户目录下(连上终端的默认目录)新建app.js,输入以下内容

const http=require('http')
http.createServer(function(req,res){
  res.writeHead(200,{'Content-Type':'text/plain;charset=utf-8'})
  res.end('来自慕课的力量')
}).listen(8081)
console.log('server running on http://139.224.119.134:8081/')

保存后去阿里云安全组中添加8081端口策略,参考步骤4。完成后运行命令

>node app.js
#打开http://139.224.119.134:8081,已有内容输出

(4)用pm2让node服务常驻

>npm install pm2 -g
>pm2 start app.js

8、配置Nginx反向代理Nodejs端口
(1)确认停止apache服务,以及删除apache(因为 Apache 可能会占用 80 端口,这样的话,会导致 Nginx 启动失败,并不是一定要删,也可以停掉服务的。另外,如果 SSL 证书想要在本机手动生成的话,可能需要暴露服务给外面,这时候 Apache 默认的服务(如果不小心启动)会导致生成失败)

>sudo service apache2 stop 
>sudo yum remove apache2

(2)安装配置nginx

>sudo yum install nginx   #此步骤前把/etc/resolv.conf中 nameserver 8.8.8.8 nameserver 8.8.4.4改回nameserver 100.100.2.136 nameserver 100.100.2.138了
>cd /etc/nginx/conf.d
>sudo vi minixu-site-8081.conf

写入:

upstream imooc{
  server 127.0.0.1:8081;
}

server {
  listen 80;
  server_name 139.224.119.134;

  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://imooc;
    proxy_redirect off;

  }
}
>cd /etc/nginx
>sudo nginx -t

发生报错:
nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol
解决办法:

>cd /etc/nginx/conf.d
>sudo chmod a+w default.conf
>sudo vi default.conf
把listen       [::]:80 default_server;注释掉
>cd /etc/nginx
>sudo nginx -t
>sudo nginx -s reload    #重启nginx服务

发生报错:
nginx: [error] invalid PID number “” in “/run/nginx.pid”
解决办法:

>sudo nginx -c /etc/nginx/nginx.conf
>sudo nginx -s reload

隐藏请求头信息中nginx的版本号

>sudo vi /etc/nginx/nginx.conf
在http{}中加上一句 server_tokens off;

9、域名解析
(1)购买域名、域名备案
(2)去阿里云域名控制台添加A记录
(3)去阿里云对象存储控制台进行域名管理,会自动增加CNAME记录

10、安装mongodb
导入导出备份数据等操作命令–留白

11、向服务器正式部署和发布上线Nodejs项目
(1)上传项目代码到线上私有 Git 仓库,这里用码云
注册码云、创建项目仓库、具体git命令看git使用笔记
将本地代码提交到码云后,试一下在服务器上将项目clone下来,没有问题就ok
(2)在server项目根目录下,创建一个pm2配置文件ecosystem.json

{
  "apps": [
    {
      "name": "Website",
      "script": "app.js",                   //项目入口文件名
      "env": {
        "COMMON_VARIABLE": "true"
      },
      "env_production": {
        "NODE_ENV": "production"
      }
    }
  ],
  "deploy": {
    "production": {                     //服务器主机名
      "user": "imooc_manager",          //服务器用户名
      "host": ["139.224.119.134"],          //服务器IP
      "port": "39999",                  //服务器端口号
      "ref": "origin/master",               //仓库分支
      "repo": "git@gitee.com:minixu/backend-website.git",       //仓库地址
      "path": "/www/website/production",    //生产环境部署目录
      "ssh_options": "StrictHostKeyChecking=no",
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}
#配置完后去服务器的根目录下执行命令
>sudo mkdir www
#进入www目录
>sudo mkdir website
#然后赋予该目录写权限
>sudo chmod -R 777 website/
#然后在本地server目录下执行pm2启动命令
#初始化
>pm2 deploy ecosystem.json production setup
#部署,先确认ecosystem.json已经提交到远程仓库
>pm2 deploy ecosystem.json production
#检查
>pm2 list

(3)修改nginx配置,配置文件都存在下面这个目录

>cd /etc/nginx/conf.d/

编辑内容如下:

upstream website{
  server 127.0.0.1:3000;#端口号和app.js启动的端口一致
}
server {
  listen 80;
  server_name 139.224.119.134;  #有域名了可以改成域名

  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://website;              #//后面的值和upstream后面定义的一致
    proxy_redirect off;
  }
}

(4)由于没配置iptables这里不用开端口了,安全部分留白
(5)修改代码线上同步流程:
本地修改代码并且push到远程仓库,在本地执行以下命令通知服务器更新

>pm2 deploy ecosystem.json production
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值