隨著Node.js的不斷流行,新教程層出不窮,教程序員如何編寫服務器端JavaScript應用程序和API。本文將介紹兩大用于部署Node應用程序的項目:Now.sh和Heroku。解釋如何將代碼部署到上述兩個平臺,在監控選項、易用性、提供的功能以及免費托管計劃方面各有哪些利弊。
用Heroku進行部署
為了能夠將應用程序部署到Heroku,程序員必須在Heroku上注冊并為機器安裝Heroku CLI。
開始之前,需要向Procfile添加一些代碼。因為,Heroku將利用這個文件來確定如何執行上傳的代碼。
如果將下面的代碼添加到文件中,Heroku就知道應該執行什么命令來啟動應用程序:
一旦完成,請嘗試通過從終端輸入heroku login的方式登陸,Heroku會要求輸入登錄憑證。
接下來,導航到項目的根目錄并輸入命令:heroku create。這將在Heroku上創建一個應用程序,該應用程序已準備好接收項目的源代碼。Heroku上的應用程序名稱是隨機創建的。
要將代碼部署到Heroku,只需使用git push heroku master。程序員可以使用heroku open命令來訪問應用程序,這將打開生成的URL。
推動對Heroku的更改
遵循正常的Github流程可以推動更改:
有用的Heroku命令
要確保至少有一個應用程序實例在運行:heroku ps:scale web = 1
因為正在使用免費平臺,所以不可能擴展應用程序。但是,可以縮減比例,因此不運行的應用程序實例:heroku ps:scale web = 0。
按照Heroku生成的時間順序查看最新的日志(流):heroku logs --tail
可以只顯示應用程序日志。應用程序日志是代碼中console.log()語句的輸出,可以使用如下語句查看:heroku logs--source app-name
Heroku提供了在本地//localhost:5000上運行應用程序的可能性:heroku local web
列出所有Heroku應用程序:heroku apps
刪除部署:heroku apps:destroy--app app-name
添加所有者(帳戶)來訪問應用程序:heroku access:add [email protected],刪除heroku access:remove
Heroku環境變量
如果在本地使用.env文件,則可能需要為Heroku部署使用其他環境變量。可以使用heroku config來設置它們:heroku config:setPORT=3001.。這些值將覆蓋用戶在.env文件中設置的變量。
要查看所有定義的Heroku環境變量,只需使用heroku config。如果想刪除一個環境變量例如 PORT,使用heroku config:unset PORT。
免費可用的版本
允許最多五個Heroku應用程序
512 MB RAM
不可升級可用,只可以同時運行一個應用程序實例
閑置30分鐘后進入睡眠狀態
隨機生成應用程序名稱
有關內存使用情況,響應時間和可用吞吐量的度量標準,但無法添加自定義度量標準
使用now.sh進行部署
Now.sh著重于開發者體驗(DX),這是一種獨特的方式。他們試圖提供靈活的工具,使用起來非常簡單。Now.sh是Zeit.cowhich開發的一些工具的一部分。
為了簡單起見,我們將只通過npm安裝Now.sh CLI:
接下來,需要注冊以便可以在控制臺中使用。登錄和注冊都發生在login page。每次登錄時,都必須通過電子郵件驗證來確認登錄嘗試。 確認后,將被重定向到儀表板,程序員可以查看日志和部署。
現在開始使用,只需在控制臺中輸入now即可。控制臺將提示輸入電子郵件,填寫正確的電子郵件,并通過點擊驗證電子郵件。
登錄之后,讓我們來看看package.json中的啟動腳本。 Now.sh使用這個來啟動應用程序。這是scripts字段的樣子:
讓我們開始將代碼部署到now.sh. 確保在代碼示例的根目錄下。要開始部署過程,只需點擊now即可。我想你可以看到developer experience,一切都可以用一個關鍵字now執行!如果對應用程序進行更改,并且想要重新部署應用程序,那么只需在控制臺中點擊now即可。
應用程序的URL可以在控制臺日志中找到,有關部署或其他命令的更多常規日志可以在儀表板找到。
定制和定義環境變量
定制Now.sh部署的一種方法是使用now.json文件。但是,由于已經使用了package.json文件,因此可以在now鍵下添加所需的自定義。此配置允許自定義應用程序名稱和別名,設置環境變量,指定部署類型并定義引擎。
程序員也可以通過CLI設置環境變量:now -e NODE_ENV =“production”-e PORT =“3001”。
如果想提供一個dotenv文件,可以設置選項--dotenv,如果想使用.env.production而不是.env?,可以考慮用--dotenv=.env.production來解決。最后,還可以將生產dotenv文件添加到你的package.json。
有用的Now.sh命令
可以為部署添加一個別名:now alias deploy-url aliasname
列出所有部署與他們唯一的代碼:now ls
刪除部署:now rm unique-code
強制新建(如有問題):now-f
擴展web應用程序(免費版最多3個):now scale deployment-url3。有時,預測流量是不容易的。Now.sh允許設置自動縮放比例的最小值和最大值:now scale deployment-url min max。
監視日志
日志輸出可以通過以下命令獲取:nowlogs[deployment-url|deployment-id]。更高級的日志記錄也是可能的。
now logs-a-q"GET"-n10deployment-url:顯示包含單詞GET的10個最新日志。
now logs--since=20171028:顯示2017年10月28日的所有日志(ISO 8601格式)
點擊Now.sh儀表板中的應用程序也可以訪問日志。
Now.sh的OSS計劃
OSS計劃可以免費使用,并提供以下內容:
帶寬:1GB
日志存儲高達100MB
無限的部署可能
并發實例限制為3個
不支持自定義域
最大文件大小:1MB
沒有自動擴展支持
比較
Heroku和Now.sh都提供了很好的功能。Now.sh通過提供易于使用的CLI更多地關注開發者的體驗。另一方面,Heroku更注重可視化的記錄,特別是用度量指標進行監控。
就個人而言,我更喜歡簡單的Now.sh,現在只需使用一個關鍵字now來進行(重新)部署。對于Node應用程序,我喜歡在.package.json文件中添加now屬性來自定義Now.sh部署。不需要像Procfile Heroku所要求的那樣添加額外的文件。
這兩個平臺之間很難選擇, 但這只取決于你的喜好和需求。除了上述一些關于免費版本可以獲得的支持,從易用性方面來說,Now.sh或許更棒!