不要羡慕别人的精彩,走好自己的路就好,一份付出,一份收获,相信自己能行,并坚持到底。

Nuxt2项目部署方案

小紫念沁
Java
2022-12-21
1628字
大约5.43分钟
52
Nust.js 通过在`nuxt.config.js`文件配置 ssr:true,开启 SSR 支持,ssr:false 关闭 SSR 支持,即支持 SPA(原属性`mode`已过期),可以根据项目实际情况开启 ssr 或关闭 ssr。如果开通 SSR 功能,通过 npm run build 进行打包后,项目部署需要服务端环境支持,如果没有开通 SSR 功能,通过 npm run build 进行打包后,项目部署和普通的 vue 项目部署方式一致。当然 nuxt 可以通过 npm run generate 命令打包成静态页面,支持静态站点部署,但静态站点不支持 SSR。

Nuxt.js 项目打包完成后,可以通过命令npm run start进行启动运行,进程是前台运行,会占用当前命令窗口,但当我们通过Ctrl+C关闭时,当前程序进程会被关闭,程序终止运行,所以需要后台进行运行进程。本文主要讲述 Nuxt SSR 项目常用的 2 中部署方式:nohup &pm2。当然前提是需要安装 Node 环境,如果未安装 Node 环境,请参考:Node 环境安装。无论那种方式均需要上传以下文件至服务器:.nuxt,static,package.json,package-lock.json,nuxt.config.js

一、nohup 方式后台运行

 nohup 命令的一般格式为:nohup yourcommand &,我们通过启动命令:nohup npm run start &来后台运行 nuxt ssr 项目。ohup 命令:nohup 是不挂断的意思( no hang up)。如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用 nohup 命令。该命令忽略所有挂(SIGHUP)信号,可以在你退出帐户/关闭终端之后继续运行相应的进程。&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出. nohup 与&结合起来,可以实现不挂断的后台运行。相关nohup命令用法,请参考:nohup 不挂断运行

1、通过npm run build命令编译打包。
2、将打包后的文件.nuxt,static,package.json,package-lock.json,nuxt.config.js上传至服务器预设目录下。注意: 如果开发了server(服务端)代码,部署是server文件目录也需要上传
3、安装依赖包:npm install
5、启动项目:nohup npm run start &

nohup npm run start &

6、查看后台运行进程

# 查看后台运行的所有进程
jobs
# 查看后台运行的所有进程,包含进程pid
jobs -l
或者
ps -ef | grep npm
ps -ef | grep node

后台进程正常运行表示程序已启动,nohup 默认日志文件名为nohup.out,可以通过此文件查看项目是否运行正常,或者通过tail命令跟踪运行日志,详情参考:

二、pm2 方式部署

pm2 是一个进程管理工具,可以用它来管理你的 node 进程,并查看 node 进程的状态,当然也支持性能监控,进程守护,负载均衡等功能。详情参考:pm2 官网

1、在项目根目录下创建文件ecosystem.config.js,并根据自己项目情况进行配置:

#pm2实例配置:ecosystem.config.js
module.exports = {
  apps: [
    {
      #实例名称
      name: 'NuxtRmbRate',
      #部署模式,单机:'fork',集群:'cluster'
      exec_mode: 'fork',
      #实例数目
      instances: '1',
      #需要执行的脚本文件,对于普通的nuxt项目(没有server),一般采用nuxt start命令,用pm2执行时需要修改成./node-modules/nuxt/dist/bin/nuxt.js,否则报错
      script: 'server/index.js',
      #应用程序所在的目录
      cwd: '',
      # 传递给脚本的参数,例如nuxt start命令,参数为start
      args: '',
      # 完整日志路径
      output: 'log/output.log',
      # 错误日志路径
      error: 'log/error.log',
      # 访问日志路径
      log: 'log/access.log',
      # 日志格式
      log_type: 'json',
      # 合并日志
      merge_logs: true,
      # 日志日期格式
      log_date_format: 'YYYY-MM-DD HH:mm:ss',
       # 最小运行时间,这里设置的是60s即如果应用程序在* 60s内退出,pm2会认为程序异常退出,此时触发重启* max_restarts设置数量,应用运行少于时间被认为是异常启动
      min_uptime: '60s',
      # 设置应用程序异常退出重启的次数,默认15次(从0开始计数),最大异常重启次数,即小于min_uptime运行时间重启次数;
      max_restarts: 10,
      # 启用/禁用应用程序崩溃或退出时自动重启,默认为true, 发生异常的情况下自动重启
      autorestart: true,
      # 异常重启情况下,延时重启时间
      restart_delay: 30,
      #生产环境配置
      env_prod: {
        # 环境参数,当前指定为生产环境
        NODE_ENV: 'production'
      }
    }
  ]
}

其他配置项如下:

name 应用进程名称;

script 启动脚本路径;

cwd 应用启动的路径,关于 script 与 cwd 的区别举例说明:在/home/polo/目录下运行/data/release/node/index.js,此处 script 为/data/release/node/index.js,cwd 为/home/polo/;

args 传递给脚本的参数;

interpreter 指定的脚本解释器;

interpreter_args 传递给解释器的参数;

instances 应用启动实例个数,仅在 cluster 模式有效,默认为 fork;

exec_mode 应用启动模式,支持 fork 和 cluster 模式;

watch 监听重启,启用情况下,文件夹或子文件夹下变化应用自动重启;

ignore_watch 忽略监听的文件夹,支持正则表达式;

max_memory_restart 最大内存限制数,超出自动重启;

env 环境变量,object 类型,如{"NODE_ENV":"production", "ID": "42"};

log_date_format 指定日志日期格式,如 YYYY-MM-DD HH:mm:ss;

error_file 记录标准错误流,$HOME/.pm2/logs/XXXerr.log),代码错误可在此文件查找;

out_file 记录标准输出流,$HOME/.pm2/logs/XXXout.log),如应用打印大量的标准输出,会导致 pm2 日志过大;

min_uptime 应用运行少于时间被认为是异常启动;

max_restarts 最大异常重启次数,即小于 min_uptime 运行时间重启次数;

autorestart 默认为 true, 发生异常的情况下自动重启;

cron_restart crontab 时间格式重启应用,目前只支持 cluster 模式;

force 默认 false,如果 true,可以重复启动一个脚本。pm2 不建议这么做;

restart_delay 异常重启情况下,延时重启时间;

注意: 设置环境变量时需要以env_开头,详细参考:https:#pm2.keymetrics.io/docs/usage/environment/。例如设置了环境变量env_production,采用 pm2 启动时如下:pm2 start ecosystem.config.js --env production

2、项目打包:npm run build

npm run build

3、将打包后的文件.nuxt,static,package.json,package-lock.json,nuxt.config.js,ecosystem.config.js上传至服务器预设目录下,例如:/opt/pm2。 如果开发了server(服务端)代码,部署是server文件目录也需要上传
4、安装依赖包:npm install

npm install

5、启动项目:pm2 start ecosystem.config.js

pm2 start ecosystem.config.js

6、查看 pm2 项目实例列表:pm2 list

pm2 list

结果如下图,status:online 表示项目正在运行。

7、查看项目运行日志:pm2 logs id 或者查看 logs 日志文件查看日志。

pm2 logs 0

8、其他命令

#停止实例
pm2 stop id/实例名称
#删除实例
pm2 delete id/实例名称
#重启实例
pm2 restart id/实例名称

其他pm2命令请参考:pm2 进程管理工具

更新时间:2023-06-05T12:36:48
文章目录