这次我们来看一个非常实用的技术操作:将基于 Vue3 和 Nuxt4 开发的 SSR 网站,部署到 Ubuntu 服务器上。对于很多前端开发者来说,本地开发环境跑得顺风顺水,但一到服务器部署环节,就可能遇到各种环境问题、权限问题或配置陷阱。这篇文章的目标就是帮你跨过这个坎。
这个部署流程的核心,不是理解复杂的服务器架构,而是确保你的应用能在生产环境中稳定、高效地运行。我们将重点关注从代码打包、服务器环境准备、服务进程管理到最终访问验证的全链路操作。无论你使用的是阿里云、腾讯云等云服务器,还是自己的物理服务器,只要系统是 Ubuntu,这套方法都通用。
本文会带你完成以下关键步骤:首先,在本地完成 Nuxt 应用的构建,生成适合生产环境的文件。然后,通过 SSH 连接到你的 Ubuntu 服务器,配置 Node.js 环境、安装 PM2 进程管理工具。接着,将构建好的文件上传到服务器,并配置 Nginx 进行反向代理,实现域名访问和 HTTPS(可选)。最后,我们会验证服务是否正常运行,并介绍如何排查常见的部署问题。
如果你正在寻找一份能直接上手、避免踩坑的 Vue3 + Nuxt4 SSR 项目部署指南,那么这篇文章就是为你准备的。我们不讲空泛的理论,只聚焦于可执行、可验证的操作步骤。
1. 核心能力速览
在开始具体操作前,我们先通过一个表格快速了解这次部署涉及的核心技术栈和关键点,让你对整体流程有个清晰的把握。
| 能力项 | 说明 |
|---|---|
| 前端框架 | Vue 3 (Composition API) |
| 服务端渲染框架 | Nuxt 4 (基于 Nitro 服务端引擎) |
| 部署目标系统 | Ubuntu Server (推荐 20.04 LTS 或 22.04 LTS) |
| 运行时环境 | Node.js (版本需与 Nuxt 4 兼容,推荐 18.x 或 20.x) |
| 进程管理 | PM2 (用于守护进程、日志管理、集群模式) |
| Web 服务器 | Nginx (用于反向代理、静态文件服务、负载均衡) |
| 代码传输 | SCP / SFTP / Git (将本地构建产物上传至服务器) |
| 核心验证 | 通过公网 IP 或域名访问 SSR 渲染的页面 |
| 适合场景 | 需要 SEO 优化、首屏加载速度快的 Vue 应用生产部署 |
2. 适用场景与使用边界
这次部署方案主要适用于哪些项目和开发者?
适用场景:
- 需要 SEO 优化的内容型网站:如企业官网、博客、新闻资讯、电商商品列表页等,利用 SSR 服务端渲染生成对搜索引擎友好的 HTML。
- 追求首屏性能的应用:希望用户打开页面时能立刻看到内容,而不是先加载一个空白的 HTML 再通过 JavaScript 渲染。
- 使用 Vue3 和 Nuxt4 技术栈的团队:希望将开发完成的应用部署到自有或云端的 Ubuntu 服务器上。
- 学习全栈部署流程的前端开发者:希望掌握从开发到上线的完整闭环,理解服务端环境配置。
使用边界与注意事项:
- 非静态站点:如果你的网站完全是静态内容,没有动态数据或用户交互,使用
nuxt generate生成静态文件并部署到 CDN 或对象存储可能是更简单、成本更低的选择。 - 高并发与复杂后端逻辑:Nuxt SSR 适合处理前端渲染和简单的 API 代理。如果业务涉及复杂的后端逻辑、数据库高频读写或极高的并发量,应考虑将核心业务 API 拆分为独立的微服务,Nuxt 仅作为 BFF (Backend For Frontend) 层。
- 服务器资源:SSR 服务需要常驻内存的 Node.js 进程,会持续占用 CPU 和内存资源。你需要为服务器准备足够的内存(建议至少 1GB 空闲内存)和稳定的网络环境。
- 运维成本:相比静态部署,SSR 部署需要你维护服务器、监控进程、处理日志、定期更新系统和依赖,具备一定的运维知识。
3. 环境准备与前置条件
在动手部署之前,请确保你已满足以下所有条件。这是后续所有步骤能够顺利进行的基础。
本地开发环境:
- 一个可运行的 Vue3 + Nuxt4 项目:确保你的项目在本地通过
npm run dev可以正常启动和访问。 - Node.js 与 npm:本地需要安装 Node.js(版本建议与服务器保持一致,如 18.x),用于执行构建命令。
- 代码版本管理:建议使用 Git 管理代码,便于在服务器上拉取和更新。
Ubuntu 服务器环境:
- 一台已安装 Ubuntu 的服务器:可以是云服务器(如阿里云 ECS、腾讯云 CVM)或本地虚拟机/物理机。系统版本推荐 Ubuntu 20.04 LTS 或 22.04 LTS,因为它们有长期支持。
- SSH 访问权限:你需要知道服务器的公网 IP 地址、SSH 端口(默认为 22)、以及拥有 sudo 权限的用户名和密码(或密钥)。
- 开放的网络端口:确保服务器的安全组或防火墙规则允许外部访问你计划使用的端口(例如:3000 用于 Node 服务,80 和 443 用于 Nginx)。
- 域名(可选但推荐):如果你希望通过域名访问网站,需要拥有一个已备案的域名,并将其 DNS 解析指向你的服务器公网 IP。
工具准备:
- SSH 客户端:如系统自带的终端(macOS/Linux)或 PuTTY、Xshell(Windows),用于连接服务器。
- 文件传输工具:如
scp命令、rsync或 FileZilla 等 SFTP 客户端,用于上传文件。
4. 本地项目构建
部署的第一步不是在服务器,而是在你的本地开发机。我们需要将源代码转换为可以在生产服务器上直接运行的文件。
操作步骤:
检查与安装依赖:在项目根目录下,确保所有依赖都已正确安装。
# 进入你的 Nuxt 项目目录 cd your-nuxt-project # 安装项目依赖(如果尚未安装) npm install # 或者使用 yarn/pnpm # yarn install # pnpm install执行构建命令:Nuxt 4 的构建命令会编译你的 Vue 组件、打包资源,并生成服务端渲染所需的 Nitro 服务器文件。
# 执行构建,这会生成 .output 目录 npm run build构建过程可能会花费一些时间,取决于项目复杂度。构建成功后,你会在项目根目录下看到一个名为
.output的文件夹。这个文件夹包含了部署所需的全部内容。验证构建产物:你可以先在本地预览构建后的效果,确保没有构建错误。
# 预览生产环境下的应用 npm run preview命令执行后,通常会提示服务运行在
http://localhost:3000。在浏览器中访问该地址,确认网站功能正常。这一步能提前发现一些仅在生产构建模式下出现的问题。
关键文件说明:
.output/public/:存放静态资源,如通过public/目录放入的图片、字体等,以及构建生成的 CSS、JS 文件。.output/server/:存放服务端代码和入口文件,这是 SSR 的核心。.output/server/index.mjs:Nitro 服务器的入口文件,PM2 将启动这个文件。
至此,本地准备工作完成。接下来,我们将焦点转移到服务器上。
5. 服务器基础环境配置
通过 SSH 连接到你的 Ubuntu 服务器,我们将开始配置运行 Node.js 应用所需的环境。
操作步骤:
连接服务器:
# 使用用户名和IP地址连接,按提示输入密码 ssh username@your_server_ip # 如果使用了非默认端口(如 2222) ssh -p 2222 username@your_server_ip更新系统包列表:连接成功后,首先更新软件包索引。
sudo apt update安装 Node.js 和 npm:推荐使用 NodeSource 仓库安装特定版本的 Node.js,以获得更新的版本。
# 以安装 Node.js 20.x 为例 # 首先添加 NodeSource 仓库 curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - # 然后安装 Node.js 和 npm sudo apt install -y nodejs # 验证安装 node --version # 应输出 v20.x.x npm --version # 应输出对应的 npm 版本安装 PM2 进程管理器:PM2 可以让我们方便地启动、停止、重启应用,并实现进程守护和日志管理。
# 全局安装 PM2 sudo npm install -g pm2 # 验证安装 pm2 --version安装 Nginx:Nginx 将作为反向代理服务器,对外提供 Web 服务,并将请求转发给内部的 Node.js 应用。它还能处理静态文件、配置 SSL 等。
sudo apt install -y nginx # 启动 Nginx 并设置开机自启 sudo systemctl start nginx sudo systemctl enable nginx # 验证 Nginx 是否运行 sudo systemctl status nginx如果状态显示为
active (running),你可以在浏览器中访问服务器的公网 IP,应该能看到 Nginx 的欢迎页面。
6. 上传项目文件与启动应用
现在,我们需要将本地构建好的.output文件夹上传到服务器,并使用 PM2 启动应用。
操作步骤:
在服务器上创建项目目录:选择一个合适的目录存放你的应用,例如
/var/www/。# 创建项目目录,请将 `your-app-name` 替换为你的应用名 sudo mkdir -p /var/www/your-app-name # 更改目录所有权为你当前的用户,方便后续操作 sudo chown -R $USER:$USER /var/www/your-app-name上传构建文件:从本地机器上传
.output目录到服务器。这里以使用scp命令为例。# 在本地机器的终端中执行(不是在服务器上) # 将 /path/to/your-nuxt-project/.output 替换为你的实际路径 scp -r /path/to/your-nuxt-project/.output username@your_server_ip:/var/www/your-app-name/替代方案:你也可以使用
rsync(更高效,支持增量同步)或 SFTP 图形化工具(如 FileZilla)来完成上传。进入项目目录并安装生产依赖:虽然
.output目录包含了运行所需的核心文件,但为了确保兼容性,最好在服务器上也安装package.json中定义的依赖(尤其是@nuxt/nitro等)。你需要将本地的package.json、package-lock.json(或yarn.lock、pnpm-lock.yaml)也上传到服务器同一目录。# 在服务器上,进入项目目录 cd /var/www/your-app-name # 上传 package.json 等文件后,安装生产依赖 npm ci --only=production # 使用 npm ci 可以确保根据 lock 文件精确安装,速度更快且环境一致使用 PM2 启动应用:PM2 需要知道启动哪个文件。对于 Nuxt 4 构建的 Nitro 应用,入口文件位于
.output/server/index.mjs。# 在 /var/www/your-app-name 目录下执行 pm2 start .output/server/index.mjs --name "your-app-name"--name参数为你的应用指定一个在 PM2 中显示的名称。验证 PM2 应用状态:
pm2 status你应该能看到你刚启动的应用,状态为
online。同时,PM2 会显示应用占用的 CPU 和内存情况。设置 PM2 开机自启:为了让服务器重启后应用能自动启动,需要生成启动脚本并启用。
# 生成开机启动脚本 pm2 startup # 执行上述命令后,它会输出一行类似 `sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username` 的命令,你需要复制并执行它。 # 保存当前 PM2 进程列表,以便开机时恢复 pm2 save
此时,你的 Nuxt SSR 应用已经在服务器的3000端口(Nitro 默认端口)上运行了。但你无法直接通过外网 IP 的 3000 端口访问,因为通常云服务器的安全组默认只开放了 22、80、443 等少数端口。接下来,我们需要配置 Nginx 将外部请求转发到这个内部服务。
7. 配置 Nginx 反向代理
Nginx 将监听 80(HTTP)端口,并将接收到的请求转发给运行在localhost:3000的 Node.js 应用。
操作步骤:
创建 Nginx 站点配置文件:Nginx 的站点配置文件通常存放在
/etc/nginx/sites-available/目录下。我们为应用创建一个新的配置文件。sudo nano /etc/nginx/sites-available/your-app-name你也可以使用
vim或其他你熟悉的编辑器。编辑配置文件内容:将以下配置粘贴到文件中。请将
your_domain_or_ip替换为你的服务器公网 IP 地址或域名。server { listen 80; listen [::]:80; server_name your_domain_or_ip; # 例如:example.com 或 123.123.123.123 location / { proxy_pass http://localhost:3000; # 指向 PM2 启动的 Nuxt 应用 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; # 如果前端路由使用 history 模式,需要下面这行(Nuxt 默认是) # try_files $uri $uri/ /index.html; # 注意:Nuxt SSR 模式下通常不需要上面这行,因为服务端会处理路由。 } # 可选:静态文件由 Nginx 直接处理,效率更高 location /_nuxt/ { alias /var/www/your-app-name/.output/public/_nuxt/; expires 1y; add_header Cache-Control "public, immutable"; } }配置说明:
proxy_pass: 这是核心指令,将所有请求转发给本机的 3000 端口服务。proxy_set_header: 这些指令将客户端的真实 IP、协议等信息传递给后端的 Node.js 应用,对于 Nuxt 获取正确的请求上下文很重要。- 静态文件处理:将
/_nuxt/路径的请求直接指向构建生成的静态资源目录,并设置长期缓存,可以显著提升性能。
启用站点配置:创建符号链接,将配置文件链接到
sites-enabled目录。sudo ln -s /etc/nginx/sites-available/your-app-name /etc/nginx/sites-enabled/测试 Nginx 配置并重载:在重启 Nginx 前,务必测试配置文件语法是否正确。
sudo nginx -t如果输出
syntax is ok和test is successful,则说明配置无误。然后重载 Nginx 使配置生效。sudo systemctl reload nginx
8. 功能测试与效果验证
完成以上所有步骤后,现在是验证部署成果的时候了。我们将从多个维度检查应用是否正常运行。
操作步骤与验证点:
基础访问测试:
- 打开浏览器,访问你的服务器公网 IP 或域名(例如:
http://your_server_ip)。 - 预期结果:你应该能看到你的 Vue3 + Nuxt4 网站首页,并且功能与本地开发环境一致。
- 验证 SSR:在页面任意处点击右键,选择“查看网页源代码”。你应该能看到完整的 HTML 内容,而不是一个只有
<div id=”app”></div>的空壳。这证明服务端渲染正在工作。
- 打开浏览器,访问你的服务器公网 IP 或域名(例如:
检查服务进程状态:
# 检查 PM2 管理的应用状态 pm2 list # 或查看详细日志 pm2 logs your-app-name --lines 50- 预期结果:
pm2 list中应用状态应为online。日志中不应有持续报错,只有正常的 HTTP 请求记录。
- 预期结果:
检查 Nginx 访问日志与错误日志:
# 查看 Nginx 最近的访问记录 sudo tail -f /var/log/nginx/access.log # 查看 Nginx 错误日志(如果访问有问题) sudo tail -f /var/log/nginx/error.log- 当你刷新浏览器页面时,
access.log中应该会出现对应的访问记录。 error.log应该保持为空或只有无关紧要的警告。
- 当你刷新浏览器页面时,
测试 API 路由(如果项目有):如果你的 Nuxt 项目在
server/api/目录下定义了 API 接口,访问对应的路由(例如:http://your_server_ip/api/hello),检查是否能返回正确的 JSON 数据。测试静态资源:访问一个明确的静态资源路径,例如
http://your_server_ip/_nuxt/entry-[hash].js(具体文件名查看.output/public/_nuxt/目录)。该文件应该能被正确加载,并且响应头中应包含我们之前设置的长期缓存头Cache-Control: public, immutable。
如果以上所有测试都通过,那么恭喜你,你的 Vue3 + Nuxt4 SSR 应用已经成功部署到 Ubuntu 服务器上了!
9. 进阶配置:域名与 HTTPS
如果你拥有一个域名,并希望启用 HTTPS 以提升安全性和专业性,可以按照以下步骤操作。这里使用 Let‘s Encrypt 提供的免费 SSL 证书,并通过 Certbot 工具自动化申请和配置。
操作步骤:
安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx配置域名 DNS:在你的域名注册商处,将域名(例如
www.example.com)的 A 记录解析到你的服务器公网 IP。等待 DNS 生效(可能需要几分钟到几小时)。运行 Certbot 获取证书:
sudo certbot --nginx -d your_domain.com -d www.your_domain.com将
your_domain.com替换为你的实际域名。Certbot 会与 Let‘s Encrypt 通信,验证你对域名的控制权(通过 Nginx 临时文件),然后自动下载证书并修改你的 Nginx 配置文件。验证自动配置:Certbot 会自动修改我们在第 7 步创建的 Nginx 配置文件,添加监听 443 端口的 SSL 配置,并设置重定向(将 HTTP 跳转到 HTTPS)。你可以再次检查配置文件:
sudo nano /etc/nginx/sites-available/your-app-name你会看到 Certbot 添加了
listen 443 ssl;等指令,并引入了证书路径。测试 HTTPS:在浏览器中访问
https://your_domain.com。地址栏应该显示安全锁标志。同时,访问http://your_domain.com也会被自动重定向到 HTTPS 版本。设置证书自动续期:Let‘s Encrypt 证书有效期为 90 天。Certbot 安装时会自动创建一个定时任务(cron job)来续期证书。你可以手动测试续期流程:
sudo certbot renew --dry-run如果测试成功,证书到期前会自动续期。
10. 资源占用与性能观察
部署完成后,持续观察应用的资源使用情况对于稳定性至关重要。
观察指标与方法:
PM2 监控:PM2 内置了简单的监控面板。
pm2 monit这会打开一个实时仪表盘,显示所有被管理进程的 CPU、内存占用、日志等信息。
系统资源监控:使用
htop或top命令查看整体系统资源。# 安装 htop(如果未安装) sudo apt install -y htop htop在
htop中,你可以找到你的 Node 进程(node .output/server/index.mjs),观察其内存和 CPU 使用率。一个中等复杂度的 Nuxt SSR 应用,内存占用可能在 200MB 到 500MB 之间,具体取决于代码量和访问量。Nginx 连接数:查看 Nginx 的活动连接数。
sudo nginx -T 2>/dev/null | grep worker_connections # 通常输出 worker_connections 768; 或类似值 # 查看当前状态 sudo nginx -s status 2>/dev/null || echo “查看状态需要 Nginx 的 status 模块” # 更通用的方法是使用 netstat 或 ss ss -tulpn | grep :80 ss -tulpn | grep :443日志轮转与清理:应用运行会产生日志,需要定期管理,避免磁盘被占满。
- PM2 日志默认在
~/.pm2/logs/目录下。可以配置日志轮转。 - Nginx 日志在
/var/log/nginx/。可以使用logrotate工具自动管理。 - 建议定期(如每周)检查日志文件大小。
- PM2 日志默认在
11. 常见问题与排查方法
部署过程中难免会遇到问题。下表列出了一些常见问题及其解决方法。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 浏览器访问服务器 IP 显示 “无法连接” 或 “连接被拒绝” | 1. 服务器防火墙或安全组未开放 80/443 端口。 2. Nginx 未运行。 3. 域名 DNS 未生效。 | 1.sudo systemctl status nginx检查 Nginx 状态。2. curl -I http://localhost在服务器本地测试。3. 使用 ping your_domain.com检查 DNS 解析。 | 1. 配置云服务器安全组,放行 80 和 443 端口入站规则。 2. 启动 Nginx: sudo systemctl start nginx。3. 等待 DNS 生效或检查解析设置。 |
| 访问网站显示 “502 Bad Gateway” | 1. 后端 Node.js 应用(PM2)未启动或崩溃。 2. Nginx 配置中 proxy_pass的端口错误。3. Node.js 应用启动失败(如端口被占用、依赖缺失)。 | 1.pm2 list检查应用状态。2. pm2 logs your-app-name查看应用错误日志。3. netstat -tulnp | grep :3000检查 3000 端口是否被监听。 | 1. 重启 PM2 应用:pm2 restart your-app-name。2. 检查 Nginx 配置中的 proxy_pass地址是否为http://localhost:3000。3. 根据应用日志修复错误,可能是缺少环境变量或模块。 |
| 访问网站显示 “404 Not Found” (Nginx) | 1. Nginx 的root或location配置错误。2. 请求的静态文件不存在。 | 1. 检查 Nginx 配置文件语法:sudo nginx -t。2. 检查 Nginx 错误日志: sudo tail -f /var/log/nginx/error.log。 | 1. 修正 Nginx 配置文件中root指令的路径或location规则。2. 确保 .output/public目录下的文件已正确上传。 |
| 页面样式丢失或 JS 不加载 | 1. 静态资源路径错误。 2. Nginx 配置中未正确设置静态资源 location。 3. 构建生成的资源哈希不匹配。 | 1. 浏览器开发者工具 Network 面板查看资源加载状态(404?)。 2. 检查 /_nuxt/路径下的文件是否能直接访问。 | 1. 确保 Nginx 配置中包含了处理/_nuxt/的 location 块,且alias路径正确。2. 重新执行 npm run build并上传新的.output目录。 |
| PM2 应用频繁重启或状态为 “errored” | 1. 应用代码存在未捕获的异常。 2. 服务器内存不足。 3. 端口冲突。 | 1.pm2 logs your-app-name --lines 100查看详细错误堆栈。2. free -h查看内存使用情况。3. lsof -i :3000查看 3000 端口被谁占用。 | 1. 根据日志修复代码 Bug。 2. 增加服务器内存,或优化应用内存使用(如减少全局变量缓存)。 3. 更改 Nuxt 应用启动端口(在 nuxt.config.ts中配置nitro.port),或停止占用端口的进程。 |
| HTTPS 证书申请失败 (Certbot) | 1. 域名 DNS 未正确解析到服务器 IP。 2. 服务器 80 端口被防火墙阻止。 3. 之前配置的 Nginx 站点文件有误。 | 1.sudo certbot certificates查看现有证书。2. sudo tail -f /var/log/nginx/error.log在申请时查看 Nginx 日志。3. 使用在线工具检查域名解析。 | 1. 确保域名 A 记录指向正确的服务器 IP,并等待生效。 2. 确保服务器安全组和本地防火墙开放 80 端口。 3. 暂时简化 Nginx 站点配置,只保留最基本的 server 块,再运行 Certbot。 |
12. 最佳实践与使用建议
为了让你的生产环境更稳定、更易于维护,可以参考以下建议:
使用环境变量管理配置:不要在代码中硬编码数据库连接、API 密钥等敏感信息。使用
.env文件,并在服务器上通过export或 PM2 的env选项设置。在nuxt.config.ts中可以通过runtimeConfig来读取。# 在服务器上设置环境变量 export API_BASE_URL=https://api.example.com # 或者在 PM2 启动时指定 pm2 start ecosystem.config.cjs// ecosystem.config.cjs module.exports = { apps: [{ name: 'my-app', script: '.output/server/index.mjs', env: { NODE_ENV: 'production', API_KEY: 'your-secret-key-here', }, }] };实现 CI/CD 自动化:手动上传文件效率低下且易出错。可以考虑使用 GitHub Actions、GitLab CI 或 Jenkins 等工具,在代码推送到特定分支时,自动执行构建、测试、部署到服务器的流程。
定期备份与更新:
- 备份:定期备份你的项目目录 (
/var/www/your-app-name)、Nginx 配置 (/etc/nginx/) 和数据库(如果有)。 - 更新:定期更新服务器系统安全补丁 (
sudo apt update && sudo apt upgrade)、Node.js 版本和项目依赖 (npm update),以修复安全漏洞。
- 备份:定期备份你的项目目录 (
监控与告警:除了基础的
pm2 monit,可以考虑集成更专业的监控工具,如:- 日志集中管理:使用
pm2-logrotate模块管理 PM2 日志,或使用 ELK Stack、Loki 等工具。 - 应用性能监控:使用 Sentry 监控前端错误,使用 New Relic 或 AppSignal 监控 Node.js 后端性能。
- 服务器监控:使用 Netdata、Prometheus + Grafana 监控服务器整体的 CPU、内存、磁盘、网络状态。
- 日志集中管理:使用
安全加固:
- 禁用 SSH 密码登录,改用密钥对认证。
- 保持非 root 用户运行应用。
- 为 Nginx 配置适当的安全头,如 CSP、HSTS 等。
- 定期检查并更新依赖项中的安全漏洞 (
npm audit)。
完成首次部署只是开始。后续的代码更新可以通过一个简单的脚本来实现:在本地构建后,通过rsync同步.output目录到服务器,然后在服务器上执行pm2 reload your-app-name即可实现无缝重启,几乎不影响用户访问。掌握这套流程后,你就能自信地将任何 Vue3 + Nuxt4 项目部署上线,并为其稳定运行保驾护航。