將 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。