今天早上起來就看到 npm 官推一連串的訊息,看來是爆炸了...
having some sporadic internal routing latency problems affecting website and registry availability. @izs and{' '} @_jhs are on the case.
— npm (@npmjs){' '} November 4, 2013
yes. this twitter, or http://t.co/UnJIduAja1 “ @joezo: Does{' '} @npmjs have a status page? I’d love to get an update when it’s back online.”
— npm (@npmjs){' '} November 4, 2013
econnrefused's should be over now, might have to wait as much as 300s for dns to propagate.
— npm (@npmjs){' '} November 5, 2013
千萬不要被開場誤導,npm 已經算是非常穩定的服務了,再加上它所承載那麼巨大的流量以及 node.js 眾開發者關注的眼光(炸),不過只要是線上服務就一定會有這種情形發生,所以如果你的開發環境真的重度依賴 npm 的話,你最好想一個備用的方案。
reminder: for deployments, don't depend on machines you don't own. check in deps for your deployed apps, or run local mirror, or local git.
— npm (@npmjs){' '} November 4, 2013
當然私有的 npm 也不單是備份的用途而已,有些內部用的套件,你也可以部屬到自家的程式庫上面,這樣不但可以兼顧安全,又可以直接用 npm 這種大家都習慣的開發流程。
What should I do?
如果你打算這麼做,有下列幾個方式:
How to create a private npm.js repository - 手動自己建一個
上面列的這篇文章就一步步教你怎麼自己建一個 npm repository,因為 npm 是用 couchDB 作為後端資料庫,所以基本上就是得把 couchdb 架起來。
老實說,我覺得 couchdb 不是個討人喜歡的東西,安裝就會遇到不少問題...0rz
Deploy a Private npm Registry Without CouchDB or Redis - 輕量級的解決方案
如果你不想搞一個這麼大的資料庫,只希望有個簡單的方式來放自家開發時會用到的套件,可以參考一下上面這篇文章中提到的 reggie ,算是個輕量級的 npm 替代方案,它本身就是 nodejs module,所以只要把它裝起來就可以跑了,相當適合小開發團隊使用,記得下指令前加上npm --registry=REGGEIE_URL
或者在 package.json 裡面指定"publishConfig": { "registry": "http://reggie-url/" }
這樣部屬的時候就會放到 reggie 上面,其他詳細的功能請參照官網。
有沒有綜合上面兩項優點的方案呢?一種輕鬆安裝 npm 的完整方案。 這世界上就是有許多強者會把事情弄的很簡單(笑),請愛用之前提到的 docker ;p
docker-npmjs,應該還有不少類似的專案
使用方式就是docker build -t npmjs github.com/terinjokes/docker-npmjs
建完之後再跑起來就好docker run -d -h HOSTNAME npmjs
簡單到令人不敢置信 XDD。
其實就是把第一種方案的整套安裝 npm 步驟都包在 Dockfile 裡面,然後 docker 就會建一個獨立的 container 包含整個 npm 的運行環境。
請自行挑選適合自己的方式服用 ;p
update
經過今天的事件之後,似乎有些大廠也打算幫忙建立 npm mirror,可以期待一下 ;p
@zeke @natevw{' '} @heroku Looking forward to it. The world needs more industrial-grade @npmjs mirrors!
— Charlie Robbins (@indexzero){' '} November 5, 2013
update 2013/12/8
大概是不少大廠被先前那波炸到,紛紛開始注意這個問題
Yammer 也丟出一個用 nginx proxy & cache 的方式 ;p
A private NPM cache