我们在使用Nodejs的时候,使用npm仓库来发布和管理模块,我们可以从npm上下载别人发布的模块使用,也可以自己发布模块,有点类似于Maven,这是非常流行的开源社区模式。但是在企业内部,我们不希望我们的生产代码可以随意引用任何未经企业审核的代码;我们也不希望企业内部自己的模块发布给任意人员使用;还有一个重要的原因是很多企业内部无法连接互联网 cnpm
就是来解决这些问题的。官方的解释是 cnpm
= Company npm
cnpmjs.org
依赖一个数据库,官方支持 sqllite3
、 MySQL
、 MariaDB
、 PostgreSQL
中的任何一个,我选择了 MySQL
。
我们的操作系统是Red Hat 6.4,在这个动作之前应当将Red Hat自带的yum替换成CentOS的,此步骤不再赘述。
编辑源列表:
$ vim /etc/yum.repos.d/rhel-debuginfo.repo
添加如下内容:
[mysql56] name=MySQL 5.6 baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/ enabled=1 gpgcheck=0
然后执行:
$ yum update $ sudo yum install mysql-community-server $ sudo service mysqld start
安装完成后,创建一个名叫cnpmjs的DATABASE。
$ mysql -u root -p mysql> create datebase cnpmjs
github
下载 cnpmjs.org
$ git clone git://github.com/cnpm/cnpmjs.org.git $ cd cnpmjs.org #安装依赖 $ npm install
在国内npm缓慢甚至有些模块被墙,可以使用cnpm淘宝的镜像源安装。
mysql> use cnpmjs; mysql> source docs/db.sql
$ vim config/index.js
修改数据库配置,找到如下配置,将MySQL的配置填入
database: { db: 'cnpmjs', username: 'root', password: '123456', // the sql dialect of the database // - currently supported: 'mysql', 'sqlite', 'postgres', 'mariadb' dialect: 'mysql', // custom host; default: 127.0.0.1 host: '127.0.0.1', // custom port; default: 3306 port: 3306, // use pooling in order to reduce db connection overload and to increase speed // currently only for mysql and postgresql (since v1.5.0) pool: { maxConnections: 10, minConnections: 0, maxIdleTime: 30000 }, // the storage engine for 'sqlite' // default store into ~/.cnpmjs.org/data.sqlite storage: path.join(dataDir, 'data.sqlite'), logging: !!process.env.SQL_DEBUG, }
开启对外服务,注掉以下内容
//bindingHost: '127.0.0.1', // only binding on 127.0.0.1 for local access
同步模式,由于硬盘资源有限,我选择了exist只同步已经存在的模块
// sync mode select // none: do not sync any module, proxy all public modules from sourceNpmRegistry // exist: only sync exist modules // all: sync all modules syncModel: 'exist', // 'none', 'all', 'exist'
其他自定义配置,比如管理员、说明文档等等都可以自行修改。
启动
$ npm run start
停止
$ npm run stop
cnmp启动以后会占用7001和7002两个端口,在iptables中开放这两个端口。
打开浏览器输入 http://ip:7002
,看到如下界面,安装成功。我替换了个Logo
当我们使用私有的仓库时,模块就会从私有库中下载,如果私有库中没有,cnpm就会去npm仓库中下载,并保存在私有仓库一份。
$ npm install debug --registry=http://ip:7001
这样,本次下载npm就会从你指定的私有仓库中下载
如果不希望每一次都设置私有库,可以设置默认配置为私有仓库
# 列出npm配置 $ npm config list $ npm config set registry http://ip:7001
这样,一个私有的npm仓库就算搭建完成了。
EOF
转载请注明出处:http://www.pangjian.info/2016/06/01/cnmp-local-npm-server/
访问原文「 使用CNPM搭建私有NPM仓库 」获取最佳阅读体验并参与讨论