avatar

Build Your Own npm repository

今天早上起來就看到 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

powered by WebMention.io

You can skeet this post or discuss it on BlueSky, the comments will show up here.
0Likes0Replies0Mentions

Be the first one to share this article!