使用PM2以Cluster模式多进程部署Next.js(包括Docker下的部署)
<h2 id="slide-1" data-ai-assistant-role="selection">一、介绍</h2><p>Next.js 是一个强大的 React 框架,用于构建静态和服务器渲染的 React 应用程序。PM2 是一个带有内置负载均衡器的 Node.js 进程管理工具,它允许我们在多核服务器上运行多个 Node.js 实例。结合 Docker,可以实现高效的容器化应用管理。</p>
<h2 id="slide-2">二、准备工作</h2>
<p>在开始之前,确保已经安装了以下工具:</p>
<ul>
<li>Node.js 和 npm</li>
<li>PM2</li>
<li>Docker</li>
</ul>
<h2 id="slide-3">三、安装和配置Next.js</h2>
<h3 id="slide-4">3.1 创建Next.js项目</h3>
<p>首先,创建一个新的 Next.js 项目:</p>
<pre class="overflow-visible highlighter-hljs"><code>npx create-next-app@latest my-next-app
cd my-next-app
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<h3 id="slide-5">3.2 安装PM2</h3>
<p>在项目中安装 PM2:</p>
<pre class="overflow-visible highlighter-hljs"><code>npm install pm2 --save
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<h3 id="slide-6">3.3 配置Next.js启动脚本</h3>
<p>在 <code>package.json</code> 文件中添加一个启动脚本:</p>
<pre class="overflow-visible highlighter-hljs"><code>"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start -p 3000"
}
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<h2 id="slide-7">四、使用PM2的Cluster模式</h2>
<h3 id="slide-8">4.1 创建PM2配置文件</h3>
<p>在项目根目录中创建一个 <code>ecosystem.config.js</code> 文件:</p>
<pre class="overflow-visible highlighter-hljs"><code>module.exports = {
apps: [
{
name: 'my-next-app',
script: 'npm',
args: 'start',
instances: 'max',// 使用机器的所有CPU内核
exec_mode: 'cluster',// Cluster模式
env: {
NODE_ENV: 'production'
}
}
]
};
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<h3 id="slide-9">4.2 启动PM2</h3>
<p>使用以下命令启动 PM2:</p>
<pre class="overflow-visible highlighter-hljs"><code>pm2 start ecosystem.config.js
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<h3 id="slide-10">4.3 管理PM2进程</h3>
<p>查看PM2进程状态:</p>
<pre class="overflow-visible highlighter-hljs"><code>pm2 status
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<p>查看日志:</p>
<pre class="overflow-visible highlighter-hljs"><code>pm2 logs my-next-app
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<p>重启应用:</p>
<pre class="overflow-visible highlighter-hljs"><code>pm2 restart my-next-app
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<p>停止应用:</p>
<pre class="overflow-visible highlighter-hljs"><code>pm2 stop my-next-app
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<h2 id="slide-11">五、在Docker中部署Next.js和PM2</h2>
<h3 id="slide-12">5.1 创建Dockerfile</h3>
<p>在项目根目录中创建一个 <code>Dockerfile</code> 文件:</p>
<pre class="overflow-visible highlighter-hljs"><code># 使用Node.js官方镜像作为基础镜像
FROM node:14
# 创建工作目录
WORKDIR /usr/src/app
# 复制package.json和package-lock.json文件
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制项目文件
COPY . .
# 构建Next.js应用
RUN npm run build
# 安装PM2
RUN npm install pm2 -g
# 启动PM2和Next.js应用
CMD ["pm2-runtime", "start", "ecosystem.config.js"]
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<h3 id="slide-13">5.2 创建.dockerignore文件</h3>
<p>在项目根目录中创建一个 <code>.dockerignore</code> 文件,以防止将不必要的文件复制到Docker镜像中:</p>
<pre class="overflow-visible highlighter-hljs"><code>node_modules
npm-debug.log
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<h3 id="slide-14">5.3 构建Docker镜像</h3>
<p>使用以下命令构建Docker镜像:</p>
<pre class="overflow-visible highlighter-hljs"><code>docker build -t my-next-app .
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<h3 id="slide-15">5.4 运行Docker容器</h3>
<p>使用以下命令运行Docker容器:</p>
<pre class="overflow-visible highlighter-hljs"><code>docker run -p 3000:3000 my-next-app
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<h2 id="slide-16">六、总结</h2>
<p>通过上述步骤,我们实现了在Docker环境下使用PM2以Cluster模式多进程部署Next.js应用。这样不仅提高了应用的性能和可用性,还简化了部署和管理过程。</p>
<h3 id="slide-17">思维导图</h3>
<pre class="overflow-visible highlighter-hljs"><code>- 使用PM2以Cluster模式多进程部署Next.js
- 安装和配置Next.js
- 创建Next.js项目
- 安装PM2
- 配置Next.js启动脚本
- 使用PM2的Cluster模式
- 创建PM2配置文件
- 启动PM2
- 管理PM2进程
- 在Docker中部署Next.js和PM2
- 创建Dockerfile
- 创建.dockerignore文件
- 构建Docker镜像
- 运行Docker容器
- 总结
</code></pre>
<div class="code-tools">
<div class="copy-code"> </div>
<div class="ai-code">
<div class="ai-img"> </div>
</div>
</div>
<p data-spm-anchor-id="a2c6h.12873639.article-detail.i2.13dc69d6X51eWy">通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。</p><br><br>
来源:https://www.cnblogs.com/she20250124/p/18865867
頁:
[1]