使用cnpm搭建企業內部私有NPM倉庫

cnpm

cnpm是企業內部搭建npm鏡像和私有npm倉庫的開源方案。它同時解決了現有npm架構的一些問題html

爲何企業須要私有NPM

主要有以下理由:node

  • 確保npm服務快速、穩定:對於企業來講,上線生產系統的時候,須要花半小時甚至更久等待npm模塊依賴安裝完畢,是不可接受的。部署鏡像後,能夠確保高速、穩定的npm服務。
  • 發佈私有模塊:官方的npm上的模塊所有是開源的。一些與企業業務邏輯相關的模塊可能不適合開源。這部分私有的模塊放在私有NPM倉庫中,使用起來各類方便。
  • 控制npm模塊質量和安全:npm上的模塊質量良莠不齊,搭建私有倉庫,能夠更嚴格地控制模塊的質量和安全,只有通過審覈的模塊才容許被加入私有倉庫。

cnpm的特色

  • 壓縮包等文件從數據庫中分離,放在CDN上,減輕了數據庫的壓力,提升了訪問速度。
  • 使用MySQL替換了CouchDB,更容易部署。同時因爲大部分開發者更熟悉MySQL,所以架設起來更方便。
  • CDN和MySQL均可以方便地擴展。

cnpm架構

5分鐘部署

部署cnpm只需5分鐘。mysql

依賴

  • Node
  • MySQL
  • Redis
  • qiniu CND (或其餘CDN)

部署過程

獲取代碼git

git clone git://github.com/fengmk2/cnpmjs.org.git $HOME/cnpmjs.org
cd $HOME/cnpmjs.org

建立MySQL表github

; mysql -u yourname -p
mysql> use cnpmjs;
mysql> source docs/db.sql

而後編寫配置文件config/config.jsweb

module.exports = {
    debug: false,
    enableCluster: true, // enable cluster mode
    mysqlServers: [
      {
        host: 'localhost',
        port: 3306,
        user: 'cnpmjs',
        password: 'cnpmjs123',
      }
    ],
    mysqlDatabase: 'cnpmjstest',
    redis: {
      host: 'localhost',
      port: 6379,
    },
    nfs: null, //use your own CND here
    enablePrivate: true, // enable private mode, only admin can publish, other use just can sync package from source npm
    admins: {
      admin: 'admin@cnpmjs.org',
    },
    syncModel: 'exist'
  };

安裝依賴redis

make install

啓動sql

; npm run start

Starting cnpmjs.org ...
Start nodejs success. PID=27175

好了,部署完成!數據庫

客戶端設置

服務跑起來以後,企業員工須要在本身的電腦上配置下客戶端。npm

首先安裝cnpm客戶端:

npm install -g cnpm

在本身的腳本的啓動文件(例如.zshrc.bashrc)中添加別名:

echo "#lnpm alias\nalias lnpm='cnpm --registry=http://localhost:7001\
 --registryweb=http://localhost:7002\
 --cache=$HOME/.npm/.cache/lnpm\
 --userconfig=$HOME/.lnpmrc'" >> $HOME/.zshrc && source $HOME/.zshrc

注意用本身的倉庫信息替換上面命令的相關部分。

以後就能夠用lnpm命令訪問企業的內部NPM了,各類接口和NPM同樣。

注意,目前cnpm的權限控制比較簡單,只有admin用戶有權publishNPM模塊。若是你的企業須要靈活的權限控制,須要自行開發。

參考


本文由SegmentFault根據 NodeParty 2013 上 @dead-horse 的分享整理

相關文章
相關標籤/搜索