如何为多个客户托管一个应用程序?

如何为多个客户托管一个应用程序?

我使用 NextJS 构建了一个 B2B 销售的 Web 应用,用户(我的客户)可以在其中签到某个位置。他们提供自己的姓名并获得签到号码。该应用显示与客户相关的信息(营业时间、地址等)

应用程序的第二部分是一个管理面板,供我的客户登录并查看所有姓名和签到号码,并可以提供更多信息。

目前我处于测试阶段,我的客户是朋友的公司,但应用程序扩展得很好,我需要比以下更好的方法:

  • 我的客户购买了 VPS 和域名
  • 我安装了一个 LEMP 堆栈
  • 我将 nginx 中的域名代理到 localhost:3000
  • 我配置数据库来存储客户
  • 我将应用程序的根目录复制到服务器并运行它(npm run build && npm run start)

我为每一位客户(目前为 25 位)都这样做。当有新客户或应用程序更新时,这是一项艰苦的手动工作。非常重要的是,我的客户不会看到其他公司正在使用我的应用程序。

我现在想要实现的是以下想法,并且我想知道是否有更好的方法或者这是否是一种好的做法:

  • 我想扩展到 500 多个客户
  • 我使用自己的 VPS
  • 每个客户都会获得我自己域名的一个子域名(这对我的客户来说没问题)
  • 我的客户不再需要额外的服务器
  • 我在 MySQL 数据库中创建了一个表,其中包含客户信息(营业时间、地址等)
  • 在 Nextjs 应用中,我检测子域并查询我的数据库
  • 我有与配置表相关的签到客户表
  • 我开始我的应用程序实例
  • 我将所有子域名定位到该实例
  • 我的客户有管理员登录屏幕,一旦登录,他们就会加载与登录相关的数据(使用 JWT,以便客户端无法从其他客户端获取数据)
  • 对于新客户,我只需添加一个新的子域和一个 MySQL 行,他们就可以开始使用了。这很容易管理,如果有更新,我只需更新我的一个应用程序实例即可。

答案1

您可能应该研究一下云托管解决方案,例如 Azure。

我建议研究如何容器化您的应用程序,并将其链接到您喜欢的外部数据库。 Azure、AWS 和 Google 都支持运行包含您的应用程序的 docker 容器 - 这或多或少就是容器的用途。

您可以编写所有云服务中资源创建的脚本,这样您就可以通过一键式简单设置进行入职。

结合 Docker 镜像的私有存储库,这可以简化应用程序的更新,因此维护就不会那么麻烦了。

如何设置的具体细节在很大程度上取决于您的应用程序的结构。

相关内容