詳解Spring Boot 項(xiàng)目部署到heroku爬坑
背景:最近小組進(jìn)行一個(gè)環(huán)境比較惡劣的項(xiàng)目,由于沒有真實(shí)的測(cè)試環(huán)境,決定上云,最終選擇國(guó)外的heroku,折騰半天,其中有一些坑在這里記錄下來(lái),方便網(wǎng)友及個(gè)人。
1.賬號(hào)注冊(cè)
heroku官網(wǎng): https://www.heroku.com
heroku免費(fèi)注冊(cè)賬號(hào),heroku提供的功能已經(jīng)可以滿足大部分個(gè)人需求,有特殊需求的用戶就需要進(jìn)行付費(fèi)了,比如heroku的數(shù)據(jù)庫(kù)的免費(fèi)空間只有5M,且項(xiàng)目在30分鐘內(nèi)無(wú)人訪問(wèn)就會(huì)休眠,下面是heroku對(duì)于休眠的說(shuō)明:
By default, your app is deployed on a free dyno. Free dynos will sleep after a half hour of inactivity (if they don't receive any traffic). This causes a delay of a few seconds for the first request upon waking. Subsequent requests will perform normally. Free dynos also consume from a monthly, account-level quota of free dyno hours - as long as the quota is not exhausted, all free apps can continue to run.To avoid dyno sleeping, you can upgrade to a hobby or professional dyno type as described in the Dyno Types article. For example, if you migrate your app to a professional dyno, you can easily scale it by running a command telling Heroku to execute a specific number of dynos, each running your web process type.
heroku的注冊(cè)界面:
PS:
- heroku的網(wǎng)站需要翻墻才能訪問(wèn),并且設(shè)置翻墻軟件的模式為全局模式。
- heroku貌似不接受中國(guó)有限注冊(cè)(Country可以選擇中國(guó)區(qū)域),個(gè)人使用Gmail注冊(cè)
2.安裝CLI
簡(jiǎn)單注冊(cè)完賬號(hào)以后在官網(wǎng)登陸個(gè)人賬號(hào),點(diǎn)擊Getting Started,選擇一樣自己需要的語(yǔ)言,然后選擇合適自己系統(tǒng)的版本,下載安裝CLI,本人為MAC系統(tǒng)。
3.heroku基本操作
官網(wǎng)給了比較詳細(xì)的操作說(shuō)明,這里就不一一贅述,大家可以跟著官方教程一步一步操作,這里只說(shuō)一下個(gè)人實(shí)踐過(guò)程中遇到的問(wèn)題,附送一些官網(wǎng)教程的截圖。
詳細(xì)教程請(qǐng)參見heroku官網(wǎng)
4.遇到的問(wèn)題
上傳項(xiàng)目到heroku時(shí),一般系統(tǒng)會(huì)自動(dòng)幫你打包并運(yùn)行你的項(xiàng)目,這里我遇到兩個(gè)問(wèn)題:
git的個(gè)人分支無(wú)法上傳
項(xiàng)目無(wú)法啟動(dòng)
下面是解決方法:
1.git個(gè)人分支無(wú)法上傳
官網(wǎng)上上傳項(xiàng)目給了一條指令:
$ git push heroku master
然后會(huì)得到這樣一個(gè)運(yùn)行日志:
Initializing repository, done. Counting objects: 110, done. Delta compression using up to 4 threads. Compressing objects: 100% (87/87), done. Writing objects: 100% (110/110), 212.71 KiB | 0 bytes/s, done. Total 110 (delta 30), reused 0 (delta 0) -----> Java app detected -----> Installing OpenJDK 1.8... done -----> Installing Maven 3.3.3... done -----> Executing: mvn -B -DskipTests=true clean install [INFO] Scanning for projects... ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 11.417s [INFO] Finished at: Thu Sep 11 17:16:38 UTC 2014 [INFO] Final Memory: 21M/649M [INFO] ------------------------------------------------------------------------ -----> Discovering process types Procfile declares types -> web
但是實(shí)際項(xiàng)目中,我是在自己的分支上開發(fā),然后我用git上傳自己的分支:
$ git push heroku XXX
運(yùn)行結(jié)果
Total 0 (delta 0), reused 0 (delta 0)
remote: Pushed to non-master branch, skipping build.
To https://git.heroku.com/certberus.git
f2c01f2..40aa59d xxx -> xxx
這樣顯然是不對(duì)的,最后發(fā)現(xiàn)上傳分支需要這樣輸入:
$ git push heroku XXX:master
這樣你的分支修改的內(nèi)容就會(huì)合并到mater上進(jìn)行上傳,然后運(yùn)行了。
2.項(xiàng)目無(wú)法啟動(dòng)
通常maven項(xiàng)目在打包時(shí),會(huì)被打成war包或者jar包,熟悉Spring boot的童鞋應(yīng)該了解Spring boot的運(yùn)行命令,其實(shí)heroku運(yùn)行項(xiàng)目也非常簡(jiǎn)單。
首先說(shuō)一下正常的一個(gè)文件的Spring boot部署到heroku,需要在根目錄添加一個(gè)Procfile文件,告訴heroku你要打包哪個(gè)文件,文件內(nèi)容如下:
web java -Dserver.port=$PORT $JAVA_OPTS -jar target/*.jar
但是本人的項(xiàng)目為多個(gè)子項(xiàng)目打包,啟動(dòng)類在子項(xiàng)目中,這樣如何來(lái)讓heroku啟動(dòng)呢,自己不停的修改Procfile中的文件路徑仍然不起作用,后來(lái)發(fā)現(xiàn)heroku中有一個(gè)很爽的命令,如下:
$ heroku run bash
這樣就相當(dāng)于遠(yuǎn)程登錄一臺(tái)Linux服務(wù)器啦,我們可以使用Linux命令查看自己部署在heroku上的項(xiàng)目的目錄結(jié)構(gòu)啦,找到需要運(yùn)行的jar包,將其在云端的路徑修改到Procfile文件中,再次上傳項(xiàng)目,就會(huì)發(fā)現(xiàn)項(xiàng)目跑起來(lái)了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot應(yīng)用War包形式部署到外部Tomcat的方法
- 詳解springboot中的jar包部署步驟
- spring boot 項(xiàng)目利用Jenkins實(shí)現(xiàn)自動(dòng)化部署的教程詳解
- SpringBoot項(xiàng)目在IntelliJ IDEA中如何實(shí)現(xiàn)熱部署
- springboot打包部署到linux服務(wù)器的方法
- 運(yùn)用springboot搭建并部署web項(xiàng)目的示例
- SpringBoot應(yīng)用部署于外置Tomcat容器的方法
- Linux下部署springboot項(xiàng)目的方法步驟
- Spring Boot與Docker部署實(shí)踐
相關(guān)文章
使用WebUploader實(shí)現(xiàn)分片斷點(diǎn)上傳文件功能(二)
這篇文章主要為大家詳細(xì)介紹了使用WebUploader實(shí)現(xiàn)分片斷點(diǎn)上傳文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01SpringCloud融入Python的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud融入Python的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12springboot + devtools(熱部署)實(shí)例教程
devtools是boot的一個(gè)熱部署工具,當(dāng)我們修改了classpath下的文件(包括類文件、屬性文件、頁(yè)面等)時(shí),會(huì)重新啟動(dòng)應(yīng)用。本文通過(guò)實(shí)例給大家介紹springboot+devtools熱部署,感興趣的朋友一起看看吧2017-04-04Mybatis中isNotNull與isNotEmpty的使用心得
這篇文章主要介紹了Mybatis中isNotNull與isNotEmpty的使用心得,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java中隊(duì)列Queue和Deque的區(qū)別與代碼實(shí)例
學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)的,一定對(duì)隊(duì)列不陌生,java也實(shí)現(xiàn)了隊(duì)列,下面這篇文章主要給大家介紹了關(guān)于Java中隊(duì)列Queue和Deque區(qū)別的相關(guān)資料,需要的朋友可以參考下2021-08-08Java 凍結(jié)或解除凍結(jié)Excel中的行和列的方法
這篇文章主要介紹了Java 凍結(jié)或解除凍結(jié)Excel中的行和列的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03