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

jimojianghu發表於2021-11-19

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

verdaccio

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

安裝

使用 npm / yarn 進行全域性安裝

  • Node.js v12+

  • npm 4.x+ 或yarn

  • 全域性安裝

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

    verdaccio
    
    或者使用 pm2 start verdaccio
    

    使用瀏覽器訪問web服務,埠號4873,http://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
    啟動成功以後,實際上就可以在瀏覽器訪問了,http://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 http://0.0.0.0:4873/
    

    輸入使用者名稱、密碼和郵箱。

  • publish

    當需要把某個專案釋出到私有庫時,直接 publish

    npm publish --registry http://0.0.0.0:4873/
    

    釋出成功後,重新整理頁面,就能看到最新發布的包。

install

在專案目錄下增加 .npmrc 檔案,指定倉庫地址。

registry=http://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: https://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 }

相關文章