npm 私有仓库搭建
为什么搭建私有的 npm 仓库
- 发布和管理公司内部的私有的、暂不公开的 npm 包
- 加速 npm 包的下载,npm 官方仓库在国内太慢了
了解 sinopia
https://github.com/rlidwka/sinopia
sinopia 是一个用于搭建私有的 npm 仓库的软件,我们将借助它来搭建 npm 私有仓库。
sinopia 安装和使用都极其简单,它还有以下的特性:
- 支持安装 npm 包(npm install, npm upgrade, etc.)
- 支持发布 npm 包(npm publish)
- 支持 npm unpublish
- 即将支持 npm tag
- 不支持 npm deprecate
- 支持 npm adduser
- 支持在浏览器端搜索,不支持命令行搜索
- 不支持 npm star, npm unstar,因为这对私有 npm 包没有意义
- sinopia 没有使用数据库来存储,它使用本地的文件系统来存储
使用 sinopia
快速开始
|
|
sinopia 界面
服务器搭建完成之后,就可以使用 http://localhost:4873/
作为仓库地址来下载和发布 npm 包了。
当你使用 npm install xx
后,sinopia 会检查本地有没有 xx 这个包,如果有,直接使用本地的缓存;如果没有,它会从 npm 官方仓库下载这个包,并将这个包缓存在本地以便二次下载。sinopia 并不会同步 npm 官方仓库的所有内容,它只会缓存你使用 npm install
下载过的内容。
如果要发布私有包,使用 npm publish --registry=http://localhost:4873/
就可以了,发布好了你就可以在 web 端界面上看到它了。
配置
添加一个新用户:npm adduser --registry http://localhost:4873/
,接下来输入用户名和密码就可以了,用户可以用来做权限管理
配置文件详解
|
|
关于 auth 的配置,为了达到私有的目的,我们把 max_users 设置成 -1 来拒绝添加用户,不过在公司内部我们依然可以使用 htpasswd 这个文件来初始化用户,其格式如下,每一行一个用户:
|
|
加密算法:将密码使用 SHA1 算法哈希之后再使用 base64 转换再输出就可以了。
使用 python 实现的密码加密示例,下面是密码 admin
加密后的值
|
|
配置完成后重启一下 sinopia 服务器就可以了。
更多配置可以去 https://github.com/rlidwka/sinopia/blob/master/conf/full.yaml 看看。
使用 Docker 来搭建 sinopia
sinopia 提供了一个 Docker 的镜像 https://registry.hub.docker.com/u/keyvanfatehi/sinopia/
我们可以使用这个镜像来快速搭建一个 sinopia
快速开始
- 安装镜像
docker pull keyvanfatehi/sinopia:latest
- 创建容器
docker run --name sinopia -d -p 4873:4873 keyvanfatehi/sinopia:latest
- 现在就算搭建完成了,你可以访问
http://<docker_host>:4873/
来查看效果了
更详细的文档可以去 https://github.com/kfatehi/docker-sinopia 看看
使用 docker-compose
通过配置 docker-compose 我们可以更优雅地搭建 sinopia,下面是一个示例:
|
|
写好了 docker-compose.yml 后就可以通过 docker-compose up
来启动 sinopia 服务。