架设私有npm仓库的流程

1,865 阅读2分钟
作者:Wellen

随着开发代码量的积累,许多公司级的公共组件需要共享,如用传统的方法直接拷贝代码,有诸多的弊端,如无法保证组件的更新以及难以统一维护等,私有化的npm仓库就迫切的需要了。

架设步骤

一、服务器环境准备

  1. Node.js >= 6.11.3
  2. MySQL >=0.5.0 包括mysql and mysql cli
  3. Simple File Store Service, like qiniu, aliyun-oss, tfs, upyun

二、安装MySql

这一步需要单独说一下,并不是所有的部署教程都会说。

1、安装完MySql之后,需要先开启mysql服务

systemctl start mysqld

2、只要在启动了服务之后,才能查看到数据库的密码 从这里查看:

cat /var/log/mysqld.log

3、找到这一句:

A temporary password is generated for root@localhost:

4、登录mysql

mysql -u root -p

5、我们需要重置密码,但密码规则需要先修改一下:

set global validate_password_policy=0;

6、:

SET PASSWORD = PASSWORD('密码');

MySql就算安装好了。

三、通过源代码部署

1、获取cnpm服务器代码

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

2、创建数据库

create mysql tables
mysql -u root -p
mysql> create database cnpmjs;
mysql> use cnpmjs;
mysql> source docs/db.sql

3、安装依赖

npm install --build-from-source --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/mirrors/node

4、编辑配置文件

module.exports = {
    debug: false,
    enableCluster: true, // enable cluster mode
    enablePrivate: true, // enable private mode, only admin can publish, other use just can sync package from source npm
   database: {
        db: 'cnpmjs',
        host: 'localhost',
        port: 3306,
        username: 'root',
        password: '刚才重设的数据库密码'  
    },
   admins: {
     admin: 'admin@cnpmjs.org',
    },
    syncModel: 'exist'// 'none', 'all', 'exist'
   };

5、启动

npm start

6、下面这两个地址就是我们的私有仓库:

open registry and web
registry
open http://服务器ip:7001
web
open http://服务器ip:7002

好了,大功告成!

等等,怎么访问不了??

四、外网访问

刚才我们部署的服务器,只能在服务器本地访问,从我们电脑上面还无法访问,这里就需要修改一个地方: 打开{{config/index.js}},然后将这项

   bindingHost: '127.0.0.1'

修改为:

   bindingHost: '0.0.0.0'

重启node服务,外网就可以访问了。

五、发布私有包

使用cnpm 如果还没安装过cnpm就先安装,然后再再设置registry。

   npm install cnpm -g
   cnpm set registry http://172.19.100.33:7001

添加用户、发包 使用以下命令

   cnpm login

添加一个用户,并设置密码和邮箱。

准备发布 由于我们的是私有仓库,并且开放了所有人的发布权限,所以在包的名字前面,我们需要加上前缀:@yingzi,然后用下面的命令将包推送到服务器。

    cnpm publish

可通过web方式查看是否上传成功.

六、使用私有包

在服务器端,我们将{{registryHost}}设置为了我们的私有服务器,安装使用包就像普通的一样使用即可:

    cnpm install @yingzi/packagename