运行 Cloud Foundry 托管应用 - 用于 Java 开发者¶
本指南介绍了如何部署、注册和测试第一个应用,以及如何注销和删除该应用。
有关 MindSphere 上 Cloud Foundry 托管应用的更多信息,请参见 Cloud Foundry 应用基础知识。
入门指南¶
先决条件¶
在将应用部署到 Cloud Foundry 和 MindSphere 时,必须满足以下先决条件:
- 开发者租户上存在 MindSphere 用户账户。
如果没有账户,请联系您的租户管理员。有关说明,请参见为新用户提供访问。 - Cloud Foundry 命令行接口 (CF CLI)
从 https://github.com/cloudfoundry/cli下载最新版本,并按安装说明操作。 - 一个 Cloud Foundry 角色,允许推送应用,例如
SpaceDeveloper
。 - 一个 MindSphere 开发者角色,可以是
mdsp:core:Developer
,也可以是mdsp:core:DeveloperAdmin
。
Cloud Foundry
必须为新用户分配一个 Cloud Foundry 角色(参见 向 Cloud Foundry 添加新用户)。
要使用示例应用,还必须满足以下先决条件:
代理服务器
如果使用公司代理服务器操作,则必须为 gradle 设置相应的系统属性,例如,通过环境变量 JAVA_TOOL_OPTIONS
。 此外,还必须为 Maven 配置代理服务器。示例配置如下:
Maven配置示例
将 Maven 的以下配置复制到 ~/.m2/settings.xml
文件中:
<settings>
<proxies>
<proxy>
<id>http_proxy</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>{yourProxyIP}</host>
<port>{yourProxyPort}</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
<proxy>
<id>https_proxy</id>
<active>true</active>
<protocol>https</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>{yourProxyIP}</host>
<port>{yourProxyPort}</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
</proxies>
</settings>
Windows 上的环境路径
在 Windows 上,可能需要将 Maven 和 JDK 路径添加到 PATH
variable 中。
部署和注册应用¶
本部分介绍如何在 Cloud Foundry 上部署示例应用,并使用 Developer Cockpit 在 MindSphere 网关上公开该应用。
准备示例应用¶
- 下载 Hello World 应用 (Java)。
-
使用以下程序构建仓库中描述的应用:
mvn install
-
按如下所示调整
manifest.yml
:applications: - name: hello-spring-cloud instances: 1 random-route: true path: target/hello-spring-cloud-0.0.1.BUILD-SNAPSHOT.jar memory: 1G
通过 CF CLI 将应用部署到 Cloud Foundry¶
- 在要部署应用的文件夹中打开命令行接口(CLI)。
-
如果必要,请配置代理设置。
有关代理设置的详细信息请点击这里
如果您在代理背后的公司网络中,您可能必须设置代理才能到达 Cloud Foundry 端点。 如果您遇到超时或连接问题,请与管理员联系。
像如下展示一样,为 Cloud Foundry CLI 设置代理:
```cmd tab="CMD" set http_proxy=http://PROXY_IP:PROXY_PORT set https_proxy=http://PROXY_IP:PROXY_PORT
```bash tab="BASH" export http_proxy=http://PROXY_IP:PROXY_PORT export https_proxy=http://PROXY_IP:PROXY_PORT
-
输入
cf login -a https://api.cf.{region}.{mindsphere-domain} --sso
。 - 打开由 CLI 打印的 URL 并使用您的 WebKey 凭证登陆,以获得一次性代码。
- 在 CLI 中输入一次性代码。
-
使用以下命令选择您的 Cloud Foundry org 和 space:
cf target -o {org_name} -s {space_name}
没有 Cloud Foundry Orgs 显示
如果您没有看见任何 Cloud Foundry orgs,您需要将您自己添加到 org 中。请参考How Tos for Cloud Foundry。
-
使用以下命令推送应用到您的 Cloud Foundry space:
cf push
Vendoring China 1 的依赖关系
由于中国国际网络访问不稳定,在下载依赖关系时,将应用推送到 China 1 的 MindSphere Cloud Foundry有时会失败。请参考Cloud Foundry buildpack's文档,以
vendoring
应用的依赖关系:应用路由
部署后显示的路由不会在 internet 上公开。您需要在 Developer Cockpit 中注册您的应用程序,然后才能通过 internet 访问它。
您可以使用以下内容检查应用是否已经上传到您的 Cloud Foundry Space:
cf apps
Outbound IP Addresses
MindSphere 应用通过 NAT 网关 在 Cloud Foundry 上运行。 如果这些应用需要访问您的企业网络,您的入站防火墙必须允许 NAT 网关的IP地址:
``` cmd tab="Europe 1 / Europe 2" 35.156.223.10 18.194.162.141 18.194.195.179
``` cmd tab="China 1"
101.132.123.180
106.15.159.73
47.102.201.47
47.102.210.119
将后端服务绑定到应用(可选)¶
下面的说明介绍了如何创建后端服务并将其绑定到先前部署的应用。使用 cf marketplace
获取可用后端服务的列表。
如果想要使用示例应用,请将 MongoDB Service 绑定到应用。用以下术语替换占位符:
占位符 | 术语 |
---|---|
{service_name} | mongodb34 |
{service_plan} | mongodb-xs |
{instance_name} | mongo |
{app_name} | hello-spring-cloud |
-
创建服务实例。请注意这会占用一些时间直到实例完成并运行。
cf create-service {service_name} {service_plan} {instance_name}
-
使用以下命令检查您的服务实例是否在运行:
cf services
-
将服务实例绑定到您的应用中:
cf bind-service {app_name} {instance_name}
-
重新储存应用,以便激活应用中的服务绑定:
cf restage {app_name}
在 Developer Cockpit 中注册应用¶
组件
MindSphere 上的应用可能由多个 Cloud Foundry 应用组成,这些应用具有多个端点。为了明确区分,Cloud Foundry 应用被称为**组件**。
示例应用由一个组件和一个端点组成。 实际应用通常由具有多个端点的更多组件组成。
- 从 Launchpad 中打开 Developer Cockpit 并选择**仪表盘**选项卡。
- 单击**创建新的应用**。
- 选择 类型 Standard 和 基础设施 MindSphere Cloud Foundry。
- 输入一个任意的**显示名称**和**内部名称**,这将会为成为应用 URL的一部分。初始化创建后,**内部名称**不能被更改! 像示例应用的**内部名称**一样使用
myfirstapp
。 - 输入版本编号。
- MindSphere 支持
Major.Minor.Patch
方案。 - 版本必须以 >=1 的主号码开头。
- 保存之后版本不能被更改。
- MindSphere 支持
- 为您的应用上传一个图标。
-
输入组件名称。 示例应用的组件名称为
hello-spring-cloud
。组件名称
组件名称必须与
manifest.yml
中的 Cloud Foundry 应用名称匹配。否则,生产系统中的自动注册将会失败。 -
为您的组件添加至少一个端点。如下所示,使用
/**
来匹配您应用的所有路径。- 您可以为端点使用任意路径。
- 不允许使用
/api
,因为这是为从相对路径(例如/api/iot/v3/timeseries
)调用 MindSphere api 预留的。 - 避免使用keywords,因为这是为 SQL 操作预留的。
- 您可以使用通配符。
*
匹配路径中任何字符,**
匹配任何字符和子路径。
组件路径
在 MindSphere 网关中定义的路径值必须和相应的组件匹配。查看MindSphere 网关以获得网关到组件路径的可能映射的完整列表。组件可以有一个基本路径,这在 MindSphere 网关中是不可见的。组件 URL 需要由基本路径追加。
-
输入您应用的 Cloud Foundry URL。
- 使用
cf app {app_name}
来获取您部署的应用的 URL。 示例应用的 URL 为https://hello-spring-cloud-myMindsphereTenant.apps.eu1.mindsphere.io
。
- 使用
-
点击**保存**。
您将被重定向到应用详细信息。 您的应用程序处于In-Development
状态,并且准备好注册了。
配置应用角色和范围¶
MindSphere 中的每个应用都受到特定角色和范围的保护以防止未经授权的访问。MindSphere 自动为新应用创建两个默认角色:
- admin (
mdsp:{tenant_name}:{app_name}.admin
) - user (
mdsp:{tenant_name}:{app_name}.user
)
关于创建自定义应用角色,请参见保护您的应用。使用 Developer Cockpit 配置这些角色的权限。您可以分配核心角色,该角色授权访问 MindSphere APIs,并定义应用范围:
- 切换到**授权管理**选项卡。
- 选择应用。
- 创建一个应用范围并选择分配给哪个角色。
- 添加一个核心角色,使其能够访问各自的 API(可选)。下面的图片展示了如何获取 Time Series APIs 的只读权限。
- 保存不是必须的,除非您在之后将其中一个关联更改为应用特定的角色。
应用的 Authorization Management
应用的角色和范围配置并不特定于应用版本。
注册应用¶
应用必须在 MindSphere 网关 上已注册,才能从 Launchpad 对其进行访问。这将启用从租户特定 MindSphere URL 到内部 Cloud Foundry 应用的路由。注册过程遵循积极的安全概念,即要求明确注册应用的每个端点。
- 切换到**仪表盘**选项卡。
- 打开应用详细信息。
- 单击**注册**。
MindSphere 使用以下方案注册应用:{tenant_name}-{app_name}-{tenant_name}.{region}.{mindsphere-domain}
在此示例中,可以在 myMindsphereTenant-myfirstapp-myMindsphereTenant.eu1.mindsphere.io
下找到应用。
分配应用角色¶
只有当用户的 OAuth 令牌中存在一个应用范围,应用才在 Launchpad 上出现。在这种情况下,如果分配给用户一个应用角色:
- 从 Launchpad 中打开 Settings 应用,并切换到**角色**选项卡。
- 选择一个应用角色并单击**编辑分配**。
- 分配一个或多个用户到应用角色。
- 单击**结束编辑**。
- 登出 MindSphere 并重新登陆。
退出
用户令牌只有在登出和再次登录之后才使用新范围更新。在极少数情况下,可能需要几分钟直到角色分配在系统中传播完毕。
您的应用现在可以在 Launchpad 中使用。您的 OAuth 令牌包含应用角色中定义的所有范围和核心角色。如果没有看到应用,请验证是否已为您自己分配了应用特定角色。
从 Cloud Foundry 中注销和删除应用¶
本部分介绍如何使用 Developer Cockpit 从 MindSphere 网关注销应用,以及如何通过 CF CLI 从 Cloud Foundry 删除应用。
取消分配应用角色¶
从用户中取消分配应用角色将从 Launchpad 中删除应用。
- 从 Launchpad 启动设置并打开**角色**选项卡。
- 将用户从**已分配用户**拖动到**未分配用户**。
- 单击**结束编辑**。
您应该不能再在 Launchpad 上看到您的应用了。
注销应用¶
在 MindSphere 网关 注销应用将禁用从租户特定 MindSphere URL 到内部 Cloud Foundry 应用的路由。
- 导航至 Developer Cockpit。
- 选择应用。
- 单击**注销**并确认。
通过 Developer Cockpit 删除应用¶
- 在 Developer Cockpit 中选择应用。
- 单击**删除**并确认。
通过 CF CLI 从 Cloud Foundry 中删除应用¶
- 打开命令行接口(CLI)。
-
如果必要,请配置代理设置。
有关代理设置的详细信息请点击这里
如果您在代理背后的公司网络中,您可能必须设置代理才能到达 Cloud Foundry 端点。 如果您遇到超时或连接问题,请与管理员联系。
像如下展示一样,为 Cloud Foundry CLI 设置代理:
```cmd tab="CMD" set http_proxy=http://PROXY_IP:PROXY_PORT set https_proxy=http://PROXY_IP:PROXY_PORT
```bash tab="BASH" export http_proxy=http://PROXY_IP:PROXY_PORT export https_proxy=http://PROXY_IP:PROXY_PORT
-
输入
cf login -a https://api.cf.{region}.{mindsphere-domain} --sso
。 - 打开由 CLI 打印的 URL 并使用您的 WebKey 凭证登陆,以获得一次性代码。
- 在 CLI 中输入一次性代码。
-
使用以下命令选择您的 Cloud Foundry Org 和 space:
cf target -o {org_name} -s {space_name}
-
使用
cf apps
获取所有可用应用的列表。 - 通过
cf delete hello-spring-cloud
从 Cloud Foundry 中删除应用并确认。