在一台 VPS 上托管多个 React 应用程序

一个机构可能会举办多个演示、一个营销网站和一个小型内部工具。当您决定如何分配资源以及当一个应用程序收到流量峰值时会发生什么时,共享一个 VPS 是一种选择。

服务器可以托管的项目数量与可用端口无关。路线、数据库、构建和重叠峰值决定了容量。本指南解释了如何组织和验证该共享。

给每个应用程序一个边界

为每个应用程序分配一个发布目录、受监督进程、本地端口及其自己的环境变量。共享反向代理按域选择目标。重新启动应针对一项可识别的服务,而不影响其他服务。

对于不同的客户端,还要检查服务帐户和权限。共享帐户的进程可以访问该帐户可读的文件。单独的端口不是安全隔离。所需边界可能需要容器或单独的机器。

规划域和本地端口

该表说明了一种安排。将 example.com 名称替换为您的域。本地端口不是公共 URL:浏览器连接到代理。

每个域都需要有效的证书和适当的配置。检查该域的绝对链接、身份验证回调和 cookie。在不同的路径下共享一个域需要额外的前缀和资产配置。子域通常会避免这种耦合。

在小屏幕上,水平滚动表格。

示例库存,而不是容量测量。
应用领域本地监听器
营销网站www.example.com127.0.0.1:3101
演示demo.example.com127.0.0.1:3102
内部工具工具.example.com127.0.0.1:3103

重叠峰值的预算

记录每项服务的空闲、普通负载和代表性峰值使用情况。添加共享服务、操作系统和部署空间。将共享数据库计入总预算一次,有其自己的峰值。

然后同时加载两个应用程序。隔离测试可能会错过 CPU、磁盘和数据库连接的竞争。如果团队在工作时间展示演示,活动时间可能会重合。

根据您的测量结果建立内存预算

设置明确的资源边界

在具有所需控制器的系统上,systemd 可以监视和约束进程组。在测试服务的插入中,MemoryHigh 引入了回收压力,而 MemoryMax 设置了可能导致终止的硬边界。 CPUQuota 限制 CPU 时间。

该片段说明了语法。测量后替换数值;不建议使用 Next.js 尺码。应用程序达到极限可能会减慢速度或失败,因此请检查延迟、内存事件和日志。边界必须覆盖子进程以及父进程。

覆盖.conf
[Service]
MemoryAccounting=yes
MemoryHigh=512M
MemoryMax=768M
CPUQuota=100%

避免构建压倒性的邻近应用程序

与活动进程分开规划构建和清理。如果可能,构建兼容的 CI 并部署经过验证的工件。否则,将构建包含在共享资源预算中,并避免并发昂贵的编译。

每个版本使用一个目录并在切换之前进行验证。需要注意已打开的选项卡所需的现有连接和资产。数据库备份与应用程序存档保持分离;使用测试数据定期测试恢复。

评估间歇性项目的睡眠

PRNext 可以以唤醒工作为代价释放空闲工作人员的内存。当空闲时间较长并且初次访问可以接受延迟时,这可能会有所帮助。频繁的探测或后台请求可能会改变行为。

在添加项目之前,还要测试同时唤醒。 PRNext 发布的内存探针涵盖了一个小型应用程序;它没有建立保证的站点数量。数据库、代理、系统和缓存保留自己的要求。

了解睡眠设置及其局限性

验证每个应用程序的公共部署

来源和进一步阅读

返回博客