pm2部署nuxt3项目

news2024/10/7 10:23:29

pm2部署nuxt3项目

阅读时长:8分钟

本文内容:本文其实前面开发AI数字人网站的延续。 window上安装ubuntu虚拟机,并在虚拟机中使用pm2部署 Nuxt3 项目.

在这里插入图片描述

  • Nuxt3
  • Vite
  • typescript
  • pm2

1. 安装node环境

  1. 下载
# 进入node目录
cd /node
# 下载
wget https://nodejs.org/download/release/v16.20.2/node-v16.20.2-linux-x64.tar.xz
  1. 解压:
tar -xvf node-v16.20.2-linux-x64.tar.xz
  1. 进目录
cd node-v16.20.2-linux-x64
  1. 测试是否下载成功
./node -v
  1. 添加软连接
sudo ln -s /node/node-v16.20.2-linux-x64/bin/node /usr/local/bin/node
sudo ln -s /node/node-v16.20.2-linux-x64/bin/npm /usr/local/bin/npm
  1. 测试软连接是否成功
# 进入根目录
cd /

node -v

npm -v

什么叫软连接:将当前目录,添加到 Linux 系统 path 中,系统 path 就是: /usr/local/bin

2. 创建两个 pm2 配置文件

windows上提前新建好两个文件:ecosystem.config.js以及 start-nuxt.sh,然后准备上传到 Linux 服务器指定位置.

  1. ecosystem.config.js文件内容如下:
 // 配置pm2
module.exports = {
  apps: [
    {
      name: "BlogHomeNuxt",
      exec_mode: "cluster",
      instances: "2", // 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max
      script: "dist/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",
      },
    },
  ],
};
  1. start-nuxt.sh 文件内容如下:
  #!/bin/bash
  
  BUILD_ID=DONTKILLME
  
  echo "pm2 starting"
  
  pm2 start ecosystem.config.js --env production
  
  echo "pm2 started"

3.将两文件以及打包文件上传到服务器

我的服务器是 WSL 创建的 Ubuntu 系统,你可以根据自己的服务器选择上传方式

  1. 在服务器根目录创建文件夹:mkdir onlineweb,用于存放稍后上传的所有项目文件
sudo mkdir onlineweb
  1. 在 windows 项目目录下执行pnpm run build 打包指令,得到将要上传到服务器的文件夹 .output
pnpm run build

现在我们有了2个配置文件 和 1个打包后的文件夹:

> d:/workspace/my-nuxt-project/start-nuxt.sh
> 
> d:/workspace/my-nuxt-project/ecosystem.config.js
> 
> d:/workspace/my-nuxt-project/.output

先查看一遍,上传到服务器后的目录结构,类似如下:

/onlineweb

│—start-nuxt.sh
│
│—ecosystem.config.js
│
├─dist
│  │
│  └─nitro.json
│  │
│  └─public
│  │    └────favicon.ico
│  │    └────api
│  │    └────_nuxt
│  │
│  └─server
│  │    └────chunks
│  │    └────node_modules
│  │    └────index.mjs
│  │    └────index.mjs.map
│  │    └────package.json

3.1 【上传】windows 文件上传到使用WSL创建的 Ubuntu 系统

这里以 windows 上传到到使用 WSL创建的 Ubuntu系统作为示例,如果你自己有其他上传方式,可以跳过3.1上传这一小节

  1. 登录 Ubuntu 系统,新建目录 onlineweb
# 进入根目录
(base) ifredom@DESKTOP-CQAE3DF:~$ cd /
# 新建
(base) ifredom@DESKTOP-CQAE3DF:~$ sudo mkdir onlineweb
  1. Linux上输入:/mnt/{Windows盘符}访问windows系统,此处输入:cd /mnt/d
(base) ifredom@DESKTOP-CQAE3DF:~$ cd /mnt/d
  1. 进入windows上项目目录位置, cd workspace/my-nuxt-project
(base) ifredom@DESKTOP-CQAE3DF:/mnt/d$ cd workspace/my-nuxt-project
  1. 复制window上的ecosystem.config.js 到Linuxt服务器 /onlineweb目录下
# ls 查看目录
(base) ifredom@DESKTOP-CQAE3DF:/mnt/d/workspace/my-nuxt-project$ ls
# cp 复制: 
(base) ifredom@DESKTOP-CQAE3DF:/mnt/d/workspace/my-nuxt-project$  sudo cp -r .output/ /onlineweb/dist
(base) ifredom@DESKTOP-CQAE3DF:/mnt/d/workspace/my-nuxt-project$  sudo cp -r ecosystem.config.js  /onlineweb/
(base) ifredom@DESKTOP-CQAE3DF:/mnt/d/workspace/my-nuxt-project$  sudo cp -r start-nuxt.sh  /onlineweb/

