本文目录导读:
这是一个很关键的问题,全栈框架(如 Next.js, Nuxt.js, Remix, SvelteKit 等)的部署方式与传统的前后端分离(后端 API + 前端静态文件)有显著不同,因为它既包含前端静态资源,也包含后端 Node.js 服务(Server Side Rendering, API Routes)。
下面以最主流的 Next.js 为例,讲解全栈框架的几种主流部署方案及其核心原理,其他框架(如 Nuxt, Remix)逻辑类似,只是命令和平台适配不同。
核心概念:全栈框架的本质
- 开发时:代码被编译、打包为可执行的 Node.js 应用。
- 运行时:服务器启动一个 Node.js 进程(
next start或nuxt start),它同时负责:- 响应页面请求(SSR 或 SSG 生成的 HTML)。
- 处理 API 请求(
/api/*)。 - 提供静态文件(如 CSS、JS、图片)。
你不能简单地将静态文件丢到 Nginx 或 CDN 上(除非你只用了 SSG 模式),而是需要部署一个能运行 Node.js 的服务器环境。
全托管平台(最推荐,对新手最友好)
这是目前最主流、最省心的方式,平台会处理服务器配置、自动扩缩容、SSL 证书、CDN 分发等。
Vercel
- 适用框架:Next.js(亲儿子),SvelteKit, Remix, Astro 等。
- 原理:Vercel 是 Next.js 的开发公司推出的平台,它会自动检测你的项目,将 SSR 部分部署为边缘函数或Serverless Function,将静态资源部署到全球 CDN。
- 步骤:
- 代码托管:将代码推到 GitHub/GitLab/Bitbucket 仓库。
- 导入项目:在 Vercel 官网点击 “New Project”,选择你的仓库。
- 自动配置:Vercel 会自动识别框架,设置
npm run build和输出目录(next dev被自动替换为生产模式)。 - 环境变量:在项目设置里添加
DATABASE_URL,API_KEY等。 - 部署:点击 Deploy,之后每次推送代码,Vercel 会自动重新构建并部署(CI/CD)。
Netlify
- 适用框架:Nuxt.js, Gatsby, Next.js (需插件), Astro, SvelteKit 等。
- 原理:与 Vercel 类似,提供 Serverless Functions 支持 SSR。
- 步骤:基本同上,在 Netlify 官网关联仓库,配置构建命令和输出目录,Nuxt 对其有原生优化。
Cloudflare Pages + Functions
- 适用框架:SvelteKit, Astro, Remix, Next.js (实验性)。
- 原理:利用 Cloudflare 全球边缘网络,将 SSR 运行在边缘(Workers/Pages Functions),延迟极低。
- 优势:自动 DDoS 防护、免费 SSL、极快的全球响应。
对于个人项目、小团队或不想管理服务器的人,优先选择 Vercel 或 Netlify。
云服务器自托管(核心深入理解)
如果你对控制权、成本、或特定合规要求有较高需求,此方案更合适。
核心步骤(以 Next.js + Ubuntu + PM2 + Nginx 为例)
-
服务器准备
- 购买一台云服务器(阿里云、腾讯云、AWS EC2 等)。
- SSH 登录,安装 Node.js (>=18),Git。
-
代码拉取和构建
# 登录服务器 ssh root@你的服务器IP # 安装 Node.js (推荐使用 nvm) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash nvm install 20 # 克隆代码并安装依赖 git clone https://github.com/你的用户名/你的项目.git cd 你的项目 npm install # 设置环境变量 (生产环境数据库地址、密钥等) # 新建 .env 文件,填入你的变量 echo "DATABASE_URL=your_url" >> .env echo "SECRET_KEY=your_key" >> .env # 构建生产版本 (构建后生成 .next 文件夹) npm run build
-
进程管理——PM2 (关键)
- 直接用
npm start启动的话,关掉 SSH 窗口进程就会挂掉,PM2 可以让 Node.js 应用后台运行,并实现崩溃自动重启。# 安装 PM2 npm install -g pm2
启动应用 (使用 ecosystem.config.js 文件 或 直接命令行)
pm2 start npm --name "my-next-app" -- start
保存进程列表,以便服务器重启后自动恢复
pm2 save pm2 startup # 按提示执行命令
- 直接用
-
反向代理——Nginx (关键)
-
默认 Next.js 运行在
localhost:3000,你需要用 Nginx 监听 80/443 端口,并将请求转发给 3000。# 编辑 /etc/nginx/sites-available/your-project server { listen 80; server_name your-domain.com; # 你的域名 location / { proxy_pass http://127.0.0.1:3000; # 转发到 Next.js proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
启用配置
ln -s /etc/nginx/sites-available/your-project /etc/nginx/sites-enabled/ nginx -t # 测试配置 systemctl restart nginx
-
-
配置 SSL (HTTPS)
# 安装 Certbot (Let's Encrypt) sudo snap install --classic certbot sudo certbot --nginx -d your-domain.com
自托管需要你掌握 Linux、PM2、Nginx 等工具,但提供了数据中心级别的控制力,适合有运维能力的团队。
容器化部署(Docker + 编排)
适合微服务架构、多团队协作、环境一致性要求高的场景。
-
写 Dockerfile
# 基于 Node 镜像 FROM node:20-alpine AS base FROM base AS deps WORKDIR /app COPY package*.json ./ RUN npm ci --only=production FROM base AS runner WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . ENV NODE_ENV=production EXPOSE 3000 # 构建 (Next.js) RUN npm run build # 启动 CMD ["npm", "start"]
-
部署到容器平台
- 单机:使用
docker-compose同时启动你的 App + 数据库 + Redis。 - 集群:推送到 Docker Hub 或私有仓库,然后在 Kubernetes (K8s) 或 Docker Swarm 上编排(自动扩缩容、滚动更新)。
- 单机:使用
框架特定注意事项
| 框架 | 部署关键点 | 推荐平台 |
|---|---|---|
| Next.js | 默认模式是 SSR,如果你用 output: 'export' 或 next.config.js 里的 output: 'standalone',可以生成纯静态文件或极小的 Docker 镜像。 |
Vercel 或 Serverless |
| Nuxt.js | nuxt build 后默认也是 Node 服务,支持 nuxt generate 生成纯静态站点,SSR 模式推荐 Netlify 或 Vercel。 |
Netlify, Vercel |
| SvelteKit | adapter-node (自托管), adapter-vercel, adapter-netlify, adapter-cloudflare,根据你选择的不同 adapter,部署流程完全不同。 |
Cloudflare Pages (速度极快) |
| Remix | 同样依赖适配器。@remix-run/vercel, @remix-run/netlify, @remix-run/architect (AWS Lambda)。 |
Vercel, Fly.io |
关键环境变量
无论如何部署,永远不要在代码里硬编码敏感信息,使用环境变量管理:
- 开发环境:
.env.local文件。 - 生产环境:部署平台的控制台(Vercel / Netlify 设置 > 环境变量)或服务器上的
.env文件(确保.env在.gitignore中)。
一句话指南
- 小型项目 / 个人作品 → Vercel (Next.js) 或 Netlify (Nuxt/SvelteKit)。
- 中型项目 / 公司内部 → 云服务器 + PM2 + Nginx。
- 大型项目 / 微服务 / 复杂运维 → Docker + Kubernetes (K8s)。
- 追求极致性能 / 边缘计算 → Cloudflare Pages + Workers。
第一次上线,建议先用 Vercel 跑通流程,体验一键部署的快乐,之后再深入理解自托管的细节。