一、操作

1.nuxt执行打包命令 npm run build

2.将build输出的文件夹 .output 的所有内容上传到服务器 /blog/nuxt-home

3.执行 npm install pm2 -g 安装pm2并配置 ecosystem.config.js

  // 配置pm2
  module.exports = {
    apps: [
      {
        name: "BlogHomeNuxt",
        exec_mode: "cluster",
        instances: "2",
        script: "output/server/index.mjs",
        args: "", // 传递给脚本的参数
        watch: true, // 开启监听文件变动重启
        ignore_watch: ["node_modules", "public", "logs"], // 不用监听的文件
        exec_mode: "fork",// 自家主机window cluster_mode 模式下启动失败
        instances: "2", // max表示最大的 应用启动实例个数,仅在 cluster 模式有效 默认为 fork
        autorestart: true, // 默认为 true, 发生异常的情况下自动重启
        max_memory_restart: "1G",
        // error_file: './logs/app-err.log', // 错误日志文件
        // out_file: './logs/app-out.log', // 正常日志文件
        merge_logs: true, // 设置追加日志而不是新建日志
        log_date_format: "YYYY-MM-DD HH:mm:ss", // 指定日志文件的时间格式
        min_uptime: "60s", // 应用运行少于时间被认为是异常启动
        max_restarts: 30, // 最大异常重启次数
        restart_delay: 60, // 异常重启情况下,延时重启时间
        env: {
          // 环境参数,当前指定为开发环境
          NODE_ENV: "development",
          PORT: "5050",
        },
        env_production: {
          // 环境参数,当前指定为生产环境
          NODE_ENV: "production", //使用production模式 pm2 start ecosystem.config.js --env production
          PORT: "5050",
        },
        env_test: {
          // 环境参数,当前为测试环境
          NODE_ENV: "test",
        },
      },
    ],
  };

4.编写 start-nuxt.sh 脚本

  #!/bin/bash
  

BUILD_ID=DONTKILLME

echo "pm2 starting"

pm2 start ecosystem.config.js --env production

echo "pm2 started"

5.在 /blog/nuxt-home下执行 sh start-nuxt.sh 即可 成功使用pm2启动nuxt服务

6.找到nginx.conf文件,修改默认访问网站配置

  # 博客前端
  location / {
     # root /blog/home/;
     # index /index.html;
     # try_files $uri $uri/  /index.html; 
     proxy_pass http://localhost:5050/;
  }

7.设置服务器重启自动启动服务

  1. 查看当前线程 pm2 list
  2. 保存当前线程 pm2 save
  3. 设置服务器开机自启 pm2 startup

常用pm2命令

// --name 别名
pm2 start main --name zone-server

二、相关注意事项

  1. 目前nuxt3服务器打包会造成内存溢出导致卡死
  2. pm2 部署nestjs服务时,有用到express-session时不能使用多核部署,防止多核时session不同步重写,导致首次访问session不存在问题。