sinopia的部署和使用
随着时间的推移,前端的工程日益庞大,越来越复杂的依赖包需要包管理器来维护。相比搭建没有优势bower仓储,更好的方式是在局域网搭建NPM仓储,维护项目中package.json中的各个插件的版本即可维护项目依赖。
sinopia是一个部署简易的可以实现github仓储私有化的npm组件。
注:本文sinopia的版本为1.4。
1 架构模式
如上图:
客户端产生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)
配置文件目录:
-
config.yaml ------sinopia的配置文件
-
htpasswd ------存放用户账户信息的文件,密码通过sha1、base64加密
-
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 的语义化版本规则。
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想 要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
**************************************************************************************