• home > webfront > ECMAS > npm-node >

    NPM本地资源库搭建与使用

    Author:zhoulujun Date:

    因为业务安全需要等种种原因,不能够把插件都发布到公共的npm仓库,所以需要搭建自己的私有npm仓库。我用sinopia搭的时候填的一堆坑在verdaccio 这压根不存在!

    使用 git+ssh 这种方式直接引用到 GitHub 项目地址,也可以解决私有包问题。但是

    公司对于搭建本地私有npm库有如下要求:

    1. 私有包托管在内部服务器中

    2. 项目中使用了公共仓库上的公共包,也使用了内部服务器上的私有包

    3. 希望下载的时候,公共包走公共仓库,私有包走内部服务器的私有仓库

    4. 服务器硬盘有限,希望只缓存下载过的包,而不是全部同步。

    5. 对于下载,发布npm包有对应的权限管理,安装方便,配置简单,依赖少。

    Sinopia 是一个零配置的私有的带缓存功能的npm包管理工具。

    Sinopia搭建

    Sinopia 是一个零配置的私有的带缓存功能的npm包管理工具,作者是是rlidwka,一个大神,也是一只猫~ 往社区内贡献过很多代码,包括 jshttp, markdown-it 等等,也是 Node.js 核心代码库的活跃贡献者。

    使用sinopia,你不用安装CouchDB或MYSQL之类的数据库,Sinopia有自己的迷你数据库,如果要下载的包不存在,它将自动去你配置的npm地址上去下载,而且硬盘中只缓存你现在过的包,以节省空间。

    Sinopia架构图

    为什么选择sinopia

    sinopia有以下几个优势值得关注:

    1. 不同步拉取npm库,占据大量硬盘,没有硬盘被撑爆的问题;

    2. 安装配置极其简单,不需要数据库;

    3. 支持配置上游registry配置,一次拉取即缓存;

    4. 支持forever及pm2守护进程管理;


    规划目录(下为本次安装的实际目录,可根据实际环境调整)

    目录账户备注
    npm、nodejs解压目录/opt/softwarenadmin

     

    sinopia启动时目录/home/nadminnadmin

     

    sinopia的passwd路径/home/nadmin/node_htpasswdnadmin 
    sinopia的storage路径/home/nadmin/sinopia/storagenadmin建议磁盘空间较大不推荐放在home目录

    具体安装步骤

    首选安装nodejs基本环境,然后安装sinopia,在安装pm2保活

    安装node和npm

    nodejs/npm 软件名称: node-v6.9.1-linux-x64.tar.gz   下载地址:https://npm.taobao.org/mirrors/node/v6.9.1/

    centos

    wget https://nodejs.org/en/download/node-v10.15.0-linux-x64.tar.xz
    xz -d node-v10.15.0-linux-x64.tar.xz
    tar -xf node-v10.15.0-linux-x64.tar.xz

    重点是要找到你的nodejs的文件路径(你将node文件解压到哪里就是哪里。),找不到node路径的童鞋请执行

    whereis node

    然后执行

    ln -s node路径 /usr/bin/node
    ln -s node路径 /usr/bin/npm
    
    eg:
    //我的node解压路径为/opt/node-v10.15.0-linux-x64/bin/node
    
    ln -s /opt/node-v10.15.0-linux-x64/bin/node /usr/bin/node
    ln -s /opt/node-v10.15.0-linux-x64/bin/node /usr/bin/npm

    如果出现

    ln: failed to create symbolic link ‘/usr/bin/node’: File exists
    
    执行:rm /usr/bin/node

    查看是否安装成功

    常规安装

    wget https://nodejs.org/en/download/node-v10.15.0-linux-x64.tar.xz
    tar -xvf node-v6.9.1-linux-x64.tar.gz

    添加node_home到环境变量,用root账户修改/etc/profile

    $vim /etc/profile          #追加
    NODE_HOME=/opt/software/node-v6.9.1-linux-x64
    PATH=$PATH:$NODE_HOME/bin

    source 使配置生效

    source /etc/profile

    配置生效之后,在任意地方可查看版本,看是否需要版本

    配置npm

    先查看npm的配置文件地址

    $npm config get userconfig
    /home/nadmin/.npmrc

    修改此配置文件,修改后查看,内容如下

    $ cat /home/nadmin/.npmrc
    proxy=http://网络代理ip:8080/
    https-proxy=http://网络代理ip:8080/
    no_proxy=本地yum源ip
    registry=https://registry.npm.taobao.org/

    也可通过命令设置http网络代理地址和npm server的地址,如下:

    npm config set proxy http://server:port

    npm config set https-proxy http://server:port

    npm config set registry "http://registry.npmjs.org/"

    安装sinopia

    装好node以后,我们就可以在服务器直接安装sinopia了,一行命令全局安装

    npm install -g sinopia

    Sinopia的特点是,你在哪个目录运行,它的就会在对应的目录下创建自己的文件。目录下默认有两个文件:config.yaml和storage,htpasswd 是添加用户之后自动创建的

    由于每次启动默认的config.xml文件是从原始文件default.yaml拷贝而来,可先修改sinopia原始的default.yaml

    地址:sinopia安装目录/conf/ default.yaml

    $ pwd
    /opt/software/node-v6.9.1-linux-x64/lib/node_modules/sinopia/conf
    $ ll
    total 12
    -rw-rw-r-- 1 nadmin nadmin 1309 Nov 9 19:52 default.yaml
    -rw-rw-r-- 1 nadmin nadmin 4076 Jun 7 2015 full.yaml
    -rw-rw-r-- 1 nadmin nadmin   39 Jun 7 2015 README.md

    修改完毕,内如下:

    storage: ./storage
    auth:
    htpasswd:
       file: /home/nadmin/node_htpasswd
    uplinks:
    npmjs:
       url: http://registry.npm.taobao.org/
    packages:
    '@*/*':
       access: $all
       publish: $authenticated
    '*':
       access: $all
       publish: $authenticated
       proxy: npmjs
    logs:
    - {type: stdout, format: pretty, level: http}
    listen: 0.0.0.0:4873
    http_proxy: http://代理服务器ip:8080
    https_proxy: http://代理服务器ip:8080


    启动 sinopia

    在规划好的启动目录下执行命令sinopia

    $ pwd
    /home/nadmin
    $ sinopia
    warn --- config file - /home/nadmin/sinopia/config.yaml
    warn --- http address - http://0.0.0.0:4873/
    http --> 200, req: 'GET http://registry.npm.taobao.org/express', bytes: 0/578356
    http <-- 200, user: admin, req: 'GET /express', bytes: 0/34448
    http --> 200, req: 'GET http://registry.npm.taobao.org/type-is', bytes: 0/54083

    sinopia已经启动,可正常使用,此种方法日志会输出到控制台,不建议使用,后面会介绍使用pm2对sinopia进程进行托管启动的方法。

    访问http://ServerS::4873 查看页面,看到如下页面,说明sinopia安装成功!

    安装pm2

    node服务非常脆弱,一般在实际中使用都会配合守护进程。这里我用的是 pm2 做守护进程

    使用pm2托管的进程可以保证进程永远是活着的,尝试通过kill -9去杀sinopia的进程发现杀了之后又自动启起来。推荐使用此种方式启动sinopia.

    npm install -g pm2
    pm2 start sinopia

    pm2 开机自启动sinopia

    pm2 startup centos,根据提示用root账户执行:

    su -c "env PATH=$PATH:/opt/software/node-v6.9.1-linux-x64/bin pm2 startup centos -u nadmin --hp /home/nadmin"

    pm2 启动sinopia 4个进程,且保存日志

    pm2 start sinopia -i 4 --watch --merge-logs --log-date-format="YYYY-MM-DD HH:mm: Z" -l /opt/log/sinopia.log


    保存当前配置,开机自启动时按照此时配置启动

    pm2 save

    nrm是 npm registry 管理工具, 能够查看和切换当前使用的registry。不安装也可以。

    verdaccio 

    sinopia基本已经停止了对sinopia的维护和升级

    然后真是留了一堆坑,所幸不是没人管,只是有一群人又出了一个sinopia的fork,也就是sinopia的分支,而且还起了个洋气的意大利名verdaccio ,但是verdaccio 确实是正在维护的

    npm install -g verdaccio --unsafe-perm

    加上–unsafe-perm的原因是防止报grywarn权限的错。

    verdaccio配置

    verdaccio 的特点是,你在哪个目录运行,它的就会在对应的目录下创建自己的文件。目录下默认有两个文件:config.yaml和storage,htpasswd 是添加用户之后自动创建的;

    由于第一次启动默认的config.xml文件是从原始文件default.yaml拷贝而来,可先修改verdaccio 原始的default.yaml。

    地址:verdaccio 安装目录/conf/ default.yaml。

    verdaccio继承了sinopia,端口号4873依然不变。

    firewall-cmd --state                # 先查看防火墙状态,
    service firewalld start              # 开启防火墙:
    firewall-cmd --zone=public --add-port=4873/tcp –permanent  #开放4873端口
    firewall-cmd --reload              #重新载入
    firewall-cmd --zone=public --query-port=4873/tcp    #查看是否添加成功

    启动

    pm2 start verdaccio

    npm 设置地址

    查看当前地址:

    npm config get registry

    https://registry.npmjs.org/

    设置当前地址(设置为淘宝镜像)

    npm config set registry http://registry.npm.taobao.org/

    -- 每次执行命令前加入–registry指定仓库路径

    npm --registry https://registry.npm.taobao.org install

    把淘宝地址,换成自己的地址即可。


    参考文章

    npm 私服工具verdaccio 搭建(一) (ps:欲使用sinopia搭建私服的一定要看过来) https://blog.csdn.net/yyzzhc999/article/details/80097073

    用sinopia搭建npm私服 https://www.cnblogs.com/LittleSix/p/6053549.html

    从0开始使用sinopia搭建私有npm仓库 https://segmentfault.com/a/1190000017941736?utm_source=tag-newest

    使用Sinopia搭建私有的npm仓库 https://segmentfault.com/a/1190000005790827

    sinopia的部署和使用 https://www.jianshu.com/p/737d38e9bb1e


    转载本站文章《NPM本地资源库搭建与使用》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/nodejs/8541.html