Linux 上部署 Next.js 服务端渲染(SSR)网站的完整指南

在将 Next.js 应用部署到生产环境时,很多团队选择使用托管服务,但对中大型项目或希望控制环境的人来说,在 Linux 上自建部署是一种常见方案。下面将从头到尾介绍在 Linux 上部署支持服务端渲染(SSR)的 Next.js 网站的流程与注意事项。

准备阶段:环境与前提条件

1. Node.js 与 npm / yarn 安装

确保服务器上安装了合适版本的 Node.js(一般建议 LTS 版本或 Next.js 官方推荐版本),以及 npm 或 yarn 包管理工具。

2. 代码准备与构建脚本

在 package.json 中应存在如下脚本:

"build": "next build"
"start": "next start"

构建时会生成优化后的产物。Next.js 支持以 Node.js 服务器方式运行。

官方文档也说明 Next.js 可作为 Node.js 服务器、Docker 容器或静态导出方式部署。

3. 域名、DNS 解析与 SSL 证书

如果你要用自己的域名,需在 DNS 上指向服务器 IP,并计划使用 SSL(比如用 Let’s Encrypt 获取免费证书)。

4. 服务器安全与基础配置

开放必要端口(如 80, 443, 或应用端口如 3000),关闭不必要服务,做好防火墙(如 ufw、iptables)设置。

部署流程概览

整体流程通常如下:

  1. 在服务器上 拉取 / 上传 项目代码
  2. 安装依赖 & 构建项目
  3. 启动 Next.js 服务(next start)
  4. 使用反向代理(如 Nginx、Apache)将外部请求转发到 Next.js 服务
  5. 使用进程管理工具(如 pm2、systemd)保证服务稳定运行
  6. 配置 SSL、缓存与安全优化
  7. 自动部署 / CI 流程(可选)

下面详细讲每一步。

详细步骤

步骤 1:上传或克隆代码

在服务器上使用 Git 克隆项目仓库,或通过 scp、rsync 上传代码包。

确保代码与项目目录结构完整,包括 package.json、next.config.js、pages/app 目录、静态资源 public 等。

步骤 2:安装依赖与构建项目

在服务器项目目录执行:

npm install   # 或 yarn install
npm run build

构建成功后,Next.js 会产出 .next、next.config.js、public 等目录与文件。

步骤 3:启动服务

构建完成后,用如下命令启动服务:

npm run start

默认情况下,Next.js 服务会监听 3000 端口(或配置中的其他端口),以 Node.js 服务器方式运行。此时服务端渲染功能(SSR、API 路由、中间件等)可正常工作。

要使服务长期运行并自动重启,你应该借助进程管理工具。

步骤 4:使用进程管理工具保持服务存活

常见方式有:

  • pm2:一个流行的 Node.js 进程管理工具。可通过 pm2 start npm --name your-app -- start 启动,并设置开机自启动。
  • systemd:在 Linux 上创建一个 systemd 服务文件,用来管理 Next.js 应用作为守护进程启动、重启等。

使用进程管理工具的好处是:服务崩溃会自动重启、日志管理方便、集成开机启动等。

步骤 5:配置 Nginx(反向代理)

因为你不希望外部用户直接访问 Next.js 的 3000 端口,而是通过标准的 HTTP/HTTPS(80/443)端口访问,你可以用 Nginx 做反向代理:

在 Nginx 配置中,类似如下:

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

如有 SSL,则还需监听 443,并加上证书配置。你也可以把 SSL 配置在 Nginx 层,由 Nginx 处理 HTTPS,再代理到内部 Next.js 服务。

反向代理可以隐藏真实端口,将请求统一入口,同时还能做缓存、压缩、负载均衡等配置。

步骤 6:SSL 与安全优化

使用 Let’s Encrypt 等服务为你的域名获取免费 SSL 证书,并在 Nginx 中配置自动续期。

在 Nginx 中开启 gzip 压缩、HTTP/2、TLS 加密协议优化(禁用过旧协议与弱加密套件)。

设置适当的 HTTP 安全头部(如 X-Frame-Options、X-Content-Type-Options、Strict-Transport-Security 等)。

如果流量较大,可以启用缓存机制(例如缓存静态资源、启用浏览器缓存头)。

步骤 7:日志、监控与健康检查

进程管理工具(如 pm2)一般会收集标准输出 / 错误日志。定期检查日志是否有错误或异常。

配置监控工具(如 Prometheus + Grafana、New Relic、Datadog、简单的脚本监测)监控响应时间、错误率、资源使用(CPU/内存/磁盘)。

可设定健康检查接口(如 /health)供外部探针检测服务状态。

步骤 8:自动部署 / CI 流程(可选)

为了方便未来更新与版本部署,可以设定 GitHub Actions / GitLab CI / Jenkins 等流水线,将最新代码自动部署到服务器上:

  • 提交代码后触发构建流程
  • 在服务器上拉取代码、安装依赖、构建、重启服务(或 rolling deploy)
  • 保证部署过程中无宕机或降级方案

这样能够提升部署效率与稳定性。

注意事项与进阶优化

禁用缓冲 / 支持流式响应

如果你的 Next.js 应用使用 Streaming / Suspense / Edge 等特性,需要在 Nginx 中禁用缓冲(如 proxy_buffering off; 或 X-Accel-Buffering off),以确保响应能够实时流式传递给客户端。

Image 优化依赖

若你在项目中使用 Next.js 的 Image 组件和优化功能,建议在服务器安装 sharp 库,以加快图片处理效率。

资源隔离 / 多实例部署

对于高负载场景,可以用多个实例(多个端口) + Nginx 负载均衡。或将应用 Docker 化,使用容器编排(如 Kubernetes / Docker Swarm)部署。

缓存层 / CDN 分发

静态资源(如 /public 中的图片、CSS/JS)可以单独部署到 CDN,加快访问速度与减轻服务器压力。

环境变量管理

在生产环境中通过 .env.production 或环境变量管理敏感配置信息(如数据库连接、API Key 等),并避免将这些信息写死在代码中。

版本控制与回滚机制

部署时保留旧版本备份,以便在新版本出现问题时快速回滚。

总结

通过以上步骤,你就可以在 Linux 服务器上搭建一套稳定、支持服务端渲染的 Next.js 应用:从准备环境、构建项目、使用反向代理、进程管理,到安全优化、监控及自动部署,形成完整流程。这样的部署方式既可灵活控制,又可发挥 Next.js SSR 的 SEO 与性能优势。

评论 添加
暂无评论,来聊两句?