我们可以简单的通过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应用了。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
发表评论 取消回复