Node.js 12:《線(xiàn)上部署:heroku》

2018-08-07 15:23 更新

目標(biāo)

將 https://github.com/Ricardo-Li/node-practice-2 這個(gè)項(xiàng)目部署上 heroku,成為一個(gè)線(xiàn)上項(xiàng)目

我部署的在這里 http://serene-falls-9294.herokuapp.com/

知識(shí)點(diǎn)

  1. 學(xué)習(xí) heroku 的線(xiàn)上部署(https://www.heroku.com/ )

課程內(nèi)容

什么是 heroku

heroku 是弄 ruby 的 paas 起家,現(xiàn)在支持多種語(yǔ)言環(huán)境,更甚的是它強(qiáng)大的 add-on 服務(wù)。

paas 平臺(tái)相信大家都不陌生。Google 有 gae,國(guó)內(nèi)新浪有 sae。paas 平臺(tái)相對(duì) vps 來(lái)說(shuō),不需要你配置服務(wù)器,不需要裝數(shù)據(jù)庫(kù),也不需要理會(huì)負(fù)載均衡。這一切都可以在平臺(tái)上直接獲取。

你只要專(zhuān)注自己的業(yè)務(wù),把應(yīng)用的邏輯寫(xiě)好,然后發(fā)布上去,應(yīng)用自然就上線(xiàn)了。數(shù)據(jù)庫(kù)方面,如果你用 mysql,那么你可以從平臺(tái)商那里得到一個(gè) mysql 的地址、賬號(hào)和密碼,直接連接就能用。如果應(yīng)用的流量增大,需要橫向拓展,則只用去到 paas 平臺(tái)的管理頁(yè)面,增大服務(wù)器實(shí)例的數(shù)量即可,負(fù)載均衡會(huì)自動(dòng)幫你完成。

說(shuō)起來(lái),我之所以對(duì)于 web 開(kāi)發(fā)產(chǎn)生興趣也是因?yàn)楫?dāng)年 gae 的關(guān)系。那時(shí)候除了 gae 之外,沒(méi)有別的 paas 平臺(tái),gae 是橫空出世的。有款翻墻的軟件,叫 gappproxy(https://code.google.com/p/gappproxy/ )——可以認(rèn)為是 goagent 的前身——就是搭建在 gae 上面的,不僅快,而且免費(fèi)。于是我就很想弄懂這樣一個(gè)程序是如何開(kāi)發(fā)的。好在 gappproxy 是開(kāi)源的,于是我下了源碼來(lái)看,那時(shí)候才大一,只學(xué)過(guò) c,看到那些 python 代碼就凌亂了。于是轉(zhuǎn)頭也去學(xué) python,后來(lái)漸漸發(fā)現(xiàn)了 web 開(kāi)發(fā)的樂(lè)趣,于是 ruby 和 node.js 也碰碰。后來(lái) goagent 火起來(lái)了,我又去看了看它的代碼,發(fā)現(xiàn)非常難看,就自己寫(xiě)了個(gè) https://github.com/alsotang/keepagent 。不過(guò)現(xiàn)在回想起來(lái),還是 goagent 的實(shí)現(xiàn)比較穩(wěn)定以及效率高。

heroku 的免費(fèi)額度還是足夠的,對(duì)于 demo 應(yīng)用來(lái)說(shuō),放上去是綽綽有余的。各位搞 web 開(kāi)發(fā)的大學(xué)生朋友,一定要試著讓你開(kāi)發(fā)的項(xiàng)目盡可能早地去線(xiàn)上跑,這樣你的項(xiàng)目可以被其他人看到,能夠促使你更有熱情地進(jìn)行進(jìn)一步開(kāi)發(fā)。這回我們放的是 cnode 社區(qū)的爬蟲(chóng)上去,你其實(shí)可以試著為你們學(xué)院或者學(xué)校的新聞?wù)军c(diǎn)寫(xiě)個(gè)爬蟲(chóng),提供 json api,然后去申請(qǐng)個(gè)微信公共平臺(tái),每天推送學(xué)院網(wǎng)站的新聞。這東西輔導(dǎo)員是有需求的,可以做個(gè)給他們用。

好了,我們先 clone https://github.com/Ricardo-Li/node-practice-2 這個(gè)項(xiàng)目。由于我們這回講部署,所以代碼就用現(xiàn)成的了,代碼的內(nèi)容就是 lesson 3(https://github.com/alsotang/node-lessons/tree/master/lesson3 ) 里面的那個(gè)爬蟲(chóng)。

clone 下來(lái)以后,我們?nèi)タ纯创a。代碼中有兩個(gè)特殊的地方,

一個(gè)是一個(gè)叫 Procfile 的文件,內(nèi)容是:

web: node app.js

一個(gè)是 app.js 里面,

app.listen(process.env.PORT || 5000);

這兩者都是為了部署 heroku 所做的。

大家有沒(méi)有想過(guò),當(dāng)部署一個(gè)應(yīng)用上 paas 平臺(tái)以后,paas 要為我們干些什么?

首先,平臺(tái)要有我們語(yǔ)言的運(yùn)行時(shí);

然后,對(duì)于 node.js 來(lái)說(shuō),它要幫我們安裝 package.json 里面的依賴(lài);

然后呢?然后需要啟動(dòng)我們的項(xiàng)目;

然后把外界的流量導(dǎo)入我們的項(xiàng)目,讓我們的項(xiàng)目提供服務(wù)。

上面那兩處特殊的地方,一個(gè)是啟動(dòng)項(xiàng)目的,一個(gè)是導(dǎo)流量的。

heroku 雖然能推測(cè)出你的應(yīng)用是 node.js 應(yīng)用,但它不懂你的主程序是哪個(gè),所以我們提供了 Procfile 來(lái)指導(dǎo)它啟動(dòng)我們的程序。

而我們的程序,本來(lái)是監(jiān)聽(tīng) 5000 端口的,但是 heroku 并不知道。當(dāng)然,你也可以在 Procfile 中告訴 heroku,可如果大家都監(jiān)聽(tīng) 5000 端口,這時(shí)候不就有沖突了嗎?所以這個(gè)地方,heroku 使用了主動(dòng)的策略,主動(dòng)提供一個(gè)環(huán)境變量process.env.PORT 來(lái)供我們監(jiān)聽(tīng)。

這樣的話(huà),一個(gè)簡(jiǎn)單 app 的配置就完成了。

我們?nèi)?nbsp;https://www.heroku.com/ 申請(qǐng)個(gè)賬號(hào),然后下載它的工具包 https://toolbelt.heroku.com/ ,然后再在命令行里面,通過(guò) heroku login 來(lái)登錄。

上述步驟完成后,我們進(jìn)入 node-practice-2 的目錄,執(zhí)行 heroku create。這時(shí)候,heroku 會(huì)為我們隨機(jī)取一個(gè)應(yīng)用名字,并提供一個(gè) git 倉(cāng)庫(kù)給我們。

接著,往 heroku 這個(gè)遠(yuǎn)端地址推送我們的 master 分支:

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)