Node.js相對於其他的語言來說可能仍然是年輕的,但是它的虛擬主機卻有很多的選擇。在這篇文章中,我們就來看看幾個“平台即服務(PaaS)”提供商。
我這裡不涵蓋某些“基礎設施即服務(IaaS)”的選擇,比如 AWS 和 Joyent,盡管這些選擇之中的某些PaaS和IaaS之間的界限有一點點模糊。
在這一輪中,我主要考察兩個方面:部署和環境變量的配置。我還把一些有關起步,儀表板的截圖和對其它的雜項操作的觀察囊括了進來。在以後的文章中,我們將會運行一些基礎的性能測試,然後來看看架構伸縮難易程度。
我開始於一個非常簡單的Express app,使用nconf可以提供多種不同的方式,讓我們可以給app指定端口,監聽我們的應用程序(必要時)以及一個dummy變量,我稱之為SECRET。它會先尋找節點命令傳遞的參數,環境變量,然後從根目錄的上一級到我們制定的默認位置,嘗試加載的config.json文件。當加載app時,我們能知道變量從外部源加載是否正確。如果錯誤,加載app時將回滾到默認的SECRET。如果我可以訪問app的啟動日志,也就可以看到app監聽在NODE_ENV上的哪個端口。
最後,我設置"engines": { "node": "v0.10.x" ...到 package.json文件中,就可以看到每個提供者如何響應。
現在沒有特定的順序..
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變量給消除了,每次我都的重新部署,也許有一個方法可以避免.
我喜歡Nodejitsu。任何處理自定義配置都會通過標准的package.json文件。你甚至可以定義定制的predeploy和postdeploy hooks。我對它的印象是,它能非常靈活地部署和查看日志。
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頁面,並且能夠將項目的所有權轉讓給不同的用戶。
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的選項會是不錯的,我喜歡前期定價。
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的選項。
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是唯一這麼做的供應商。
http://dotcloud.com
支持多國語言.就像Nodejitsu一樣, 他們最近取消了他們的免費服務,所以在開始使用之前需要綁定一張信用卡.
參數的設置通過CLI或者一個dotcloud.yml文件設置.
監聽端口需要設置為8080.
dotClouds CLI使用Python編寫的, 同時使用rsync在每次部署的時候最小化你要上傳的數據. 為了帛書,你需要配置supervisord.conf和dotcloud.yml文件。
目前, dotCloud的版本為 0.6.20. Ouch.
早期的時候我感到非常的憤怒,當他們進行一些重大修改卻幾乎沒有警告的時候。我猜這就是生活在一個beta的世界,但是我一直沒有急著跑回來。
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。
當我第一次部署失敗,會彈出一個可以輸入手機號的窗口。
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相關人員進行了溝通,他們也將更新入門指南讓這部分內容更加得通俗易懂。
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