推到云上
PaaS提供了一个就绪的应用部署平台其中带了若干扩展服务,例如数据库和消息brokers。
最流行的两个Paas平台是:Cloud Foundry、Heroku
1、部署到Cloud Foundry
它来自于Pivotal,赞助Spring框架以及Spring平台中的其他库的公司就是它。其中一个最吸引人的事情就是
它即是开源的,同时也有若干商业发行版。它甚至可运行在一个公司数据中心的防火墙里,提供一个私有云。
我们准备将reading-list应用部署到Pivotal Web Services上,它是一个公共的Cloud Foundary,托管地址在
http://run.pivotal.io/ 。但你要先注册个账号。PWS提供了一个60天的免费试用,在这期间都不需要你提供任何信用卡信息。
一旦注册了PWS账号,下一步就是下载并安装cf命令行工具,从此地址下载,
https://console.run.pivotal.io/tools ,用cf工具将你的程序推送到它上面。
不过,首先,你需要用cf登录你的PWS账号:
C:\Users\Administrator>cf login -a api.run.pivotal.io
API endpoint: api.run.pivotal.io
Email> fanjg_ajy@163.com
Password>
Authenticating...
OK
Targeted org fanjg_ajy-org
Targeted space development
API endpoint: https://api.run.pivotal.io (API version: 2.96.0)
User: fanjg_ajy@163.com
Org: fanjg_ajy-org
Space: development
接下来是推送你的程序:
$ cf push sbia-readinglist -p build/libs/readinglist.war
其中sbia-readinglist是你给应用在Cloud Foundry上取的一个名字,因此它必须不能和其他应用名冲突,它会作为一个子域名用来访问你的应用。为此,它提供了一个选项可用来生成随机域名,
但你还是要提供域名参数,但有两个随机可供选择的单词将被追加到你提供的域名,这样就生成了子域名。
不仅仅是WAR,包括可执行JAR,甚至未编译的Groovy脚本——run via the Spring Boot CLI。
如果一切顺利的话,就应该可以访问部署好的应用了。
由于该应用使用的数据库是嵌入式的H2数据库,因此应用重启后,数据就丢失了。但Cloud Foundry
提供了几个数据库可供你选择,包括MySQL以及PostgreSQL,它们以marketplace services形式存在。
因为我们的程序中已经包含了PostgreSQL JDBC驱动,那就用PostgreSQL服务吧,此服务名叫
elephantsql。
elephantsql服务有几个不同的计划可供选择,从small development-sized databases到
large industrial-strength production databases。
C:\Users\Administrator>cf marketplace -s elephantsql
Getting service plan information for service elephantsql as fanjg_ajy@163.com...
OK
service plan description free or paid
turtle 4 concurrent connections, 20MB Storage free
panda 20 concurrent connections, 2GB Storage paid
hippo 300 concurrent connections, 100 GB Storage paid
elephant 300 concurrent connections, 1000 GB Storage, 500Mbps paid
那我们就假设选的是turtle吧。但现在要创建此数据库服务的一个实例,执行如下命令:
C:\Users\Administrator>cf create-service elephantsql turtle readinglistdb
Creating service instance readinglistdb in org fanjg_ajy-org / space development as fanjg_ajy@163.com...
OK
服务实例创建完毕后,接下来需要将其绑定到我们的应用上,执行命令
$ cf bind-service sbia-readinglist readinglistdb
将一个服务绑定到一个应用,只不过就是为应用提供一些细节(存储在环境变量VCAP_SERVICES中)关于如何连接到这个服务。我们可以重写应用读取此环境变量,使用它提供的信息来访问数据库服务,但没这个
必要,相反,执行下面的命令就行了
$ cf restage sbia-readinglist
上面的命令会强制Cloud Foundry重新部署应用并获取VCAP_SERVICES的值。它这么做的时候,
你会发现我们的应用声明了一个DataSource bean,并用引用了那个数据库服务的DataSource替换了。
好,一切都可以了。