# 在 VPS 上部署 Next.js：从构建到 HTTPS

您的应用程序在本地运行。在 VPS 上，它还需要能够承受 SSH 断开连接、为其资产提供服务并处理域后面的表单。本指南遵循从生产构建到公共验证的路径。

这些示例针对具有传统构建和启动脚本的 Next.js 应用程序，在具有 systemd 和现有 Nginx 反向代理的 Linux 上。根据您的环境调整路径、服务帐户和域。静态导出和请求呈现的应用程序具有不同的部署需求。

## 准备可识别的版本

从已知的提交开始，其锁定文件和与已安装的 Next.js 版本兼容的节点版本。对于 npm，npm ci 从该锁定文件安装依赖项。保留 pnpm 或 Yarn 的现有包管理器和可重复安装模式。

在发布目录或 CI 中构建，而不是在正在运行的服务器的输出目录中构建。构建可以执行应用程序代码并联系服务。提供所需的变量，而不将秘密公开。 NEXT_PUBLIC_ 值适用于浏览器并在构建期间嵌入。

```sh
node --version
npm ci
npm run build
```

## 在环回上启动生产服务器

检查启动脚本是否在下次启动时运行。开发服务器不是要保留在生产环境中的进程。绑定到 127.0.0.1 会限制对服务器及其本地代理的直接访问，从而使应用程序端口远离公共接口。

在另一个终端中，使用curl -i http://127.0.0.1:3000/ 检查真实页面。检查其内容和资产。如果选择输出：独立，请使用生成的 server.js 及其预期的目录结构，包括 public 和 .next/static。该模式有自己的入口点。

```sh
npm run start -- --hostname 127.0.0.1 --port 3000
```

## 让 systemd 管理进程

systemd 单元独立于您的会话运行服务。此示例假设现有 webapp 帐户并在 /srv/my-next-app 处发布。使用命令 -v node 检查节点路径并调整 ExecStart。该帐户需要读取该版本并仅写入需要它的应用程序位置。

将服务器变量保留在环境文件中，并具有适合服务帐户的权限。在您的环境中安装该单元后，使用 systemd-analyze verify 对其进行验证，重新加载 systemd 并启动服务。如果启动失败，请检查其日志。自动重新启动不能取代调查与内存相关的退出。

```ini
[Unit]
Description=My Next.js application
After=network.target

[Service]
Type=simple
User=webapp
WorkingDirectory=/srv/my-next-app
Environment=NODE_ENV=production
EnvironmentFile=/etc/my-next-app.env
ExecStart=/usr/bin/node /srv/my-next-app/node_modules/next/dist/bin/next start --hostname 127.0.0.1 --port 3000
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
```

## 将域路由到应用程序

在域的服务器块内，某个位置可以将请求转发到本地应用程序。以下片段涵盖了 HTTP 和流；将其与现有配置集成并在重新加载之前运行 nginx -t 。 It is not a complete TLS configuration.

该域需要解析为 VPS 并拥有可续订的有效证书。保留应用程序的主机和原始协议。在没有共享动态响应缓存的情况下开始：私有页面、cookie 和导航变体需要明确的策略。如果应用程序使用 WebSocket，请单独添加适当的 Nginx Upgrade 标头处理。

```nginx
location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_buffering off;
}
```

## 验证公共站点

来自主页的 200 响应不会验证整个应用程序。练习动态路线、缺失页面、登录、注销和表单。检查浏览器中的重定向、安全 cookie、图像和导航。

还测试流页面。如果内容通过域一次性到达，但在环回时逐渐到达，请检查每个中介处的缓冲。在切换流量之前保留以前的版本及其配置。恢复应用程序代码还需要与任何数据库迁移兼容。

## 调整和发展部署

测量空闲内存、流量峰值和部署重叠。两个版本可以短暂共存，并且基于 VPS 的构建会增加其自身的峰值。数据库和代理也属于总预算。

要评估 PRNext，请保留 Next.js 引用并在另一个目录中构建候选值。在更改应用程序的运行时之前验证应用程序的行为和性能。

[Next.js 的 VPS 内存大小](/zh/blog/nextjs-ram-vps-sizing)

[迁移前检查 PRNext 兼容性](/zh/blog/prnext-nextjs-compatibility-migration)

## Sources

[Next.js: self-hosting](https://nextjs.org/docs/app/guides/self-hosting)

[Next.js: environment variables](https://nextjs.org/docs/app/guides/environment-variables)

[Next.js: standalone output](https://nextjs.org/docs/app/api-reference/config/next-config-js/output)

[systemd: service units](https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html)

[Nginx: proxy module](https://nginx.org/en/docs/http/ngx_http_proxy_module.html)

已发表: 2026-10-30

修改的: 2026-10-30

作者: PRNext

---

语言: zh-Hans

Canonical: https://prnext.dev/zh/blog/deploy-nextjs-vps

Index: https://prnext.dev/llms.txt
