一、操作

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

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

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

    <details  data-line="4" class="md-editor-code">
      <summary class="md-editor-code-head">
        <div class="md-editor-code-flag"><span></span><span></span><span></span></div>
        <div class="md-editor-code-action">
          <span class="md-editor-code-lang">javascript</span>
          <span class="md-editor-copy-button" data-tips="复制代码">复制代码</span>
          
          <span class="md-editor-collapse-tips"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-chevron-left md-editor-icon"><circle cx="12" cy="12" r="10"/><path d="m14 16-4-4 4-4"/></svg></span>
        </div>
      </summary>
      <pre><code class="language-javascript" language=javascript><span class="md-editor-code-block">  <span class="hljs-comment">// 配置pm2</span>

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", }, }, ], };

    </details>
  <h3 data-line="45" id="4.编写 start-nuxt.sh 脚本">4.编写 <code>start-nuxt.sh</code> 脚本</h3>

    <details  data-line="46" class="md-editor-code" open="">
      <summary class="md-editor-code-head">
        <div class="md-editor-code-flag"><span></span><span></span><span></span></div>
        <div class="md-editor-code-action">
          <span class="md-editor-code-lang">shelll</span>
          <span class="md-editor-copy-button" data-tips="复制代码">复制代码</span>
          
          <span class="md-editor-collapse-tips"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-chevron-left md-editor-icon"><circle cx="12" cy="12" r="10"/><path d="m14 16-4-4 4-4"/></svg></span>
        </div>
      </summary>
      <pre><code class="language-shelll" language=shelll><span class="md-editor-code-block">  <span class="hljs-comment">#!/bin/bash</span>

BUILD_ID=DONTKILLME

echo "pm2 starting"

pm2 start ecosystem.config.js --env production

echo "pm2 started"

    </details>
  <h3 data-line="59" id="5.在 /blog/nuxt-home下执行 sh start-nuxt.sh 即可 成功使用pm2启动nuxt服务">5.<code>/blog/nuxt-home</code>下执行 <code>sh start-nuxt.sh</code> 即可 成功使用<code>pm2</code>启动<code>nuxt</code>服务</h3>

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

    <details  data-line="61" class="md-editor-code" open="">
      <summary class="md-editor-code-head">
        <div class="md-editor-code-flag"><span></span><span></span><span></span></div>
        <div class="md-editor-code-action">
          <span class="md-editor-code-lang">shelll</span>
          <span class="md-editor-copy-button" data-tips="复制代码">复制代码</span>
          
          <span class="md-editor-collapse-tips"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-chevron-left md-editor-icon"><circle cx="12" cy="12" r="10"/><path d="m14 16-4-4 4-4"/></svg></span>
        </div>
      </summary>
      <pre><code class="language-shelll" language=shelll><span class="md-editor-code-block">  <span class="hljs-comment"># 博客前端</span>

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

    </details>
  <h3 data-line="71" id="7.设置服务器重启自动启动服务">7.设置服务器重启自动启动服务</h3>
  1. 查看当前线程 pm2 list
  2. 保存当前线程 pm2 save
  3. 设置服务器开机自启 pm2 startup

常用pm2命令

    <details  data-line="77" class="md-editor-code" open="">
      <summary class="md-editor-code-head">
        <div class="md-editor-code-flag"><span></span><span></span><span></span></div>
        <div class="md-editor-code-action">
          <span class="md-editor-code-lang">shell</span>
          <span class="md-editor-copy-button" data-tips="复制代码">复制代码</span>
          
          <span class="md-editor-collapse-tips"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-chevron-left md-editor-icon"><circle cx="12" cy="12" r="10"/><path d="m14 16-4-4 4-4"/></svg></span>
        </div>
      </summary>
      <pre><code class="language-shell" language=shell><span class="md-editor-code-block">// --name 别名

pm2 start main --name zone-server

    </details>
  <h2 data-line="82" id="二、相关注意事项">二、相关注意事项</h2>
  1. 目前nuxt3服务器打包会造成内存溢出导致卡死
  2. pm2 部署nestjs服务时,有用到express-session时不能使用多核部署,防止多核时session不同步重写,导致首次访问session不存在问题。
  3. pm2重启blog-server一直launching 执行pm2 update重新启动就行