![如何为多个客户托管一个应用程序?](https://linux22.com/image/773624/%E5%A6%82%E4%BD%95%E4%B8%BA%E5%A4%9A%E4%B8%AA%E5%AE%A2%E6%88%B7%E6%89%98%E7%AE%A1%E4%B8%80%E4%B8%AA%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我使用 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 镜像的私有存储库,这可以简化应用程序的更新,因此维护就不会那么麻烦了。
如何设置的具体细节在很大程度上取决于您的应用程序的结构。