使用nexus搭建npm本地私人倉庫

hjdong8發表於2020-12-29

背景

NPM上為我們提供了許多官方安裝包,我們可以從npmjs中上傳或者下載npm安裝包,但是:

  • 由於網路的限制,會導致npm包的上傳和下載速度較慢;
  • 生產使用的npm包中包含了許多隱私資訊,若放到NPM倉庫上容易被外部人員獲取。

技術選型

  • cnpm
  • verdaccio
  • sinopia
  • nexus (本案例選擇該技術)

nexus優點

  • 支援多種型別的倉庫,如:Docker、Npm、Nuget等
  • 整合LDAP
  • 支援許可權管理
  • 支援Webhook

環境

  • docker && docker-compose
  • 10.0.95.63 主機(暫時使用個人電腦作為私人映象倉庫伺服器)
  • 安裝Docker,通過Docker映象安裝
  • 埠對映:
外部埠對映埠倉庫型別描述
55658081group後臺訪問主埠;同時是安裝依賴的主埠,包含下面兩種型別的倉庫
55678082hosted私有倉庫,內部開發上傳的倉庫,不對外暴露
55668083proxy代理倉庫,即第三方倉庫,如taobao

搭建私人倉庫

  1. 拉取nexus官方docker映象

    docker pull sonatype/nexus3  # 官方映象
    docekr pull 10.0.95.63:5566/nexus # 本地映象
    
  2. 建立docker-compose.yml檔案

    sudo mkdir nexus && cd nexus
    sudo vim docker-compose.yml
    

    將下面的程式碼複製到docker-compose.yml檔案中

    version: "3.7"
    
    services:
      nexus:
        image: sonatype/nexus3  # 或者為10.0.95.63:5566/nexus
        ports:
          - "5565:8081"			# 後臺訪問主埠,同時也是group倉庫的訪問埠
          - "5567:8082"			# 代理倉庫埠,即第三方倉庫,如taobao
          - "5566:8083"			# 私有倉庫埠,內部開發上傳的倉庫,不對外暴露
        restart: always
        container_name: "nexus" # 容器名稱
        volumes:
          - "/media/mes/file2/nexus3:/nexus-data" # 將/nexus-data掛載本地的/media/mes/file2/nexus3
    

    執行容器:

    docker-compose up -d
    
  3. 在瀏覽器中開啟路徑http://10.0.95.63:5565,若能開啟以下介面,則代表配置成功

    Image1

    然後點選Sign in進行登入,首次登入時,賬號為admin,密碼自動生成在/media/mes/file2/nexus3/admin.password檔案中

    cat /media/mes/file2/nexus3/admin.password
    

    將密碼輸入到登入框中即可

  4. 點選ConfigurationRepositoriesCreate repository建立倉庫

    image-20201228185722283

    分別建立以下三種型別的倉庫

    image-20201228190051969

  5. 建立hosted型別的倉庫,選擇npm(hosted),輸入倉庫名稱npm-hosted,然後點選Create repository建立倉庫;

    image-20201228190256619

  6. 建立proxy型別的倉庫,選擇npm(proxy),輸入倉庫名稱npm-taobao,輸入代理地址https://registry.npm.taobao.org/

    image-20201228190558469

    勾選Auto blocking enabled,將Maximum component age修改為-1,將Maximum metadata age修改為30,然後點選Create repository建立倉庫;

    image-20201228190839807

  7. 建立group型別倉庫,選擇npm(group),輸入倉庫名稱npm-group,然後將上面建立的倉庫移到Members中,然後點選Create repository建立倉庫;

    image-20201228191734722

  8. 建立完成後,如下圖

    image-20201228191929376

  9. 驗證

    # 方法一:
    npm config set registry http://10.0.95.63:5565/repository/npm-group/ # 點Copy即可獲取該地址
    npm login --registry=http://10.0.95.63:5565/repository/npm-group/ # 依次輸入賬號密碼以及郵箱
    npm init -y # 建立一個新目錄並進行初始化
    npm install koa # 驗證是否能從倉庫中獲取包
    
    # 方法二:使用nrm,便於管理npm映象源
    npm install -g nrm # 安裝nrm
    nrm ls # 檢視可選的映象源
    nrm add nexus http://10.0.95.63:5565/repository/npm-group/ # 新增映象源
    nrm set-auth -u mes -p Mes_2020 nexus # 設定訪問許可權
    nrm set-email nexus mes@domain.cn # 設定郵箱
    nrm use nexus # 使用本地映象源
    npm init -y # 建立一個新目錄並進行初始化
    npm install koa # 驗證是否能從倉庫中獲取包
    
  10. 若登入報錯:Unable to authenticate, need: BASIC realm="SOnatype nexus Repository Manager",

    image-20201228201107271

    解決方案:

    1. 選擇Security下的Realms,將npm Bearer Token RealmAvailable移到Active

    image-20201228201301556

相關文章