Verdaccio
Verdaccio是一个建立在Node.js中的轻量级私人npm代理注册中心,使用像Verdaccio这样的私有npm注册表是开放网络应用安全项目(OWASP)推荐的十大NPM安全最佳实践之一。
官网文档:https://verdaccio.org/docs/what-is-verdaccio
Verdaccio提供了两种方式,一种是直接使用Node,一种是用docker,我这里选择的是docker,因为感觉更容易去迁移、管理。
安装环境:
dev | 192.168.1.11 |
系统 | centos7 |
安装方式 | docker |
一、拉取镜像
docker 的安装省略
拉取的是最新版本的镜像
docker pull verdaccio/verdaccio:5.22
二、创建目录
verdaccio暴露了三个目录conf
、storage
和plugins
提供映射,可以将容器内部的文件夹映射至宿主机,这里把目录映射出来,这样在容器内部出现问题,其文件还能保留下来,重新制作容器、挂载目录即可恢复,同时修改一些配置也会比较方便,我这里将目录挂在/logs/verdaccio下,因为/logs目录挂载的是阿里云的nfs,这样数据目录更加安全。
mkdir /logs/verdaccio
mkdir /logs/verdaccio/conf
mkdir /logs/verdaccio/storage
mkdir /logs/verdaccio/plugins
# docker容器中使用的用户id10001 运行的程序,所以要对目录进行授权,否则容器启动失败(读取不了配置文件)
chown 10001:65535 /logs/verdaccio -R
三、创建配置文件config.yaml
cd /logs/verdaccio/conf
vim config.yaml
配置文件的内容:
# storage 已发布的包的存储位置
storage: ../storage
# plugins 插件所在的目录
plugins: ../plugins
# web 界面相关的配置
web:
title: Verdaccio
i18n:
web: zh-CN
# auth 用户相关,例如注册、鉴权插件(默认使用的是 `htpasswd`),其中max-users为-1会禁止npm add user,只能在htpasswd文件中添加用户
auth:
htpasswd:
file: ./htpasswd
max-users: -1
# uplinks 用于提供对外部包的访问,例如访问 npm、cnpm 对应的源
uplinks:
npmjs:
url: https://registry.npmmirror.com
# packages 用于配置发布包、删除包、查看包的权限
# access 控制包的访问权限
# publish 控制包的发布权限
# unpublish 控制包的删除权限
# `$all`(所有人)、`$anonymous`(未注册用户)、`$authenticated`(注册用户),也可以设置为指定用户,多个用户可以用空格分开
packages:
'@mycompay/*':
access: $authenticated
publish: $authenticated
unpublish: admin userA
'@*/*':
access: $authenticated
publish: $authenticated
unpublish: $authenticated
proxy: npmjs
'**':
access: $authenticated
publish: $authenticated
unpublish: $authenticated
proxy: npmjs
# server 私有库服务端相关的配置
server:
keepAliveTimeout: 60
VERDACCIO_PUBLIC_URL: 'registry.npm.1000phone.com'
# middlewares 中间件相关配置,默认会引入 `auit` 中间件,来支持 `npm audit` 命令
middlewares:
audit:
enabled: true
# Verdaccio 是支持搜索功能的,它是由 `search` 控制的,默认为 `false`,所以这里我们需要开启它
search: true
# logs 终端输出的信息的配置
logs: { type: file, path: /verdaccio/storage/.runtime/verdaccio.log, level: info }
#- { type: stdout, format: pretty, level: info }
# listen 设置自己的端口号
listen:
- 0.0.0.0:4873
四、创建用户
配置文件中定义使用htpasswd管理用户,所以需要使用htpasswd创建用户 安装htpasswd工具
# Ubuntu系统
sudo apt-get install apache2-utils
# Centos系统
yum -y install httpd
创建用户
#-n:Don't update file; display results on stdout //不更新文件;在标准输出上显示结果
#-b:Use the password from the command line //从命令行使用密码
#-m:Force MD5 encryption of the password //强制对密码进行MD5加密
htpasswd -nbm admin 12345678
命令行上会打印出对应的加密后的账户信息admin:$apr1$u7Ujv1za$0IwGY4AVJ/QvkKibylgS70
将其写到/logs/verdaccio/conf/htpasswd中(对应配置文件的目录)
多个用户的话可以用换行分割
cd /logs/verdaccio/conf
vim htpasswd
五、创建日志文件
cd /logs/verdaccio/storage
mkdir .runtime
touch verdaccio.log
注意新建的配置文件和日志文件的属主改成10001:65535 chown 10001:65535 /logs/verdaccio -R
六、启动容器
V_PATH=/logs/verdaccio; docker run -it -d --name verdaccio \
-p 4873:4873 \
-v $V_PATH/conf:/verdaccio/conf \
-v $V_PATH/storage:/verdaccio/storage \
-v $V_PATH/plugins:/verdaccio/plugins \
verdaccio/verdaccio:5.22
可以使用docker ps
查看运行状态,查看启动日志 /logs/verdaccio/storage/.runtime/verdaccio.log
六、配置nginx代理
nginx的配置文件registry.npm.abc.com.conf
server {
listen 80;
server_name registry.npm.abc.com;
client_max_body_size 20m;
location / {
proxy_pass http://127.0.0.1:4873/;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
七、使用
- web访问域名即可,可以查看搜索上传的包
- npm操作:
# 添加私有仓库地址
npm config set registry=http://registry.npm.abc.com
# 登录仓库
npm login --registry http://registry.npm.abc.com
# 发布
npm publish
# 取消发布(即删除上传的包)
npm unpublish <package-name> --force
现在的日志都记录到一个文件里面了/logs/verdaccio/storage/.runtime/verdaccio.log
,可以加个定时任务去清理日志