使用PostgreSQL的多租户商业应用 - 第一部分

1,058 阅读4分钟

目的

我们的目标是使用 CAP、多租户和 postgreSQL 创建并部署一个示例项目到 SAP Cloud Foundry 环境 (BTP)。然而,获得几个不同开发框架的乐高碎片有时会很麻烦。让我们快速了解一下我们将在示例项目中组合的三个框架。

  • 云应用编程模型(CAP)框架依靠SAP核心数据服务(@sap/cds)来快速构建和运送全栈业务应用程序。
  • SAP Hana学院发布了一个惊人的youtube播放列表,展示了如何将CAP项目引导为多租户SaaS解决方案。在本教程系列的第一部分中,我们要做的大部分内容都来自于SAP Hana学院。
  • Gregor WolfMike Zaschka 创建了cds-pgcds-dbm库,使CAP项目可以使用postgreSQL数据库运行。

前提条件

在深入研究之前,你要确保你有一个BTP试用版和一个Github账户。

我将在整个项目中使用VS CodeDocker,让我们把它们也安装好。一旦你得到了你的账户和软件的设置,拿起一些咖啡,在这里和我见面。

开始吧

我们将使用SAP Hana Academy的SaaS yoeman生成器来引导我们的示例项目,因此要在全球范围内安装这些软件。

npm install -g yo
npm i -g generator-saphanaacademy-saas

我喜欢从现有的github repo开始项目,我也很饿,所以我将创建一个多租户tacoshop(mt-tacoshop)。创建你自己的项目,让它成为你的,你的SaaS将迎合什么样的业务?

从终端克隆和改变主任到新项目。

git clone https://github.com/austinkloske22/mt-tacoshop.git
cd mt-tacoshop

启动Saphanaacademy SaaS生成器。下面是我的样本项目的数值,供参考。

This generator can also be run with: yo saphanaacademy-saas

? What project name would you like? mt-tacoshop
? Would you like to create a new directory for this project? No
? What is the display name of your app? Multitenant Tacoshop
? What is the description of your app? Multitenant Tacoshop SaaS
? What is the category of your app? Demo
? Would you like to include an example of using the SaaS API (view subscriptions)? Yes
? Would you like to include HANA persistence (schema separation)? No
? Will you be using a wildcard custom domain (eg: myappsaas.acme.com)? If so please enter it here - or simply press enter for none. 
? Would you like to include creation/deletion of tenant routes on subscribe/unsubscribe (using the CF API)? NB: This is not necessary when using a wildcard custom domain. Yes
? Would you like to include an example of using the destination reuse service? Yes

棒极了!通过几个终端命令和SAP学院的帮助,我们已经有了一个企业级商业应用的很大一部分开箱即用。在添加postgres适配器和连接到数据库之前,让我们确保我们的项目正在部署和订阅/子订阅正确。

登录到CF,以你的BTP试用账户为目标。

cf login -a https://api.cf.us10.hana.ondemand.com/

建立并部署项目到SAP BTP

mbt build
cf deploy ./mta_archives/mt-tacoshop_0.0.1.mtar

如果你在启动时启用创建/删除租户路由,我们还需要设置一些环境变量,在订阅/取消订阅过程中处理路由。

cf set-env mt-tacoshop-srv cf_api_user '<BTP email>'
cf set-env mt-tacoshop-srv cf_api_passwork '<BTP password>'
cf restage mt-tacoshop-srv

如果部署成功了,那就好办了!让我们继续进行BTP驾驶舱的配置。

BTP试用版的设置

在默认情况下,BTP试用版带有CF功能的账户。这就是我们部署SaaS应用程序的地方。我们想创建2个子账户,以正确展示多租户。

BTP%20Cockpit

tenants-created

创建的租户

我们原来的 "试用 "账户和这两个新创建的子账户之间的主要区别是,我们的试用账户启用了CF。应用程序在启用了CF的空间中部署和运行。"street-food "和 "tacos-and-tequilla "是我们SaaS解决方案中的消费者租户。

从任何一个租户,导航到服务市场-><你的SaaS>并创建一个服务实例。如果一切顺利,你会看到一个绿色的订阅框,并可以选择 "转到应用程序"。

Subscribe

订阅

Go%20to%20Tacoshop

转到Tacoshop

如果你启用了路由创建/删除功能,你应该会被自动带到一个类似这样的页面。如果没有,路线可以在启用CF的账户中手动创建。

Base%20Application

基本应用

上面的任何链接最初都会出现403禁止的错误。使用BTP驾驶舱为您的登录添加认证和授权。(提示:角色和角色集合已经存在于启动时创建的xs-security.json中。你可以在租户订阅成功后分配角色集合)

如果你还没有,请确保提交到github。在第二部分中,我们将部署到本地和AWS rds上的postgreSQL。