到这里,我们成功将 2文件以及1文件夹 上传到服务器上目录 onlineweb

提示: Windows 访问 Linux 文件方法:命令行输入 \\wsl$

4.使用pm2启动

  • pm2配置文档
  1. 在服务器 /onlineweb/ 下执行 sh start-nuxt.sh 即可 , 成功使用 pm2 启动 nuxt 服务
# 进入目录
cd /onlineweb/
# 安装
sudo npm install -g pm2
# 启动
sh start-nuxt.sh

到此,使用PM2命令已经成功启动了.

如果你没有使用nginx代理,那么你可以访问 http://localhost:5050/ 查看效果了

tips: 你可能会怀疑怎么启动了2服务,在配置文件中配置 instance 字段,所有配置详情自行查看文档


也许你嫌弃PM2太麻烦,不想使用 pm2 启动?,直接使用node启动,也完全没有问题:

node dist/server/index.mjs

5.配置nginx

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

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

其他 pm2 指令

# 查看启动的服务列表
pm2 list

# 停止服务
pm2 stop  [name|id]

# 删除服务
pm2 delete  [name|id]

# 保存当前线程
pm2 save

# 设置服务器开机自启
pm2 startup

对于非Linuxt系统,比如windows服务器,需要额外安装下边的插件才可以。

# 全局安装 pm2-windows-startup
npm install pm2-windows-startup -g
# 设置 pm2-startup
pm2-startup install

相关注意事项

  1. 目前nuxt3服务器打包会造成内存溢出导致卡死

------ 如果文章对你有用,感谢右上角 >>>点赞 | 收藏 <<<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/947163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

input时间表单默认样式修改(input[type=“date“])

一、时间选择的种类: HTML代码&#xff1a; <input type"date" value"2018-11-15" />选择日期&#xff1a; 选择时间&#xff1a; <input type"time" value"22:52" />在这里插入图片描述 选择星期&#xff1a; <…

POSTGRESQL WAL 日志问题合集之WAL 如何解析

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加 liuaustin3微信号 &#xff0c;在新加的朋友会分到3群 &#xf…

Python实战之数据表提取和下载自动化

在网络爬虫领域&#xff0c;动态渲染类型页面的数据提取和下载自动化是一个常见的挑战。本文将介绍如何利用Pyppeteer库完成这一任务&#xff0c;帮助您轻松地提取动态渲染页面中的数据表并实现下载自动化。 一、环境准备 首先&#xff0c;确保您已经安装了Python环境。接下来…

uniapp 支持图片放大

<view class"list" v-for"(item, index) in urls" :key"index"><image :src"item" click"viewImg(item, index)" disabled></image></view> js // 预览大图 viewImg(data, index) {uni.previewImag…

《游戏编程模式》学习笔记(九)游戏循环 Sequencing Patterns

定义 一个游戏循环会在游玩时不断运行。 每一次循环&#xff0c;它都会无阻塞地处理玩家的输入&#xff0c;更新游戏的状态&#xff0c;渲染游戏。它追踪时间的消耗并控制游戏的速度。游戏循环需要做到始终以固定的速度运行游戏。 一个游戏循环中通常包含处理输入部分&#xf…

01-基础例程1

