当前位置: 首页 > news >正文

如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)

我们可以简单的通过next start,来启动next.js的application。不过在实际的使用中,面对更大的访问压力,通过多进程的方式来部署next.js呢?

我们可以首先通过pm2的cluster mode来完成这个事情。cluster mode是nodejs非常给力的一种云行方式,可以启动多个进程,并且listen在同一个端口上。具体如何操作呢,我们可以首先建立一个.json文件来描述pm2的任务(命名为pm2.json):

{  "apps" : [  {"name" : "next","script" : "next","args" : "start --port 3000","exec_mode" : "cluster_mode","instances" : 2,"log_file" : "server.log","merge_logs" : true}  ] 
}

解释一下这里的配置:

  • exec_mode就是执行的模式,这个需要设置为"cluster_mode"(写成"cluder"也可以)
  • instances是启动的进程数量,如果写"max",则是按照cpu的数量来启动进程
  • merge_logs是让不同的进程写在同一个日志文件中,否则会分开日志文件

配置文件写好,build结束后,用pm2启动next.js应用就可以了

pm2 start pm2.json

启动之后应该可以看到每一个进程的启动的输出,之后可以ps aux|grep next看到多个next的进程。

然后说明一下在docker中如何通过pm2来启动next.js应用。在docker中,我们需要使用pm2-runtime而不是pm2来启动,这是因为pm2启动目标进程后会damonize,这样docker容器就结束了。

但是直接使用pm2-runtime,因为没有pm2的驻留进程,所以pm2-runtime会找错路径,比如在pm2.json/这个路径下面去找build好的文件。所以需要先启动一下pm2的进程,然后再用pm2-runtime执行,这个方法如下

sudo docker run -it --entrypoint "/bin/bash" \-v $(pwd):/workdir --workdir /workdir \-p 3000:3000 \node:latest \-c "npx pm2 list && npx pm2-runtime start pm2.json"

这样就可以在容器内,启动多个进程的next.js应用了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • springboot+vue+mybatis高校宿舍管理系统+PPT+论文+讲解+售后
  • 学习笔记 韩顺平 零基础30天学会Java(2024.7.24)
  • docker 运维查看指定应用log文件位置和名称
  • 设计模式-抽象工厂
  • Ansible的脚本-----playbook剧本【上】
  • org.springframework.context.annotation.ImportSelector的作用是什么?
  • 【数据结构】单链表面试题(Java + 力扣 + 详解)
  • Harmony Next -- 图片选择库:宫格展示、全屏预览
  • 生成对抗网络(Generative Adversarial Network,简称GAN
  • 3dsMax 设置近平面削减,靠近模型之后看不到模型,看很小的模型放大看不到
  • MySQL:增删改查、临时表、授权相关示例
  • 一个注解实现分布式锁加锁
  • RockyLinux 9 PXE Server bios+uefi 自动化部署 RockLinux 8 9
  • 数据库编程中游标 连接 commit
  • js——浅拷贝和深拷贝
  • Druid 在有赞的实践
  • java多线程
  • Java教程_软件开发基础
  • Linux后台研发超实用命令总结
  • Linux快速复制或删除大量小文件
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Redis中的lru算法实现
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 前端之React实战:创建跨平台的项目架构
  • 山寨一个 Promise
  • 设计模式(12)迭代器模式(讲解+应用)
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 学习笔记:对象,原型和继承(1)
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • $forceUpdate()函数
  • (8)STL算法之替换
  • (SpringBoot)第二章:Spring创建和使用
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)JPA - JQPL 实现增删改查
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .md即markdown文件的基本常用编写语法
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net 微服务 服务保护 自动重试 Polly
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET技术成长路线架构图
  • .NET实现之(自动更新)
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .net中的Queue和Stack
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • [ C++ ] STL---stack与queue
  • [AIGC] MySQL存储引擎详解