Para executar os passos a seguir é necessário que você possua instalado o git, node e o npm.
Se você ainda não instalou existe um card que pode te ajudar: instalação do node no linux
Testado no ubuntu@13.04
Nas suas aplicações com o node.js ao instalar um módulo ele é obtido do
registry do npm
Show archive.org snapshot
. Este registry é um banco de dados criado no
couchdb
Show archive.org snapshot
que armazena todos os módulos atualmente (você pode buscar algum módulo
aqui
Show archive.org snapshot
ou executando npm search <nome do pacote>
).
Para criarmos o nosso repositório privado teremos que criar uma replicação do registry do npm.
Etapa 1: criação do registry
Instalar o couchdb caso o mesmo não esteja instalado:
sudo apt-get install couchdb
Obs: no couchdb existe um controle para visualizar/administrar os dados, o
Futon
Show archive.org snapshot
. Você pode acessa-lo aqui:
http://127.0.0.1:5984/_utils/index.html
Show archive.org snapshot
- Será necessário uma instância do couchdb com versão >= 1.2.0. Nas versões anteriores (comum em versões do ubuntu 12.04 ou anteriores) os scripts disponibilizados pelo npm não funcionarão. Um ótimo tutorial para instalação da última versão do couchdb pode ser encontrado aqui: http://jswiki.lab-01.com/wiki/doku.php?id=install-couch Show archive.org snapshot .
Agora crie um banco chamado registry, que será onde armazenaremos nossos módulos privados:
curl -X PUT http://localhost:5984/registry
Abra o arquivo /etc/couchdb/local.ini
e adicione o seguinte conteúdo:
[couch_httpd_auth]
public_fields = appdotnet, avatar, avatarMedium, avatarLarge, date, email, fields, freenode, fullname, github, homepage, name, roles, twitter, type, _id, _rev
users_db_public = true
[httpd]
secure_rewrites = false
[couchdb]
delayed_commits = false
Obs: Neste mesmo arquivo, na sessão [admins]
adicione um usuario/senha para o couchdb.
Reinicie o couchdb para aplicar as alterações.
Etapa 2: configuração do npm
Agora com o couchdb instalado vamos configurar o npm para utilizá-lo.
O npm disponibiliza um repositório com scripts que farão quase tudo que precisaremos para configurar nosso ambiente (dele que retirei grande parte do que está descrito neste card), você pode acessá-lo aqui:
https://github.com/npm/npm-registry-couchapp
Show archive.org snapshot
.
git clone git://github.com/npm/npm-registry-couchapp
cd npm-registry-couchapp
npm install
Agora vamos executar alguns scripts para configurar nosso banco.
#obs: lembre de substituir seu usuário/senha nos scripts abaixo
#script 1:
npm start \
--npm-registry-couchapp:couch=http://usuario:senha@localhost:5984/registry
#script 2:
npm run load \
--npm-registry-couchapp:couch=http://usuario:senha@localhost:5984/registry
#script 3:
npm run copy \
--npm-registry-couchapp:couch=http://usuario:senha@localhost:5984/registry
Etapa 3: configurar o npm-client para utilizar nossa réplica
Como é um banco privado, se você tentar publicar algum módulo, o couchdb responderá com um erro e impedirá que seu módulo seja salvo.
Para adicionarmos um novo usuário no banco e configurar o npm-client para utilizá-lo execute o comando abaixo e informe os dados:
npm --registry http://usuario:senha@localhost:5984/registry/_design/scratch/_rewrite adduser
Agora se você olhar o arquivo ~/.npmrc
verá que ele está com as credenciais que você informou.
Você também poderá ver no Futon que seu usuário foi adicionado:
http://127.0.0.1:5984/_utils/database.html?_users
Show archive.org snapshot
.
O arquivo ~/.npmrc
contém todas as nossas configurações e pode ser editado manualmente ou através dos scripts via npm.
Com seu usuário configurado precisamos dizer para o npm utilizar o registry ele. Para isto execute o script abaixo:
npm config set \
registry=http://<nome do usuario>:<senha de seu usuário>@localhost:5984/registry/_design/app/_rewrite
Agora se você abrir o arquivo .npmrc você verá que ele está com o conteúdo:
_auth = GZVgbGn5ZXI6ZmlibzEyjw==
registry = http://<nome do usuario>:<senha de seu usuário>@localhost:5984/registry/_design/app/_rewrite
email = seu_email@email.com
Etapa 4: publicar um módulo
No package.json do seu módulo adicione as configurações para publicação:
...
"publishConfig": {
"registry": "http://localhost:5984/registry/_design/app/_rewrite"
},
...
Pronto! Agora basta publicar o módulo e ele estará salvo no seu registry:
npm publish
Etapa 5: criando a replicação do registry do npm
Para fazer a replicação do banco de dados do npm existem duas opções:
1 - A primeira é criar uma réplica apenas com os metadados dos módulos, ou seja, apenas com referências para os arquivos ( https://skimdb.npmjs.com/registry Show archive.org snapshot ). Utilizando esta opção o seu banco ficará, hoje, com aproximadamente 400 mb de dados (você pode ver na imagem em anexo). Quando você tentar instalar algum módulo, ele será buscado na sua réplica, mas seus arquivos serão obtidos do registry do npm:
# O parâmetro continuous:true fará com que sua replicação sempre fique sincronizada com o registry do npm
# caso você não queira receber atualizações de novos pacotes este parâmetro pode ser removido
curl -X POST http://usuario:senha@127.0.0.1:5984/_replicate -d '{"source":"https://skimdb.npmjs.com/registry/", "target":"registry", "continuous":true, "create_target":true}' -H "Content-Type: application/json"
2 - A segunda opção é criar a replicação com todos os dados, incluindo os arquivos dos módulos ( https://fullfatdb.npmjs.com/registry Show archive.org snapshot ). Não cheguei a utiliza-la devido ao tempo que levaria para sincronizar tudo, além do espaço em disco que seria necessário (alguns GB a mais do que na primeira opção xD):
curl -X POST http://usuario:senha@127.0.0.1:5984/_replicate -d '{"source":"https://fullfatdb.npmjs.com/registry/", "target":"registry", "continuous":true, "create_target":true}' -H "Content-Type: application/json"