基础例程1 01-LED /* 深圳市普中科技有限公司&#xff08;PRECHIN 普中&#xff09;技术支持&#xff1a;www.prechin.net* 实验名称&#xff1a;LED流水灯实验* 接线说明&#xff1a;LED模块-->ESP32 IO* (D1-D8)-->(15,2,0,4,16,17,5,18)* * 实验现象&#x…

stm32----SPI协议

一、概述 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外围设备接口&#xff09;&#xff0c;是Motorola公司提出的一种同步串行接口技术&#xff0c;是一种高速、全双工、同步通信总线&#xff0c;在芯片中只占用四根管脚用来控制及数据传输&#xff0c;节约…

jmeter性能测试入门完整版

1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言&#xff0c;JMeter小巧轻便且免费&#xff0c;逐渐成为了主流的性能测试工具&#xff0c;是每个测试人员都必须要掌握的工具之一。 本文为JMeter性能测试完整入门篇&…

IT项目标准实施流程

一、IT项目标准实施流程、参与角色与职责架构图 二、IT项目阶段交付文档明细目录 NO. 阶段 中文名称 英文名称 缩写 是否必须 1 1.分析 1.1 项目业务需求分析文档 Business Requirement analysis Document BRD X 2 2.设计 2.1 硬件&软件配置清单 Bill Of Ma…

Excel:如何实现分组内的升序和降序?

一、POWER 1、构建辅助列D列&#xff0c;在D2单元格输入公式&#xff1a; -POWER(10,COUNTA($A$2:A2)3)C2 2、选中B1:D10&#xff0c;注意不能宣导A列的合并单元格&#xff0c;进行以下操作&#xff1a; 3、删除辅助列即可 二、COUNTA 第一步&#xff0c;D2建立辅助列&#xf…

6.Redis-hash

hash 哈希类型中的映射关系通常称为field-value&#xff0c;⽤于区分 Redis 整体的键值对&#xff08;key-value&#xff09;&#xff0c;注意这⾥的value是指field对应的值&#xff0c;不是键&#xff08;key&#xff09;对应的值&#xff0c;请注意 value 在不同上下⽂的作⽤…

同源策略与解决方法

同源策略与解决方法 1.浏览器的同源策略 1.1 同源策略 同源策略&#xff08;same origin policy&#xff09;&#xff0c;一种安全策略&#xff0c;用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。 浏览器默认两个不同的源之间是可以互相访问资源和…

reactantd(12)动态表单的默认值问题

最近遇到一个需求是有一个表单可以输入各种信息&#xff0c;然后还需要有一个编辑功能&#xff0c;点击编辑的时候需要把当前数据填入到表单里面。在网上查了很多种方法&#xff0c;然后我的思路是使用initialValues搭配setState()使用。默认值都为空&#xff0c;然后点击单条数…

Microsoft Edge 主页启动diy以及常用的扩展、收藏夹的网站

一、Microsoft Edge 主页启动diy 二、常用的扩展 1、去广告&#xff1a;uBlock Origin 2、翻译&#xff1a; 页面翻译&#xff1a;右键就有了&#xff0c;已经内置了划词翻译 3、超级复制 三、收藏夹的网站

函数(个人学习笔记黑马学习)

1、函数定义 #include <iostream> using namespace std;int add(int num1, int num2) {int sum num1 num2;return sum; }int main() {system("pause");return 0; } 2、函数的调用 #include <iostream> using namespace std;int add(int num1, int num2…

java内存模型讨论及案例分析

常用内存选项 -Xmx&#xff1a; 最大堆大小 -Xms&#xff1a;最小堆大小 -Xss &#xff1a;线程堆栈大小&#xff0c;默认1M 生产环境最好保持 Xms Xmx java内存研究 内存布局 可见&#xff1a; 堆大小 新生代 老年代&#xff0c;新生代EFrom SurvivorTo Survivor。新…

【数学建模竞赛】各类题型及解题方案

评价类赛题建模流程及总结 建模步骤 建立评价指标->评价体系->同向化处理&#xff08;都越多越好或越少越少&#xff09;->指标无量纲处理 ->权重-> 主客观->合成 主客观评价问题的区别 主客观概念主要是在指标定权时来划分的。主观评价与客观评价的区别…

Vulnhub内网渗透DC-6靶场通关

个人博客 xzajyjs.cn IP DC-6: 192.168.168.4 Kali: 192.168.168.5 信息搜集 arp-scan -l # nmap -sn 192.168.168.0/24进行主机发现&#xff0c;探测到靶机IP。 使用nmap进行端口扫描 nmap -sV -A 192.168.168.4开放了一个ssh和http端口&#xff0c;80端口是wordpress5.1…

MinIO框架安装使用+实现上传需求

MinIO框架 什么是MinIO框架如何安装&#xff08;Docker版&#xff09;安装步骤1. 查询MinIO的服务版本2. 拉取MinIO3.启动报错在docker中没有操作文件的权限 4. 访问 简单配置1.找到创建用户界面2. 设置用户信息3. 创建一个桶 使用MinIO依赖搭建MinIO的初始化API存储桶的基本操…

uniapp 开发小程序,封装一个方法,让图片使用线上地址

1.在main.js文件中&#xff0c;添加以下代码&#xff1a; 复制使用&#xff1a; // 图片使用网络地址 Vue.prototype.localImgSrc function(img){//项目的地址域名&#xff0c;例如百度return "https://baidu.cn/static/index/images/" img; }2.在页面中直接使用&…