前端基建之(八)npm私服:Verdaccio

Posted by 汪洋龙 on Monday, April 10, 2023

前端基建之(七)npm 私服:Verdaccio

1. 私服方案

私服方案支持仓库github开发语言
Nexus 开源版maven,npm…nexus-publicJava
SinopianpmsinopiaJavaScript
VerdaccionpmverdaccioJavaScript
cnpm.orgnpmcnpmjsJavaScript
cnpmcorenpmcnpmcoreJavaScript

Star History Chart

说明:

cnpm.org 停止更新后,团队使用 TypeScript 重构并新建了 cnpmcore 仓库

Sinopia 停止更新后,社区大佬 fork 了一份并更名为 Verdaccio

2. Verdaccio

哪个 star 多就用哪个

2.1 安装运行

在服务器上直接用 Docker 部署,并开启对应安全组

docker run -it --rm --name verdaccio -d -p 4873:4873 verdaccio/verdaccio

因为是 alpine 构建的,所以需要用 /bin/sh 进入容器

docker exec -it verdaccio /bin/sh

可以成功访问,但有 个问题:

  • 开放式的环境并不安全,既然是私服需要有一定的权限控制
  • 需要挂载卷保存数据,防止容器停止数据丢失

2.2 优化

1. 权限修改

默认配置文件:Github verdaccio 5.x Docker

storage: /verdaccio/storage/data
plugins: /verdaccio/plugins
web:
  # 修改标题
  title: Chemputer NPM
auth:
  htpasswd:
    file: /verdaccio/storage/htpasswd
    # 禁止注册
    max_users: -1
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
packages:
  "@*/*":
    # 必须登录才能访问
    access: $authenticated
    publish: $authenticated
    proxy: npmjs
  "**":
    # 必须登录才能访问
    access: $authenticated
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
log: { type: stdout, format: pretty, level: http }

2. 创建文件夹存放 conf 文件

服务器创建 /root/verdaccio 文件夹存放 conf plugins storage,在 conf 文件夹下创建 config.yaml

drwxr-xr-x 2 root  root  4096 Apr 11 11:25 conf
drwxr-xr-x 2 root  root  4096 Apr 11 10:43 plugins
drwxr-xr-x 3 10001 65533 4096 Apr 11 11:08 storage
.
|-- conf
|   -- config.yaml
|-- plugins
|-- storage

需要设置权限 chown -R 10001:65533 /root/verdaccio/storage/,否则 docker logs 会报错

...
 error--- unexpected error: EACCES: permission denied, mkdir '/verdaccio/storage/data/my-npm-package'
...

3. 挂载卷

docker run -it --rm --name verdaccio -d -p 4873:4873 \
-v /root/verdaccio/conf:/verdaccio/conf \
-v /root/verdaccio/storage:/verdaccio/storage/data \
-v /root/verdaccio/plugins:/verdaccio/plugins \
verdaccio/verdaccio

4. 重启

修改完配置文件之后重启即可生效

docker restart verdaccio