將 Web 應用部署到 Pivotal Web Services,Heroku中

將 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 實例與應用進行綁定並激活另外兩個 profileprod 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

更多信息請參考:http://docs.spring.io/spring-session/docs/current/reference/html5/#api-redisoperationssessionrepositorysessiondestroyedevent

 

將 Web 應用部署到 Heroku 中

步驟:

1:在https://www.heroku.com/註冊賬戶,需要翻牆軟件配合,否則沒有驗證碼

2: 在https://toolbelt.heroku.com 中下載heroku的客戶端裝包

3:使用 heroku login 命令將賬號與 toolbelt 進行關聯

4:如果你已經通過 UI 創建了應用,那麼到應用的根目錄下並通過如下的命令創建 Git

remoteheroku 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章