歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 比較不同的 PaaS 平台上的 Node.js 支持

比較不同的 PaaS 平台上的 Node.js 支持

日期:2017/2/28 14:45:58   编辑:Linux教程

Node.js相對於其他的語言來說可能仍然是年輕的,但是它的虛擬主機卻有很多的選擇。在這篇文章中,我們就來看看幾個“平台即服務(PaaS)”提供商。

我這裡不涵蓋某些“基礎設施即服務(IaaS)”的選擇,比如 AWS 和 Joyent,盡管這些選擇之中的某些PaaS和IaaS之間的界限有一點點模糊。

在這一輪中,我主要考察兩個方面:部署和環境變量的配置。我還把一些有關起步,儀表板的截圖和對其它的雜項操作的觀察囊括了進來。在以後的文章中,我們將會運行一些基礎的性能測試,然後來看看架構伸縮難易程度。

The Players

ProviderDeployment methodEnvironment variablesPerformance Nodejitsu CLI CLI or web interface coming soon Heroku git CLI Modulus CLI or web upload CLI or web interface App Fog CLI CLI or web interface Azure CLI or git CLI or web interface dotCloud CLI CLI or .yml file Engine Yard git ey_config npm module OpenShift git SSH and create file CloudFoundry coming soon coming soon

設置

我開始於一個非常簡單的Express app,使用nconf可以提供多種不同的方式,讓我們可以給app指定端口,監聽我們的應用程序(必要時)以及一個dummy變量,我稱之為SECRET。它會先尋找節點命令傳遞的參數,環境變量,然後從根目錄的上一級到我們制定的默認位置,嘗試加載的config.json文件。當加載app時,我們能知道變量從外部源加載是否正確。如果錯誤,加載app時將回滾到默認的SECRET。如果我可以訪問app的啟動日志,也就可以看到app監聽在NODE_ENV上的哪個端口。

