资料基本上都是来自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搭建