• 티스토리 홈
  • 프로필사진
    루루개발자
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
루루개발자
  • 프로필사진
    루루개발자
    • 분류 전체보기 (213)
      • react & next.js (13)
      • Node.js & Javascript & Type.. (24)
        • d3.js (10)
      • 차트 만들기 (1)
      • 티스토리 스킨 개발 (7)
      • 내가 만든 패키지 (3)
      • 내가 만든 CSS (1)
      • CSS (7)
      • 도커 & 쿠버네티스 (3)
      • 개인 프로젝트 (7)
      • 리뷰 & 추천 (2)
      • 알고리즘 (1)
      • IT 기타 (18)
      • 잡동사니 (1)
      • Spring Boot (5)
      • 취미로 그리는 그림들 (120)
      • 개인적인 생각들 (0)
  • 반응형
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Nexus 에 npm 패키지 배포하기
        2024년 08월 03일
        • 루루개발자
        • 작성자
        • 2024.08.03.:39
        반응형

        회사 내에서 운영되는 여러 프로젝트에서 공통으로 사용되는 패키지 같은 경우는 별도 저장소에 배포하여 각각의 프로젝트들이 해당 저장소에서 패키지를 내려 받아 사용하게 하는 것이 좋을 수가 있습니다. 직접 저장소를 구축할 때 여러 방법이 있겠지만, 여기서는 Nexus 를 이용하여 저장소를 구축 및 환경 설정 하는 방법에 대해 공유 드리고자 합니다.

         

        Nexus 도커 이미지 빌드 및 컨테이너 실행

        Nexus 를 직접 서버에 설치하고 환경 설정을 해주는 방법도 있겠지만, 여기서는 도커 이미지를 활용하는 방법을 공유드리겠습니다.

         

        1) https://github.com/sonatype/docker-nexus3/blob/main/Dockerfile
        위 Dockerfile 을 다운로드 받습니다.

        2) 터미널을 실행 후, 위 Dockerfile 위치한 경로로 이동합니다.

        3) 아래 명령어를 활용하여 nexus 도커 이미지 빌드를 진행합니다.

        docker build --no-cache --rm=true --tag=sonatype/nexus3 -t rRMuHjaWdyr5Dk2yZhKf/nexus3:latest .

        4) 아래 명령어로 Nexus 컨테이너를 실행합니다.

        docker run -d -p 8081:8081 --name nexus rRMuHjaWdyr5Dk2yZhKf/nexus3:latest

        5) 이제 아래 주소로 Nexus 페이지에 접근 가능합니다. 컨테이너가 실행된 직후 Nexus 가 구동 되는데 시간이 좀 걸릴 수 있기 때문에 당장 접속이 되지 않으시다면 조금 기다렸다가 다시 접속해주세요.

        http://localhost:8081/

         

         

        Admin 계정으로 로그인하기

        1) 상단에 Sign in 버튼을 클릭합니다.

        2) 호스트 OS 에서 아래 명령어를 통해 nexus 컨테이너 안으로 진입합니다.

        docker exec -it ${Nexus컨테이너ID} /bin/bash

         

        3) 컨테이너 안으로 진입 후 아래 명령어를 통해 admin 계정의 최초 비밀번호를 확인 합니다.

        cat /nexus-data/admin.password

        4) 다시 Nexus Sign in 페이지로 돌아와서 아래와 같이 ID, PASSWORD 를 입력하여 로그인 합니다.

        • ID : admin
        • PASSWORD : /nexus-data/admin.password 에 적혀있는 최초 비밀번호

         

        Blob Store 생성하기

        npm 패키지 파일들을 물리적으로 저장할 store 를 생성합니다.

         

        1) 상단에 설정 아이콘 클릭

        2) Blob Stores 클릭

        3) Create Blob Store 클릭

        4) 다음과 같이 입력 후 “Save” 버튼 클릭

         

        Repository 생성하기

        1) Repositories 클릭

         

        2) Create repository 클릭

        3) npm (hosted) 선택

        hosted 는 직접 자체적으로 개발한 라이브러리를 위한 전용 저장소를 구축해야 할 때 사용될 수 있는 옵션입니다.

        4) 다음과 같이 입력 후 “Create repository” 버튼을 클릭합니다.

        • Name : 저장소 이름 
        • Storage.Blob store : 이전에 생성했던 npm Blob Store 선택

        Role 생성하기

        생성한 repository(패키지 저장소)에 접근 가능하도록 하기 위한 권한을 생성 및 설정합니다.

         

        1) Roles 클릭

        2) Create Role 클릭

        3) Nexus role 선택

         

        -> npm read 권한 생성하기

        1) 아래와 같이 입력

        2) Modify Applied Privileges 클릭

        3) 다음과 같이 2개 권한을 체크 후 Confirm 클릭

        • nx-repository-view-npm-${레포지토리명}-browse
        • nx-repository-view-npm-${레포지토리명}-read

        4) Save 버튼 클릭

         

        -> npm write 권한 생성하기

        1) 아래와 같이 입력

        2) Modify Applied Privileges 클릭

        3) 다음과 같이 2개 권한을 체크 후 Confirm 클릭

        • nx-repository-view-npm-${레포지토리명}-add
        • nx-repository-view-npm-${레포지토리명}-edit

        4) Save 버튼 클릭

        User 생성하기

        1) Users 클릭

        2) Create local user 클릭

        -> read user 생성하기

        아래와 같이 입력 후 Create local user 클릭

        -> write user 생성하기

        아래와 같이 입력 후 Create local user 클릭

        프로젝트 설정

        라이브러리 레포지토리 설정(Nexus에 배포되는 패키지 프로젝트)

        1) Repositories → 생성한 repository → URL 부분을 기억하거나 복사해둡니다.

        2) .npmrc 파일 생성 후 아래와 같이 작성합니다.

        저장소주소:_auth=${ID:PASSWORD가base64로 인코딩된 문자열}

         

        예시)

        //localhost:8081/repository/company-common-library/:_auth=***********

         

        모노레포인 경우에는 .npmrc 를 모노레포의 루트 경로에 생성해야 각 워크스페이스들에서도 적용됩니다.

        3) _auth 부분의 값은 아래와 같이 생성할 수 있습니다.

        echo -n '계정_ID:계정_PW' | openssl base64

        여기서의 계정 정보는 패키지를 nexus 저장소에 배포해야 하므로, nexus 저장소에 쓰기 권한이 있는 계정(user) 의 ID, PW 를 사용해야 합니다.

        4) package.json 에 아래 항목을 추가합니다.

        {
          ...
          "publishConfig": {
            "registry": "저장소_npm_repository_주소"
          },
          ...
        }

        예시)

        "publishConfig": {
          "registry": "http://localhost:8081/repository/company-common-library/"
        },

         

        애플리케이션 레포지토리 설정 (nexus에 등록된 패키지를 사용하는 프로젝트)

        1) .npmrc 파일 생성 후 아래와 같이 작성합니다.

        @scope:registry=//localhost:8081/repository/company-common-library/
        //localhost:8081/repository/company-common-library/:_auth==*************

        nexus 등으로 패키지를 따로 관리할 때 패키지명을 @scope/* 으로 관리해주는 것이 위와 같이 scope 별로 바로 볼 저장소를 다르게 지정하기에 좋습니다.

        2) _auth 부분의 값은 아래와 같이 생성할 수 있습니다.

        echo -n '계정_ID:계정_PW' | openssl base64

        여기서의 계정 정보는 패키지를 nexus 저장소에 있는 패키지를 가져오기만 하면 되므로 nexus 저장소에 읽기 권한이 있는 계정(user) 의 ID, PW 를 사용해야 합니다.

         

        참고

        https://devocean.sk.com/blog/techBoardDetail.do?ID=163423
        https://lasbe.tistory.com/194
        https://devblog.kakaostyle.com/ko/2022-03-07-1-npm-private-repository/

         

        반응형

        'IT 기타' 카테고리의 다른 글

        github 를 이용해서 무료로 정적 웹사이트 호스팅하는 방법  (0) 2024.10.05
        안드로이드 기기 브라우저(or 웹뷰)의 console log 를 PC 에서 확인하는 방법  (2) 2023.10.16
        npm 에 내가 만든 패키지 배포하기 (feat. github action 으로 배포 자동화)  (0) 2023.09.15
        리액트(React)의 역사  (2) 2023.08.26
        meta 태그의 keywords 는 이제 seo 에 영향을 주지 않는다?  (0) 2023.08.24
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바