搭建自己的私服倉庫Nexus

殺神Q發表於2020-10-22

搭建自己的私服倉庫Nexus

為什麼需要Nexus?

團隊所需要的依賴構件都重複的從maven和npm倉庫下載,加大的倉庫的負載和外網頻寬,網速較慢會影響專案程式。團隊開發的公共構件怎麼讓其他專案使用

Nexus:Maven&Npm私服


一、運維篇

1、編輯docker-compose.yml

version: '3'
services:
  nexus:
    restart: always
    image: sonatype/nexus3
    container_name: nexus3
    ports:
      - 8081:8081
    volumes:
      - /usr/local/docker/nexus/nexus-data:/nexus-data

2、啟動

docker-compose up -d

啟動成功,訪問8081

注意:登入admin,初始密碼在檔案/sonatype-work/nexus/admin.password中,登入後修改密碼

3、如何高可用

通過keepalive+inotify+rsync做到主從ip漂移以及資料同步

4、資料遷移

(1)倉庫遷移

Nexus的構件倉庫都儲存在sonatype-work目錄中,該目錄的位置由nexus/conf/nexus.properties配置檔案指定。
倉庫遷移需要兩個過程:備份和還原

(2)備份倉庫

將sonatype-work資料夾整體備份即可,也可以選擇只備份最重要的兩個資料夾索引indexer、和倉庫storage、

(3)還原倉庫

將備份好的sonatype-work檔案拷貝到新的伺服器中。然後修改nexus/conf/nexus.properties配置檔案,重新指定倉庫的目錄。

二、使用篇

1、倉庫說明

(1)預設倉庫說明:

  • maven-centralmaven 中央庫,預設從 https://repo1.maven.org/maven2/ 拉取 jar
  • maven-releases:私庫發行版 jar,初次安裝請將 Deployment policy 設定為 Allow redeploy
  • maven-snapshots:私庫快照除錯版本、jar
  • maven-public:倉庫分組,把上面三個倉庫組合在一起對外提供服務,在本地 maven 基礎配置 settings.xml 或專案 pom.xml 中使用

(2)倉庫型別說明:

  • group:這是一個倉庫聚合的概念,使用者倉庫地址選擇 Group 的地址,即可訪問 Group 中配置的,用於方便開發人員自己設定的倉庫。maven-public 就是一個 Group 型別的倉庫,內部設定了多個倉庫,訪問順序取決於配置順序,3.x 預設為 ReleasesSnapshotsCentral,當然你也可以自己設定。
  • hosted:私有倉庫,內部專案的釋出倉庫,專門用來儲存我們自己生成的 jar 檔案
  • snapshots:本地專案的快照倉庫
  • releases: 本地專案釋出的正式版本
  • proxy:代理型別,從遠端中央倉庫中尋找資料的倉庫可以點選對應的倉庫的 Configuration 頁簽下 Remote Storage 屬性的值即被代理的遠端倉庫的路徑、,如可配置阿里雲 maven 倉庫
  • central:中央倉庫

2、建立倉庫

image-20201015100632530

選擇倉庫型別NPM、MAVEN、

image-20201015100736680

建立代理倉庫

Name:就是為代理起個名字
Remote Storage: 代理的地址,Maven的地址為: https://repo1.maven.org/maven2/
Blob Store: 選擇代理下載包的存放路徑

image-20201015105219563

建立私有倉庫

deployments pollcy: 是否允許重複釋出

image-20201015105700478

建立倉庫組

注意:私有倉庫在前,代理倉庫在後

注意倉庫的順序。maven查詢依賴時會依次遍歷倉庫組中的倉庫。

image-20201015110104163

3、許可權管理

三、接入篇

1、後端【MAVEN】

(1)maven setting.xml

<servers>
    <server>  
        <id>nexus</id>  
        <username>maven</username>  
        <password>thinkmacro@maven</password>  
    </server> 
</servers>
<mirrors>
    <mirror>  
        <id>nexus</id>  
        <name>nexus repository</name>  
        <url>https://repo.thinkmacro.cn/repository/maven-public/</url>  
        <mirrorOf>central</mirrorOf>  
    </mirror> 
</mirrors>

注意:server的ID和mirror的ID 需要保持一致

(2)pom.xml

<distributionManagement>
        <repository>
            <id>nexus</id>
            <name>Nexus Release Repository</name>
            <url>https://repo.thinkmacro.cn/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus</id>
            <name>Nexus Snapshot Repository</name>
            <url>https://repo.thinkmacro.cn/repository/maven-snapshots/</url>
        </snapshotRepository>
   </distributionManagement>

(3)釋出上傳到nexus

image-20201014173934926

或執行命令

mvn clean deploy

上傳成功

2、前端【NPM】

(1)設定npm倉庫

npm config get registry  #http://registry.cnpmjs.org/
npm config set registry http://192.168.0.136:8081/repository/npm-group/

(2)配置package.json

"publishConfig" : {
    "registry" : "http://192.168.0.136:8081/repository/npm-hosted/"
  }

(3)登入私服

npm login –registry=http://192.168.0.136:8081/repository/npm-hosted/

(4)釋出上傳到nexus

npm publish –registry=http://192.168.0.136:8081/repository/npm-hosted/

注意!publish失敗401有可能是nexus缺少npm token登入配置

image-20201015102852052

上傳成功

相關文章