全栈框架如何部署上线?

访客 全栈框架 2

本文目录导读:

  1. 启动应用 (使用 ecosystem.config.js 文件 或 直接命令行)
  2. 保存进程列表,以便服务器重启后自动恢复
  3. 启用配置

这是一个很关键的问题,全栈框架(如 Next.js, Nuxt.js, Remix, SvelteKit 等)的部署方式与传统的前后端分离(后端 API + 前端静态文件)有显著不同,因为它既包含前端静态资源,也包含后端 Node.js 服务(Server Side Rendering, API Routes)

下面以最主流的 Next.js 为例,讲解全栈框架的几种主流部署方案及其核心原理,其他框架(如 Nuxt, Remix)逻辑类似,只是命令和平台适配不同。


核心概念:全栈框架的本质

  • 开发时:代码被编译、打包为可执行的 Node.js 应用。
  • 运行时:服务器启动一个 Node.js 进程(next startnuxt start),它同时负责:
    1. 响应页面请求(SSR 或 SSG 生成的 HTML)。
    2. 处理 API 请求(/api/*)。
    3. 提供静态文件(如 CSS、JS、图片)。

你不能简单地将静态文件丢到 Nginx 或 CDN 上(除非你只用了 SSG 模式),而是需要部署一个能运行 Node.js 的服务器环境


全托管平台(最推荐,对新手最友好)

这是目前最主流、最省心的方式,平台会处理服务器配置、自动扩缩容、SSL 证书、CDN 分发等。

Vercel

  • 适用框架:Next.js(亲儿子),SvelteKit, Remix, Astro 等。
  • 原理:Vercel 是 Next.js 的开发公司推出的平台,它会自动检测你的项目,将 SSR 部分部署为边缘函数或Serverless Function,将静态资源部署到全球 CDN。
  • 步骤
    1. 代码托管:将代码推到 GitHub/GitLab/Bitbucket 仓库。
    2. 导入项目:在 Vercel 官网点击 “New Project”,选择你的仓库。
    3. 自动配置:Vercel 会自动识别框架,设置 npm run build 和输出目录(next dev 被自动替换为生产模式)。
    4. 环境变量:在项目设置里添加 DATABASE_URL, API_KEY 等。
    5. 部署:点击 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 为例)

  1. 服务器准备

    • 购买一台云服务器(阿里云、腾讯云、AWS EC2 等)。
    • SSH 登录,安装 Node.js (>=18),Git。
  2. 代码拉取和构建

    # 登录服务器
    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
  3. 进程管理——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 # 按提示执行命令

  4. 反向代理——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

  5. 配置 SSL (HTTPS)

    # 安装 Certbot (Let's Encrypt)
    sudo snap install --classic certbot
    sudo certbot --nginx -d your-domain.com

自托管需要你掌握 Linux、PM2、Nginx 等工具,但提供了数据中心级别的控制力,适合有运维能力的团队。


容器化部署(Docker + 编排)

适合微服务架构、多团队协作、环境一致性要求高的场景。

  1. 写 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"]
  2. 部署到容器平台

    • 单机:使用 docker-compose 同时启动你的 App + 数据库 + Redis。
    • 集群:推送到 Docker Hub 或私有仓库,然后在 Kubernetes (K8s)Docker Swarm 上编排(自动扩缩容、滚动更新)。

框架特定注意事项

框架 部署关键点 推荐平台
Next.js 默认模式是 SSR,如果你用 output: 'export'next.config.js 里的 output: 'standalone',可以生成纯静态文件或极小的 Docker 镜像。 VercelServerless
Nuxt.js nuxt build 后默认也是 Node 服务,支持 nuxt generate 生成纯静态站点,SSR 模式推荐 NetlifyVercel 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 跑通流程,体验一键部署的快乐,之后再深入理解自托管的细节。

标签: 前后端部署 自动化CI/CD

抱歉,评论功能暂时关闭!