将 Web 应用部署到 Pivotal Web Services 中
步骤
1:通过http://docs.run.pivotal.io/starting/注册账户
2:下载并安装客户端工具cf-cli
3:执行命令./gradlew assemble 进行打包成jar文件
4:执行命令cf login -a api.run.pivotal.io -u <acct> -p <pwd> -o <org> -s development
5:执行命令cf push your-app-name -p build/libs/<project>.jar
6: 根据网页console终端提示的URL登陆到系统。
7:在 src/main/resources 中创建名为 application-cloud.properties 的属性文件,当我们的应用在 PWS 中运行的时候,就会使用这个文件
spring.profiles.active=prod,redis
spring.redis.host=${cloud.services.redis.connection.host}
spring.redis.port=${cloud.services.redis.connection.port}
spring.redis.password=${cloud.services.redis.connection.password}
upload.pictures.uploadPath=file:/tmp
这会将 Redis 实例与应用进行绑定并激活另外两个 profile:prod 和 redis。
8:最后一件需要做的事情就是禁用 Spring Session 的一项特性,在我们的主机实例上是无
法使用该特性的:
@Bean
@Profile({"cloud", "heroku"})
public static ConfigureRedisAction configureRedisAction() {
return ConfigureRedisAction.NO_OP;
}
说明
在应用服务方面,我们可以有很多的服务可供选择。其中有一个就是 Redis Cloud,它
有一个免费计划,带有 30MB 的存储空间,你可以选择使用这个计划。
通过这种方式,为其选择一个你喜欢的名字然后将其绑定到应用中。默认情况下,Cloud
Foundry 将会注入一些服务相关的属性到环境当中:
¿ cloud.services.redis.connection.host
¿ cloud.services.redis.connection.port
¿ cloud.services.redis.connection.password
¿ cloud.services.redis.connection.uri
这些属性会遵循相同的命名约定,所以如果你添加了多项服务的话,可以很容易地对
其进行跟踪。
默认情况下,Cloud Foundry 会启动 Spring 应用并激活 Cloud profile。
注意,在云中使用文件系统要遵循不同的规则,参考
如下的链接以了解更多信息:http://docs.run.pivotal.io/devguide/deploy-apps/prepare-to-deploy.
html#filesystem。
将 Web 应用部署到 Heroku 中
步骤:
1:在https://www.heroku.com/注册账户,需要翻墙软件配合,否则没有验证码
2: 在https://toolbelt.heroku.com 中下载heroku的客户端装包
3:使用 heroku login 命令将账号与 toolbelt 进行关联
4:如果你已经通过 UI 创建了应用,那么到应用的根目录下并通过如下的命令创建 Git
remote:heroku git:remote -a yourapp。
这些命令所做的就是为 Git repository 添加一个名为 heroku 的 Git remote。在 Heroku 上
部署的过程只是将我们的一个分支推送到 Heroku 上。remote 上安装的 Git hook 将会处理好剩余的事情。
5:Gradle 构建打包会自动在应用的根目录下尝试运行“./gradlew stage”命令。(你可以通过该链接,获取 Gradle 构建打包的更多信息:
https://github.com/heroku/heroku-buildpack-gradle)
我们还没有名为“stage”的任务,添加如下的代码到 build.gradle 文件中:
task stage(type: Copy, dependsOn: [clean, build]) {
from jar.archivePath
into project.rootDir
rename {
'app.jar'
}
}
stage.mustRunAfter(clean)
clean << {
project.file('app.jar').delete()
}
6:应用的根目录下创建名为 Procfile 的文件:
web: java -Dserver.port=$PORT -Dspring.profiles.active=heroku,prod
-jar app.jar
7:隐私信息从环境变量中取出spring.social.twitter.appId=${twitterAppId} 并且隐私信息保存到环境变量中heroku config:set twitterAppId=appId (或者到 dashboard 的页面,在 settings 标签页配置环境变量)
8:向服务器推送分支git push heroku master后自动执行
9:通过问 http://yourapp.herokuapp.com访问应用
--------------------------以下支持REDIS
10:执行heroku addons:create heroku-redis:test 激活了这个 add-on,当应用在 Heroku 运行的时候,会有一个名为 REDIS_URL 的环境变量可供使用。
11:使用 heroku config 命令来检查这个变量是否已经定义
12:调整 RedisConnectionFactory 类适应 URL。
13:修改Profile web: java -Dserver.port=$PORT -Dspring.profiles.
active=heroku,redis,prod -jar app.jar
说明:
第五步将会定义名为 stage 的任务,它将会复制 Spring Boot 在应用的根目录下所生成的 JAR 包并将其命名为 app.jar。
按照这种方式,这个 JAR 会很容易找到。stage 任务依赖于 clean 和 build 这两项 任务,这就意味着在 stage 任务启动之前会首先执行这两项任务。默认情况下,Gradle 会尝试优化任务的依赖图,所以我们必须提供一个提示,强制 clean 任务在 stage 之前执行。
最后,我们为已有的 clean 任务添加一条新的指令,用来删除生成的 app.jar。