- 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 다음글이전글이전 글이 없습니다.댓글