npm私服搭建

npm私服搭建

使用cnpm来搭建npm私服

  1. sinopia虽然也可以,安装简单,不过没有cnpm功能强大。推荐使用cnpm
  2. cnpm是使用koa的框架搭建的,另外可配置成sqlite、mysql等数据库,sequelize是一个ORM框架,有兴趣可以了解一下相关知识

下载项目

http://github.com/cnpm/cnpm.org,

安装项目所需的依赖包

  • 确保你装了node,在当前项目路径下执行 npm install
  • 这个步骤可能会出现err(之前在一台机子上遇到过),可以不用管,确保安装了对应的依赖就行
  • 可以试一下执行 node dispatch 开启项目,没报错的话还是能用的。

配置相关信息 配置文件在config/index.js里面

  1. 服务器相关文件的地址配置,可以不用动
    var dataDir = path.join(process.env.HOME || root, '.cnpmjs.org');
  2. 注释掉bindingHost,这个配置是绑定访问的ip地址为127.0.0.1,即是只能本地访问。
  3. 这里重点是dialect这里,你可以选择用sqlite,也可以用mysql。sqlite是一个零配置的数据库,你可以用navicat来查看里面的数据,sqlite文件在.cnpmjs.org/data.sqlite。

        db: 'cnpm',//数据库名称,自己随便定义
        username: 'root',
        password: 'root',
    
        // the sql dialect of the database
        // - currently supported: 'mysql', 'sqlite', 'postgres', 'mariadb'
        dialect: 'mysql',//这里改成mysql
    
        // custom host; default: 127.0.0.1
        host: '127.0.0.1',
    
        // custom port; default: 3306
        port: 3306,
  4. 修改属性registryHost: '127.0.0.1:7001',没深究这个属性干嘛的,设置成这样不会错。
  5. syncModel一般设置成exist,不要设置成none,不然publish个包都出问题。至于all最好不要,这个会更新网上仓库所有的包,看了下github issues说:需要1T的空间,数据库数据要40G~
    syncModel:'exist'
  6. enableAbbreviatedMetadata:true如果不改成true的话sync的时候提示这个要设置成true的。

数据库相关

  1. 检查你之前config/index.js那里dialect的值。
    • 如果是mysql的话,就建mysql数据库,db: 'cnpm'名称就是设置的这个
    • 如果是sqlite的话 ,你可以执行node dispatch启动服务器,然后在.cnpmjs.org里面会有个data.sqlite文件,我们的sqlite的数据库数据都在这里文件里面,具体可以百度一下sqlite吧
  2. 最重要的一点,你必须要初始化你的数据库。
    你可以拷贝doc/db.sql去初始化mysql或者sqlite数据库
    还有一种方法,打开test文件夹,你会看到有个init_db.js文件,对,执行node test/init_db也可以初始化数据库
  3. 如果你是mysql数据库,初始化数据库的时候发现报错,可能是你的mysql版本问题导致的,我遇到过的就是utfmb4和复合索引长度问题。如果对sql比较熟的话可以修改一下sql脚本来解决。
  4. 最后注意个地方,如果你用的是mysql的话,在common/sequelize加个配置database.timezone="+08:00",不然squelize会默认使用UTC时间,这样入库时间字段gmt_create会少8个小时。sqlite则不需要这样。

启动服务器

  1. 执行node dispatch,其实在linux环境下的话,可以执行npm start,这个脚本会执行bin/nodejsctl文件,可以打开看看。
  2. 这里这个cnpm就搭建起来了,打开浏览器访问127.0.0.1:7002可以看到,随便搜索个插件例如gulp,会发现找不到,这时你可以点击sync,来同步对应的。这里说一点,服务器会把所有对应的插件和依赖的所有版本同步下来。刚开始的时候会等很久,synclog页面可能会出现死掉的情况(具体不知道为什么),不过没关系,服务器有在跑的,跑一两个小时都有可能。我下载一下常用的插件到最后nfs文件夹都10多g了。

发布你自己的包

  1. 首先npm仓库地址设置成自己的服务器的,或者执行npm的时候加 –registry

    npm set registry http://服务器地址:7001
    
  2. 发布包的时候不加私有域的话是要登录管理员帐号的,可以查看config/index.js,找到admins属性那些就是管理员了,你可以加上你喜欢的,不过查找数据库user表会发现没有admin等这些管理员,我是自己参考test/init_db.js来创建admin的,反正最后数据库user表要存在对应的名称就行。
  3. 登录npm login根据提示即可。注意,发布到共有域要登录管理员
  4. cd 到你的项目目录没有package.json的还执行npm init,然后执行npm publish即可

注意事项

  1. window下可以搭建cnpm,不一定linux或centos
  2. sync的时候不要停掉服务器,不确定会出什么问题,有时候会同步很久,就让服务器挂在那里就好,不要停掉
  3. 如果npm publish提示401或者403错误,请检查你登录的是管理员帐号,确认配置文件和数据库user表有没有对应名称
  4. 包同步下来后服务器可以离线运行,我公司服务器就是离线环境。我修改了源码做了相关的增量更新机制,这个不复杂,看了下源码,受益良多。
  5. 服务器可以使用pm2做进程守护,这样不怕别人关我的cmd啦~

最后如果有遗漏或者错误的地方可以提醒我~

猜你喜欢

转载自blog.csdn.net/u012308481/article/details/79478450