云原生大前端之使用 Helm 部署 Verdaccio,在 Kubernetes 上运行私有 NPM Registry

2021-05-27 19:03:51 浏览数 (1)

介绍

Verdaccio 是一个简单的,零配置所需的本地私有 npm registry。无需整个数据库就可以开始!Verdaccio 开箱即用,有其自己的小型数据库, 并具有代理其他注册中心的功能(例如:npmjs.org),并在此过程中缓存下载的模块。对于那些希望扩展其存储功能的用户,Verdaccio 支持各种社区制造的插件以挂接到 Amazon’s s3, Google Cloud Storage 等服务或创建自己的插件。

Verdaccio 是轻量级的私有 NPM 代理 registry。

提示:阅读本文需要你有一定的 kubernetes 使用基础。

Helm 部署

添加官方 Chart 仓库

代码语言:javascript复制
helm repo add verdaccio https://charts.verdaccio.org

本地搜索查看一下刚添加的仓库

代码语言:javascript复制
helm search repo verdaccio
# ...
# verdaccio/verdaccio     0.16.2          4.7.2           A lightweight private npm proxy registry (sinop...

直接将这个版本拉取到本地

代码语言:javascript复制
helm pull verdaccio/verdaccio --version 0.16.2

设置 PVC,持久化数据

笔者这里是用公司内部 NFS 服务器做数据存储管理的

代码语言:javascript复制
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: verdaccio-data
  labels:
    app: verdaccio-data
spec:
  storageClassName: ""
  capacity:
    storage: 500Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /home/nfs/verdaccio/data
    server: 10.1.1.28
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: verdaccio-data
spec:
  storageClassName: ""
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Gi
  selector:
    matchLabels:
      app: verdaccio-data

接下来是解verdaccio-0.16.2.tgz, 复制 Chart 中的 values.yaml 进行定制。

启用并定制 Ingress

笔者使用的是 Traefik v2.2,所以如下:

代码语言:javascript复制
ingress:
  enabled: true
  # Set to true if you are on an old cluster where apiVersion extensions/v1beta1 is required
  useExtensionsApi: true
  paths:
    - /
  hosts:
    - npm.your-company.com
  annotations:
    ingress.kubernetes.io/ssl-redirect: "true"
    ingress.kubernetes.io/proxy-body-size: "0"
    kubernetes.io/ingress.class: "traefik"
    traefik.ingress.kubernetes.io/router.tls: "true"
    traefik.ingress.kubernetes.io/router.entrypoints: websecure
  tls:
    - secretName: your-company-cert
      hosts:
        - npm.your-company.com

configMap 配置

代码语言:javascript复制
#....other
# 使用淘宝的cnpmjs镜像,加速
uplinks:
  npmjs:
    url: https://registry.npm.taobao.org/
# @company/* 的包直接从私有库中获取,其它的走 upstream
packages:
    '@company/*':
      # scoped packages
      access: $all
      publish: $authenticated
      proxy: npmjs
#....other

最终效果

0 人点赞