sinopia的部署和使用

随着时间的推移,前端的工程日益庞大,越来越复杂的依赖包需要包管理器来维护。相比搭建没有优势bower仓储,更好的方式是在局域网搭建NPM仓储,维护项目中package.json中的各个插件的版本即可维护项目依赖。

sinopia是一个部署简易的可以实现github仓储私有化的npm组件。

注:本文sinopia的版本为1.4。

1 架构模式

 
sinopia.png

如上图:

客户端产生npm请求后,发送到服务器(外网需要通过网关)。

用pm2启动sinopia集群,可以自动负载均衡。当请求到sinopia后,他会先进行权限验证(如果设置),通过验证之后就在本地文件系统中寻找对应的npm包,如果不存在则向上游链接(uplinks)配置的地址发请求。

2 安装部署

安装较为简单,本文档所有的安装都在root权限下进行。

2.1 安装nodejs

node版本:node-v6.2.0-linux-x64.tar.gz

安装过程略。

请注意,离线安装时,压缩包要在linux下解压,否则npm无法使用。

2.2 安装sinopia

node安装成功并设置软连接后,因为服务器在内网,所以先要设置npm代理。

//设置npm代理 

npm config set proxy="http://name:password@proxy.domain.com:port"

//设置淘宝国内镜像

npm config set registry="https://registry.npm.taobao.org"  --可以默认npmjs

//安装sionpia(不加后边参数会在node-gyp编译失败)

npm install sinopia --no-optional --no-shrinkwrap

//将sionpia配置软连接

ln -s /root/node_modules/sinopia/bin/sinopia  /usr/local/bin/sinopia

//测试启动

sinopia

如果安装成功,会出现以下log,则证明安装成功。

Sinopia doesn't need superuser privileges. Don't run it under root.

warn --- config file - /root/.config/sinopia/config.yaml

warn --- http address - http://localhost:4873/

2.3 安装pm2

//安装pm2 

npm install pm2 -g 

//配置软连接 (安装出现警告可能会需要)

ln -s /root/node/node-v6.2.0-linux-x64/lib/node_modules/pm2/bin/pm2  /usr/local/bin/pm2

//测试是否安装成功

pm2

如果安装成功,则会出现pm2图标及命令。

2.4 启动sinopia

可以进程启动或pm2启动。

进程启动: sinopia -l http://192.168.0.1:1234/

PM2启动: pm2 start which sinopia

请注意,当用PM2启动时,不要打错单引号的全角半角。并且启动的端口需要在配置文件中配置:

vi /root/.config/sinopia/config.yaml

在最后一行中加入: 

listen: 192.168.0.1:1234

3 sinopia配置(config.yaml)

配置文件目录:

  1. config.yaml    ------sinopia的配置文件

  2. htpasswd    ------存放用户账户信息的文件,密码通过sha1、base64加密

  3. storage    ------存放npm包及缓存包的文件夹

以上文件的目录为(root用户下):/root/.config/sinopia/

storage的存放地址可在config.yaml中配置:

storage: /root/.local/share/sinopia/storage

3.1 权限配置方式

我们的权限配置为:发布权限只有指定账户有,下载权限不需要登陆认证。

先在客户端创建发布权限的账户(假设为test,用户名不能有大写),然后为该账户设置发布权限:

packages:

        '*':

            # allow all users (including non-authenticated users) to read and

            # publish all packages

            #

            # you can specify usernames/groupnames (depending on your auth plugin)

            # and three keywords: "$all", "$anonymous", "$authenticated"

            access: $all

            # allow all known users to publish packages

            # (anyone can register by default, remember?)

            publish: test

            # if package is not available locally, proxy requests to 'npmjs' registry

            proxy: npmjs

以上配置文件中 '*' 为包名的通配符,access为下载权限配置,publish为发布权限配置,proxy为上游地址name。在设置好发布账号后,我们应该禁用npm的addUser功能,如下配置:

auth:

  htpasswd:

    file: ./htpasswd

    # Maximum amount of users allowed to register, defaults to "+inf".

    # You can set this to -1 to disable registration.

    max_users: -1

max_users为最大用户数量,值为-1则无法通过addUser创建账号。

3.2 日志收集

日志为文件存储。

# log settings

logs:

    - {type: stdout, format: pretty, level: http}

          - {type: file, path: sinopia.log, level: info}

3.3 上游链接

上游链接是当用户请求的npm包,在本地仓储中不存在的时候,请求的地址。配置如下:

  # a list of other known repositories we can talk to 

uplinks:

npmjs:

url: https://registry.npmjs.org/ 

请注意,虽然配置好了上游链接,但是因为我们的服务器在内网,所以需要为sinopia访问上游链接时的请求配置代理:

http_proxy: http://name:password;@proxy.domain.com

https_proxy: http://name:password;@proxy.domain.com

no_proxy: localhost,127.0.0.1

4 使用说明

仓储链接设置:

npm config set registry http://192.168.0.1:1234/

"http://host:port"为sinopia服务地址。建议使用nrm(nrm 是一个 NPM 源管理器)切换仓储地址。

4.1 维护

维护需要用有发布权限的账号,进行包的发布。发布包需要先登录:

npm login

然后根据提示输入:

Username: test

Password:

Email: (this IS public) test@domain.com

Logged in as test on http://192.168.0.1:1234/

显示以上内容为登录成功。登录成功后,在包的文件夹中输入以下命令即可发布:

npm publish

  • abc@1.0.3

显示 + name@version 即为发布成功,成功后也可浏览器进入http://192.168.0.1:1234/ 查看。

在项目中,我们要配置好package.json。

同时,我们的版本管理也需要更加严谨,维护好版本好的同时也要写好更新说明,更新说明写在组件的changelog.md中,这样方便在浏览器浏览 http://192.168.0.1:1234/ 的时候查看。

版本号请遵循: semver 2.0 的语义化版本规则。

posted @ 2020-10-16 09:52  Macoffee  阅读(711)  评论(0编辑  收藏  举报