npmのプライベートレジストリをつくる

npmのプライベートレジストリを作ってみたので手順をメモっときます。環境はOSX 10.7.4です。

1.CouchDBをインストール

お好みの方法でCouchDBをインストールします。今回はHomebrewで入れました。

$ brew install couchdb
$ couchdb -V
couchdb - Apache CouchDB 1.2.0

インストールが完了したら、CouchDBを起動します。

$ couchdb
Apache CouchDB 1.2.0 (LogLevel=info) is starting.
Apache CouchDB has started. Time to relax.
[info] [<0.31.0>] Apache CouchDB has started on http://127.0.0.1:5984/

2.データベースを作成する

CouchDBに 'registry' という名前のデータベースを作成します。

$ curl -X PUT http://localhost:5984/registry

3.アプリケーションをインストールする

以下のコマンドでnpm registryのアプリケーションをCouchDBにインストールします、

$ git clone https://github.com/isaacs/npmjs.org.git
$ cd npmjs.org
$ npm install couchapp
$ npm install semver
$ node_modules/.bin/couchapp push registry/app.js http://localhost:5984/registry
$ node_modules/.bin/couchapp push www/app.js http://localhost:5984/registry

これで、空のレジストリができました。

4.レプリケーション設定

本家からのレプリケーションを行います。

CouchDB 1.2.0だと、レプリケーションは管理者権限が必要なので管理者ユーザを作成します。

$ curl -X PUT http://localhost:5984/_config/admins/${USERNAME} -d'"${PASSWD}"' 
curl -X POST -H "Content-Type:application/json" \
    http://${USERNAME}:${PASSWD}@localhost:5984/_replicate -d \
    '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry"}'

5.npmコマンドの設定

npmコマンドが使用するレジストリとして、作成したプライベートレジストリを指定します。

~/.npmrcに以下の設定を加えます。

registry = http://localhost:5984/registry/_design/app/_rewrite

プライベートレジストリを利用する際に、npm configにオリジナルのレジストリの認証設定が残っていると401エラーになるので、設定を変更する必要があります。