使用 docker + verdaccio 搭建npm私有倉庫

  • 2021 年 11 月 19 日
  • 筆記

本文介紹如何使用 verdaccio 搭建私有npm倉庫,以及使用 docker 時如何映射到本地目錄,方便簡單對倉庫進行各種操作。系統環境是 Linux。

verdaccio

verdaccio 是一個開源的輕量的私有 npm proxy registry (npm 代理資源庫),安裝使用都非常方便。
forked自 [email protected]

安裝

使用 npm / yarn 進行全局安裝

  • Node.js v12+

  • npm 4.x+ 或yarn

  • 全局安裝

    npm install -g verdaccio
    
    yarn global add verdaccio
    
  • 啟動

    verdaccio
    
    或者使用 pm2 start verdaccio
    

    使用瀏覽器訪問web服務,端口號4873,//0.0.0.0:4873,訪問成功就可以了。

使用 docker 鏡像安裝

  • 安裝 docker,略

  • docker 下安裝 verdaccio 鏡像
    使用如下命令即可:

    docker pull verdaccio/verdaccio
    

    安裝鏡像成功:
    image

  • 運行 verdaccio,使用 docker 命令運行鏡像,創建 verdaccio 容器

    // 名稱verdaccio, 端口 4873
    docker run -it --name verdaccio -p 4873:4873 verdaccio/verdaccio
    

    啟動容器成功:
    image
    啟動成功以後,實際上就可以在瀏覽器訪問了,//0.0.0.0:4873
    接下來先介紹幾個操作容器的 docker 命令。

  • docker 操作容器的部分命令

    新建並啟動:docker run CONTAINER
    啟動停止的容器:docker start CONTAINER_ID
    查看容器:docker container ls (docker ps)
    停止容器:docker stop CONTAINER_ID
    刪除容器:docker rm CONTAINER_ID

  • 映射本地目錄

    首先,創建 /home/verdaccio 目錄,以下在該目錄下操作。
    其次,創建 conf 目錄,並添加 verdaccioconfig.yaml 配置文件。
    接着處理映射目錄,一般有以下兩種方式:

    1. 直接映射本地目錄,啟動 verdaccio

      docker run -it --name verdaccio -p 4873:4873 -v /home/verdaccio/storage:/verdaccio/storage -v /home/verdaccio/conf:/verdaccio/conf -v /home/verdaccio/plugins:/verdaccio/plugins verdaccio/verdaccio
      

      -v:容器目錄映射到本地目錄

    2. 或者使用 docker-compose 啟動
      添加 docker-compose.yml 文件,使用 docker-compose up 命令啟動

      version: '3'
      services:
        verdaccio:
          image: verdaccio/verdaccio
          container_name: "verdaccio"
          network--mode: "bridge"
          environment:
            - VERDACCIO_PORT=4873
          ports:
            - "4873:4873"
          volumes:
            - "/home/verdaccio/storage:/verdaccio/storage"
            - "/home/verdaccio/conf:/verdaccio/conf"
            - "/home/verdaccio/plugins:/verdaccio/plugins"
          network_mode: "bridge"
      

    注意: 本地目錄 /home/verdaccio/storage 需要設置權限,不然會因為權限問題而導致操作失敗。

    chown -R 10001:65533 /home/verdaccio/storage
    

    本地目錄映射成功後,會簡化很多操作,比如:
    /home/verdaccio 目錄下會創建 storage 目錄,如果發佈了包,則在此目錄下的 data 中能找到對應的包文件夾,可以查看所有上傳的npm包,此處也可以直接刪除該包
    也會在 conf 映射到配置文件,方便我們需要時修改配置信息。

  • 拷貝 verdaccio 配置文件

    如果不想做本地目錄映射,也可以使用如下命令,拷貝出 verdaccio 鏡像的配置文件。
    docker cp:在容器和本地文件系統之間,拷貝文件或文件夾。

    docker cp verdaccio:/verdaccio/conf/config.yaml /home
    

私有庫部署成功

verdaccio 安裝啟動成功後,就可以直接網絡訪問。
當頁面出現下圖所示,就表示私有庫搭建成功,後續就可以進行私有包的發佈下載。
image

發佈一個包

有了私有庫以後,就可以在其上發佈 npm 包。
但初始化時需要先添加用戶,設置用戶名和密碼等,然後就可以直接發包了。

  • 添加用戶

    npm adduser --registry //0.0.0.0:4873/
    

    輸入用戶名、密碼和郵箱。

  • publish

    當需要把某個項目發佈到私有庫時,直接 publish

    npm publish --registry //0.0.0.0:4873/
    

    發佈成功後,刷新頁面,就能看到最新發佈的包。

install

在項目目錄下增加 .npmrc 文件,指定倉庫地址。

registry=//0.0.0.0:4873/

使用 npm install 包名,即可安裝私有包了。

verdaccio 配置文件解讀

常用配置如下:

  # 素有包的保存路徑
  storage: /verdaccio/storage/data
  # 插件的保存路徑
  plugins: /verdaccio/plugins

  # 通過web訪問
  web:
    title: Verdaccio

  # 賬號密碼文件,初始不存在
  auth:
    htpasswd:
      file: /verdaccio/storage/htpasswd
      # max_users:1000
      # 默認1000,允許用戶註冊數量。為-1時,不能通過 npm adduser 註冊,此時可以直接修改 file 文件添加用戶。

  # 本地不存在時,讀取倉庫的地址
  uplinks:
    npmjs:
      url: //registry.npmjs.org

  # 對包的訪問操作權限,可以匹配某個具體項目,也可以通配
  # access 訪問下載;publish 發佈;unpublish 取消發佈;
  # proxy 對應着uplinks名稱,本地不存在,去unplinks里取

  # $all 表示所有人都可以執行該操作
  # $authenticated 已註冊賬戶可操作
  # $anonymous 匿名用戶可操作
  # 還可以明確指定 htpasswd 用戶表中的用戶,可以配置一個或多個。
  packages:
    '@*/*':
      access: $all
      publish: $authenticated
      unpublish: $authenticated
      proxy: npmjs

    '**':
      access: $all
      publish: $authenticated
      unpublish: $authenticated
      proxy: npmjs

  # 服務器相關
  sever:
    keepAliveTimeout: 60

  middlewares:
    audit:
      enabled: true

  # 日誌設定
  logs: { type: stdout, format: pretty, level: http }