在 VPS 上部署 Next.js:从构建到 HTTPS
使用生产服务器、systemd、反向代理在 Linux VPS 上部署 Next.js 应用程序,并在切换流量之前进行检查。
一个机构可能会举办多个演示、一个营销网站和一个小型内部工具。当您决定如何分配资源以及当一个应用程序收到流量峰值时会发生什么时,共享一个 VPS 是一种选择。
服务器可以托管的项目数量与可用端口无关。路线、数据库、构建和重叠峰值决定了容量。本指南解释了如何组织和验证该共享。
为每个应用程序分配一个发布目录、受监督进程、本地端口及其自己的环境变量。共享反向代理按域选择目标。重新启动应针对一项可识别的服务,而不影响其他服务。
对于不同的客户端,还要检查服务帐户和权限。共享帐户的进程可以访问该帐户可读的文件。单独的端口不是安全隔离。所需边界可能需要容器或单独的机器。
该表说明了一种安排。将 example.com 名称替换为您的域。本地端口不是公共 URL:浏览器连接到代理。
每个域都需要有效的证书和适当的配置。检查该域的绝对链接、身份验证回调和 cookie。在不同的路径下共享一个域需要额外的前缀和资产配置。子域通常会避免这种耦合。
在小屏幕上,水平滚动表格。
| 应用 | 领域 | 本地监听器 |
|---|---|---|
| 营销网站 | www.example.com | 127.0.0.1:3101 |
| 演示 | demo.example.com | 127.0.0.1:3102 |
| 内部工具 | 工具.example.com | 127.0.0.1:3103 |
记录每项服务的空闲、普通负载和代表性峰值使用情况。添加共享服务、操作系统和部署空间。将共享数据库计入总预算一次,有其自己的峰值。
然后同时加载两个应用程序。隔离测试可能会错过 CPU、磁盘和数据库连接的竞争。如果团队在工作时间展示演示,活动时间可能会重合。
在具有所需控制器的系统上,systemd 可以监视和约束进程组。在测试服务的插入中,MemoryHigh 引入了回收压力,而 MemoryMax 设置了可能导致终止的硬边界。 CPUQuota 限制 CPU 时间。
该片段说明了语法。测量后替换数值;不建议使用 Next.js 尺码。应用程序达到极限可能会减慢速度或失败,因此请检查延迟、内存事件和日志。边界必须覆盖子进程以及父进程。
[Service]
MemoryAccounting=yes
MemoryHigh=512M
MemoryMax=768M
CPUQuota=100%与活动进程分开规划构建和清理。如果可能,构建兼容的 CI 并部署经过验证的工件。否则,将构建包含在共享资源预算中,并避免并发昂贵的编译。
每个版本使用一个目录并在切换之前进行验证。需要注意已打开的选项卡所需的现有连接和资产。数据库备份与应用程序存档保持分离;使用测试数据定期测试恢复。
PRNext 可以以唤醒工作为代价释放空闲工作人员的内存。当空闲时间较长并且初次访问可以接受延迟时,这可能会有所帮助。频繁的探测或后台请求可能会改变行为。
在添加项目之前,还要测试同时唤醒。 PRNext 发布的内存探针涵盖了一个小型应用程序;它没有建立保证的站点数量。数据库、代理、系统和缓存保留自己的要求。