Skip to content

node项目部署

Cookie的跨域问题

Cookie是不能跨域使用的,所以在前后端分离开发的时候,我们当前的代码就会出现问题

跨域(同源协议):

前端地址:http://127.0.0.1:3001

后端地址:http://127.0.0.1:3000

什么是跨域?

协议/一级域名/二级域名/端口号 有一个不同就是跨域

如何解决跨域问题

  1. 正向代理

代理服务器是为用户服务,我们称之为正向代理

例如:访问谷歌

如果访问不了谷歌,但是我们可以访问一台海外的服务器,这台海外的服务器又可以访问谷歌 ,那么用户就可以先访问海外的服务器,在通过海外的服务器访问谷歌,这就是正向代理

  • 用途:
  • 访问原来无法访问的资源,如google
  • 对客户端访问授权,上网认证
  1. 反向代理

反向代理服务器是为服务器服务,我们称之为反向代理

  • 用途:
  • 负载均衡,通过反向代理服务器来优化网站负载
  • 前后端分离,统一请求地址

PM2配置线上环境

安装

shell

npm i -g pm2

使用

shell
# 查看当前项目的版本
pm2 --version

# 启动项目

pm2 start app.js

常用指令

shell
# 启动程序
pm2 start app.js|config
# 列出启动的所有应用程序
pm2 list
# 重启应用程序
pm2 restart appName|appId
# 查看应用程序的详细信息
pm2 info appName|appId
# 显示指定应用程序的日志
pm2 log appName|appId # 如果是通过pm2来启动Node项目,那么会自动将console.log的内容记录到自定义日志
# 监控应用程序
pm2 monit appName|appId
# 停止应用程序
pm2 stop appName|appId
# 删除关闭应用程序
pm2 delete appName|appId

进程守护

问题

  • 服务器的稳定性,不会因为程序的某个错误或异常导致项目停止
  • 线上日志记录,除了记录访问日志以外,我们还需要记录错误日志和自定义日志
  • 充分利用服务器资源,Node是单线程的,服务器是多喝的,一台服务器只能运行一个Node程序太浪费资源

解决

通过Pm2

  • PM2的进程守护可以在程序崩溃后自动重启
  • PM2自带日志记录功能,可以很方便的记录错误日志和自定义日志
  • PM2能够启动多个Node进程,充分利用服务器资源

配置

自定义配置pm2配置文件

json
{
    "apps":{
        "name":"appName",
        "script":"app.js",
        // 是否需要监听报错重启
        "watch":true,
        // 那些文件不需要监听
        "ignore_watch":[
            "node_modules",
            "logs"
        ],
        // 配置错误日志的目录和文件
        "error_file":"logs/error.log",
        // 配置自定义日志的目录和文件
        "out_file":"logs/custom.log",
        // 配置日志显示输出年月日时分秒
        "log_date_format":"YYYY-MM-DD HH:mm:ss"
    }
}

  • 启动项目
shell
# 通过配置文件来启动项目
pm2 start pm2.config.json

负载均衡

在配置文件中开启多进程

json
{
    "apps":{
        "name":"appName",
        "script":"app.js",
        // 是否需要监听报错重启
        "watch":true,
        // 那些文件不需要监听
        "ignore_watch":[
            "node_modules",
            "logs"
        ],
        // 配置错误日志的目录和文件
        "error_file":"logs/error.log",
        // 配置自定义日志的目录和文件
        "out_file":"logs/custom.log",
        // 配置日志显示输出年月日时分秒
        "log_date_format":"YYYY-MM-DD HH:mm:ss",
        // 配置多进程
        "instances":4
    }
}

注意:

服务器几核就配置几个进程,不要超过服务器的内核数量

Released under the MIT License.