增加微信订阅号(在右侧),关注后,及时收到最新更新的文章。

项目管理-企业级npm私服cnpmjs.org搭建

NodeJS 智菲尔 9909℃ 0评论

资料基本上都是来自cnpmjs.org的官方Github:https://github.com/cnpm/cnpmjs.org/wiki

虽然NodeJS官方提供了一套npm私服软件,但是安装运维比较麻烦,所以Alibaba团队就自己改造了一套NPM的私服软件,而不必安装对大家来说比较生疏Erlang、CouchDB等。搭建私服主要有两个方面的作用:1、为企业搭建私有npm库;2、搭建一个npm的镜像。

1、安装依赖

  • Node >= 0.11.12,使用 –harmony 模式。
  • 数据库,使用其中一种即可:sqlite3 >= 3.0.2(默认采用此数据库);MySQL >=0.5.0(测试5.0有报错,改为5.6正常,其它版本未进行测试),包含 mysqld 及 mysql 命令行;MariaDB; PostgreSQL。
  • 简单的文件服务,比如 qiniu、aliyun-oss、tfs、upyun。分布式文件服务:https://github.com/cnpm/cnpmjs.org/wiki/NFS-Guide

2、部署安装

2.1、初始化数据库

创建存储私服配置信息的mysql库,并初始化所需要的表:

$ mysql -uroot -pmysql
mysql> create database if not exists cc_cnpmjs character set utf8 collate utf8_general_ci;
mysql> grant all privileges on cc_cnpmjs.* to cnpm@'%' identified by 'cnpm' with grant option;
mysql> flush privileges;

导入基础表及数据,sql参见 db.sql

$ mysql -ucnpm -pcnpm cc_cnpmjs < db.sql

2.2、源码安装部署

= 从github上下载源码:

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

= 修改配置文件 config/index.js 中的 config 对象,主要的参数解释如下:

  • registryPort : 仓库注册端口号,默认为7001。
  • webPort :web界面访问端口号,默认为7002。
  • bindingHost :绑定的服务host,注释掉此配置,针对所有ip可访问。
  • npmClientName :UI界面显示的安装提示命令,建议使用自定义的命令,如 lnpm;以便私服无法使用时,还可以使用 npm 或者 cnpm。
  • database.db :数据库名称。
  • database.username :数据库用户。
  • database.password :数据库密码。
  • database.dialect :数据库方言。
  • database.host :数据库地址。
  • database.port :数据库端口号。
  • database.storage :数据的存储位置,针对sqlite存储,其它数据库可忽略。
  • enablePrivate :私服的模式,和 scopes 配置组合使用,公司内部使用强烈建议 true ,因为cnpm的权限目前做的还不太好,所以为了达到权限的控制,设置成 true ,就可以配置 admin ,仅有 admin 用户才可以往私服上发布模块。具体的组合模式请参考:https://github.com/cnpm/cnpmjs.org/wiki/Different-Modes
  • sourceNpmRegistry :仓库地址,默认为淘宝提供的仓库地址 https://registry.npm.taobao.org ,请勿修改。
  • syncModel : 同步模式,默认值为‘none’,不同步任何模块,仅做 sourceNpmRegistry 的代理。建议使用 exist 。

= 配置示例:

var config = {
    registryPort: 7001,
    webPort: 7002,
    sessionSecret: 'ccnpmjs',
    npmClientName: 'lnpm', // use `${name} install package`
    database: {
        db: 'cnpmjs',
        username: 'cnpm',
        password: 'cnpm',
        dialect: 'mysql',
        host: '127.0.0.1',
        port: 3306,
    }
    enablePrivate: true,
    scopes: ['@test' ],
    syncModel: 'exist',
};

= 安装依赖包:

$ make install

= 启动:

$ npm run start

= 关闭:

$ npm run stop

2.3、代理安装

暴露两个端口,看起来不是那么艺术,使用代理(如nginx)在前端做个域名映射吧,此步不是本文的重点,略过。

3、私服使用

3.1、客户端设置私服

私服搭建成功后,假设仓库地址为 http://r.cnpmjs.com ,web地址:http://cnpmjs.com。客户端如何才能使用私服?

= 第一种方法是设置 npm 或 cnpm 客户端的配置,将 registry 参数指向仓库地址:

cnpm set registry http://r.cnpmjs.com
or
npm set registry http://r.cnpmjs.com

= 第二种方法是开发自己的 npm 客户端,在cnpm基础上做一个简单的改造即可成为自己私有的客户端 lnpm,好处是不影响 npm 及 cnpm 客户端的使用,在私有客户端 lnpm 不能使用的情况下,可以使用它们来提供基础的服务。

假定在此,使得的是第二种方法。

3.2、开发私有包

搭建了私服,其主要一个目的是可以开发管理自己的私有包。开发好一个私有包后,进行私有包所在目录,进行发布:

$ lnpm login
$ lnpm publish

删除发布

$ lnpm unpublish test@1.1.0

3.3、权限设置

主要是针对发布权限的设置,增加完一个用户后,用户无 cnpm 私服的发布权限,只有在服务器将用户加入到admin 角色时,才有发布/删除的权限。即修改 2.2中提到的配置中的 admin 对象。如:

admins: {
    // name: email
    admin: 'admin@gmail.com'
}

转载请注明:子暃之路 » 项目管理-企业级npm私服cnpmjs.org搭建

喜欢 (9)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址