最後,我設置"engines": { "node": "v0.10.x" ...到 package.json文件中,就可以看到每個提供者如何響應。

現在沒有特定的順序..

Nodejitsu

https://www.nodejitsu.com/

一個最初的參與者仍然完全地是Node.js的解決方案,當Joyent放棄他們的no.de服務之後Joyent的Nodejitsu成為了官方合作伙伴(慚愧,那真是一個不錯的域名).Nodejitsu不再是一個永久免費的中間層.但是個別的方案需要3$每月和有一個30天的免費試用期.

變量配置

根據文檔你不需要設置監聽端口,只要它是80或大於1024.

設置我們的SECRET來覆蓋默認的是相當容易的.您可以使用CLI或web接口列表來設置變量,就像這個名單上其他幾個供應商。

部署

發布你的代碼到Nodejitsu雲是通過一個自定義的命令行接口(CLI)應用程序,安裝rpm,注冊以後將自動轉存到 github 指令版本庫. 但整體安裝過程是相當痛苦的,當提示你選擇一個二級域名,然後會自動添加到package.json文件,在我跑了幾個測試中,部署是非常快的. 在每個部署的package.json文件的版本屬性是自動遞增與的,這不會麻煩我但可能會使另外一些人煩惱.

我遇到了三個小故障,第一是版本控制,在我部署時有信息輸出,我展示下:

info: jitsu v0.12.10-2, node v0.10.4

然而,我被告知0.10.x不是支持價值,只有通過對比到0.8.x時我才能夠獲得成功.

第二,我嘗試在package.json改變屬性名稱然後就告訴不能部署

第三.我把ENV變量給消除了,每次我都的重新部署,也許有一個方法可以避免.

Misc Notes 和 Dashboard

我喜歡Nodejitsu。任何處理自定義配置都會通過標准的package.json文件。你甚至可以定義定制的predeploy和postdeploy hooks。我對它的印象是,它能非常靈活地部署和查看日志。

Heroku

https://www.heroku.com/

PaaS世界的龐然大物, 使用無所不在的Ruby on Rails 構造出的極端流行的平台。

變量配置

同樣是使用CLI設置我們的SECRET,用來覆蓋默認值。

所有應用在端口5000上運行,所以你需要監聽這個端口。

最後,需要創建一個Procfile來說明web應用:node server.js。這只是支持多語言的PaaS的平台的小小的副作用。

部署

Heroku的"toolbelt"CLI是用於管理您的帳戶和應用,但部署是通過git,你只需要添加終端他們就會為您提供遠程在你的git配置中,因為他們不完全支持Node.js,我很驚喜地發現他們已經支持v 0.10.6,我的第一個部署似乎成功,但是我收到追蹤錯誤引導我發現第一次需要指定有多少資源,我想致力於這個程序:

heroku ps:scale web=1

在那之後,它是一帆風順的.

雜項說明和控制面板

對於我自己的項目我沒嘗試過Heroku直到大約3個月前,部分原因是因為我有一個適度的標准來幫助我調整自己的服務器,及部分原因是因為我認為他們事後處理node.js的,但是如果你能克服他們的不足關於WebSocket支持和一些錯誤標記和統計,這是一個相當不錯的經驗.

他們還得到了一個非常優美和功能的控制面板,與一些方便的功能,使你不會感到像其它地方指向S3-hosted文件中的404頁面,並且能夠將項目的所有權轉讓給不同的用戶。

Modulus

http://modulus.io

.io 後綴是一個相對較新的服務。 關於Node.js, 他們內嵌支持MongoDB 和本地文件存儲。

配置變量

配置變量可以通過網頁界面或者CLI。我試圖在創建SECRET。在嘗試並碰到錯誤後,我發現不能在變量中出現空格!所以奇怪是SECRET模塊不能運作。

應用需要監聽8080端口, “但我們推薦用端口環境變量 (process.env.PORT).”

部署

部署可以通過CLI來做,但你也可以壓縮整個項目並把它通過他們很有趣的網絡接口上傳。我沒有任何問題,部署,但每次要把你整個項目(除了node_modules之外)都打包和上傳,這會使它的處理過程比那些使用 git 的“diff”功能或 rsync 的工具慢得多。

至於寫作,模塊運行於0.8.15版本,並忽略你在 package.json 中指定的任何內容。

其它注意事項和儀表板

我為這些家伙歡呼,並希望他們能繼續改善。有個內置MongoDB的選項會是不錯的,我喜歡前期定價。

AppFog

http://appfog.com

AppFog先前因PHP Fog而出名,現在已被CenturyLink收購。你可以指定你想使用的雲,如不同地區的AWS、HP以及Azure雲。

配置變量

變量可通過web控制台或者CLI(命令行工具)設置。設置私密變量毫無問題。

文檔要求監聽process.env.VCAP_APP_PORT端口,但我嘗試使用默認配置也能正常工作。日志顯示它在監聽57277端口。

部署

也是借助CLI工具。寫這篇文章的時候,AppFog使用v0.8.14版本,並且忽略package.json裡的版本設置。

其他注意事項和儀表盤

它的免費計劃看起來挺慷慨的。它提供多達8個實例,總共2GB RAM,並可隨意分割使用。它也有內置MongoDB的選項。

Windows Azure

http://windowsazure.com

變量配置

變量可以通過網絡接口或者CLI配置。在我第一次通過CLI配置SECRET的時候遇到了一個比較詭異的小問題,SECRET變成了secret。所以我不得不用網絡接口來更正它。

在沒有對��口做任何修改的情況下,這個應用跑得很好,但是在日志中發現了一個很奇怪的值: \\.\pipe\bea0dffc-de5b-47f4-8575-4d17c2175fd5

部署

希望微軟在這裡還能有更多的自定義的東西,因為當有些文件被添加進代碼中(名為azure_error and iisnode.yml),CLI會自動通過npm安裝同時也會通過git部署。

Azure運行的是0.8.2這個版本,不過這個版本號可以在package.json文件中重新配置。

注意事項和儀表板

帳戶創建過程是迄今為止最乏味的。它包括短信驗證,一個Windows Live帳戶,和一個單獨用於部署的Git帳戶。但總體而言,在Azure平台的巨大范圍來看,儀表板是相當不錯的。他們還支持流日志文件。至於我可以告訴,Heroku是唯一這麼做的供應商。

dotCloud

http://dotcloud.com

支持多國語言.就像Nodejitsu一樣, 他們最近取消了他們的免費服務,所以在開始使用之前需要綁定一張信用卡.

參數配置

參數的設置通過CLI或者一個dotcloud.yml文件設置.

監聽端口需要設置為8080.

部署

dotClouds CLI使用Python編寫的, 同時使用rsync在每次部署的時候最小化你要上傳的數據. 為了帛書,你需要配置supervisord.conf和dotcloud.yml文件。

目前, dotCloud的版本為 0.6.20. Ouch.

注意事項和控制面板

早期的時候我感到非常的憤怒,當他們進行一些重大修改卻幾乎沒有警告的時候。我猜這就是生活在一個beta的世界,但是我一直沒有急著跑回來。

Engine Yard

http://engineyard.com

就像Heroku一樣, Engine Yard 也是通過Ruby on Rails來托管的。 不過不一樣的是, 我們對於安裝和環境配置擁有更多的選擇。有服務器管理經驗的人會覺得Engine Yard更像直接操作某台服務器,不過這仍然是PaaS。

變量配置

我們可以通過npm模塊ey_config來配置環境變量。Engine Yard還支持通過SSH來訪問你的機器,那樣我們就可以直接創建config.json並放到一個正確的地方。

部署

這個是通過git來部署的,不過package.json文件中的node版本號最多只支持0.8.11。

注意事項和控制面板

當我們創建了一個應用,我們需要選擇nginx(推薦)作為前端代理或者使用Node.js,後者支持WebSockets。

當我第一次部署失敗,會彈出一個可以輸入手機號的窗口。

OpenShift.com

http://openshift.com

OpenShift 一個主要由Red Hat維護的開源項目, OpenShift.com是一個托管式服務的平台(像WordPress.org 和 WordPress.com).

配置變量

OpenShift.com 支持用SSH連接你的電腦,這意味著你可以新建 config.json 並把它放到合適的地方. 否則, 沒有特殊的命令來預先定義配置文件.

端口是 process.env.OPENSHIFT_INTERNAL_PORT || 8080.

部署

用git操作,如果你不是基於網頁的GUI的粉絲,盡管有 CLI 用來創建和管理項目. 你需要先將你的公共SSH key加到你的賬戶中,這是不包括在node.js快速進階樣例的一步。

package.json文件中的node版本號會被忽略,它會默認使用v0.6.20,不過你可以通過額外的操作來改變它

注意事項和控制面板

之前我對於獲取示例應用有些問題,所以我重新開始並讓OpenShift用他們的示例文件填充git倉庫。這裡小小的提示一下,包括deploy hook和一些配置文件都在openshift目錄下,README文件展示了結構並說明每個文件的意義。

但是我仍然對監聽一個特定IP地址感到困惑,就如下面的:

var ipaddr = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1";

然後在server.js文件的app.listen中添加 ipaddr, 就像這樣:

app.listen(app.get('port'), ipaddr, function(){...

我已經和OpenShift相關人員進行了溝通,他們也將更新入門指南讓這部分內容更加得通俗易懂。

CloudFoundry

http://cloudfoundry.com

首先來看,CloudFoundry有一個明確、友好的入門過程。然而,幾個屏幕之後,我得到了這個消息:
*我們正處在一個過渡時期:*
您正在閱讀V2文檔... Cloudfoundry.com在2013年6月將被升級到V2。

所以,我會轉回到他們在這一系列的下一期中。

後會有期

不用說,這個世界正在迅速的變化著。不要把太多的關注放在任何具體的細節上,除非先檢查更新。例如,在兩天前我寫好這篇文章,Modulus發送了一封郵件給我,有關升級版本的Node.js。

在以後的文章中,我將繼續監控和測試這些平台的性能,然後記錄擴展他們的快照。在此期間,如果我錯過了你最喜歡的Node.js PaaS,請讓我知道。

via http://www.oschina.net/translate/a-comparison-of-node-js-paas-hosting-providers

Copyright © Linux教程網 All Rights Reserved