::: IT인터넷 :::

시놀로지 NAS에 Nexus3 구축하기

정보보안썰문가 곰탱이푸우 2021. 6. 16. 08:20
반응형

현재 근무 중인 회사에서는 사내 사설 저장소로 jFrog의 Artifactory를 사용 중이다.

기능도 익숙하고 사용하기 편리하지만 상용 제품이다 보니 개인이나 소규모로 사용하기에는 부담이 있다.

 

구글링을 해보니 Sonatype의 Nexus3가 jFrog와 상당히 유사한 기능을 제공한다고 하여 선택했다.
(사용해보니 정말 잘한 결정이었다.)

 

Sonatype의 Nexus3는 개발 관련 사설 저장소(리파지토리)이며, 오픈소스와 상용 제품을 동시에 제공하고 있다.

  • 웬만한 기본 기능은 오픈소스로도 충분히 사용 가능하다.
  • Maven, nuget, PyPi, Docker, APT, Conda, npm, Go, Helm, Ruby, Yum 외에 다양한 사설 저장소 운영이 가능하다.
  • PyPi, APT, Conda, Doker 저장소를 운영하기 위해 구축했다. (Java와 친하지 않기 때문에 Maven은 제껴둠)

 

 

제작사인 Sonatype에서 공식적으로 Docker 이미지까지 제공하고 있어서 정말 쉬운 설정과 사용이 가능하다.

  • 시놀로지 NAS DS216 모델부터 Docker 사용이 가능하다.
  • 따라서 NAS의 공간을 활용한 사설 저장소 서버 운영도 가능하다.

 

단, NAS에서 운영하기 위해서는 여유 메모리 확보가 필수다.

  • 사용 중인 DS220+ 모델 기본 메모리가 2G이다. (게다가 On-Board)
  • Sonatype Nexus3를 Docker로 설치하면 약 1~1.2G의 메모리 공간을 차지한다.
  • 따라서 NAS를 이용한 개발환경 구축을 목표로 한다면 램 확장을 권장한다.  (8G 또는 16G 추가)

 

Sonatype의 Nexus Repository 관련 정보는 다음 사이트를 참고한다.

오픈소스

 

Nexus Repository OSS - Software Component Management | Sonatype

The world's only repository manager with FREE support for popular formats.

www.sonatype.com

 

프로 (상용)

 

Nexus Repository | Software Component Management

Know what's inside your software. Nexus Repository - The world's best way to organize, store, and distribute software components.

www.sonatype.com

 

 

오픈소스와 프로 버전 비교

 

Nexus Repository OSS vs. Pro Features

Here's a bird's-eye view of features supported by all available versions of Nexus Repository Manager.

www.sonatype.com

  • 오픈소스 버전도 유료 버전과 동일한 저장소를 사용할 수 있다.
  • 상용 제품은 주로 보안, 데이터 백업, 부가 기능을 포함하는지 여부이다. (25인 기준 $3,000/년)
  • 개인 용도나 소규모 그룹에서 사용하는 목적이라면 오픈소스 버전도 충분하다.

 

Docker 설정

시놀로지 NAS에서 제공하는 Docker 앱에서 Sonatype Nexus3 Docker 이미지를 사용하여 셋팅한다.

 

공유 볼륨 폴더 생성

시놀로지 Docker 이미지와 공유하기 위한 폴더 (볼륨)를 생성한다.

  • VMware나 VirtualBox의 폴더 공유와 동일한 개념이다.
  • 해당 Docker 컨테이너 내부에서 생성된 파일을 Docker 외부에서 확인할 수 있다.

 

적절한 경로에 사용할 폴더를 생성한다.

  • 다수의 Docker 컨테이너를 사용할 것이므로 최상위 경로에 docker 폴더를 생성했다.
  • docker 폴더 하위에 nexus3 폴더를 만들고, 실제 데이터가 저장 될 nexus-data 폴더를 생성했다.

 

생성한 nexus-data 폴더를 우클릭하여 '속성'을 선택한다.

권한 탭을 클릭하면 사용자 또는 그룹에 대해 해당 경로에 대한 권한을 부여할 수 있다.

 

 

생성 버튼을 클릭하면 권한 편집기가 나타난다.

  • 사용자 또는 그룹은 SYSTEM을 선택한다. (Docker 컨테이너는 SYSTEM 계정으로 실행된다.)
  • 읽기, 쓰기 부분의 체크박스를 선택하고 '확인'을 클릭한다.

 

SYSTEM 계정에 대해 해당 폴더에 대한 읽기 & 쓰기 권한이 부여된 것을 확인할 수 있다.

 

Nexus3 Docker 이미지 다운로드

Docker 앱의 레지스트리 탭을 선택하고 nexus로 검색하면 sonatype/nexus3 Docker 이미지를 확인할 수 있다.

더블 클릭하고 latest 태그를 선택하고 '선택' 버튼을 누른다.

 

 

sonatype/nexus3:latest 이미지가 다운로드 되었다. 크기는 약 668MB이다.

 

Nexus3 Docker 컨테이너 생성

해당 이미지를 더블클릭하면 컨테이너 생성 화면이 출력된다.

  • 컨테이너 이름은 사용하고자 하는 적절한 이름을 부여한다.
  • 그대로 사용해도 무방하다.

 

고급 설정 버튼을 클릭하면 상세 설정 화면으로 진입한다.

  • 자동 재시작 활성화에 체크한다.
  • NAS가 재부팅되거나, Docker 컨테이너가 비정상 종료 했을때 자동으로 재시작한다.

 

볼륨 탭을 선택하고 폴더 추가 버튼을 선택하여 미리 생성한 공유 폴더(볼륨)을 연결한다.

  • '폴더 추가' 버튼을 클릭하면 폴더를 선택할 수 있는 창이 출력된다.
  • 이전에 생성한 경로로 이동하여 선택한다.
  • '마운트 경로'는 직접 입력해야 한다. /nexus-data를 입력한다.

 

 

포트 설정 탭을 선택하고 + 버튼을 클릭하여 컨테이너 외부로 연결할 포트를 입력한다.

  • 8081은 Nexus3가 사용하는 기본 포트이다.
  • SSL 연결을 위해 리버스 프록시로 연결하기 위해 5자리의 임의의 포트를 지정했다.
  • 5000과 5001은 나중에 Docker 사설 저장소 설정에 사용할 것으로 미리 생성해두었다.

 

모든 설정을 마치고 확인 버튼을 누르면 아래와 같이 컨테이너가 생성 된 것을 확인할 수 있다.

  • CPU 점유율은 0.5% 이내로 안정적이다. (최초 실행시 40% 정도 점유하다 2~3분 내에 1% 이내로 줄어든다.)
  • RAM은 1.1~1.2GB 정도 점유한다. NAS에 기본 탑재 된 2G 램으로는 매우 부족하다.

 

해당 컨테이너를 더블 클릭하면 상세 정보를 확인할 수 있다.

  • 프로세스 탭은 컨테이너 내부에서 실행 중인 프로세스 목록을 확인할 수 있다.
  • 터미널 탭은 해당 컨테이너 내부의 실행 상태(로그) 확인과 쉘 (Bash)을 통한 명령 전달이 가능하다.

 

참고사항

위의 내용은 시놀로지 Docker 앱에 특화 된 내용이지만, 일반 Docker를 이용해서도 가능하다.

$ docker pull sonatype/nexus3:latest
$ docker run -d -p 8081:8081 -p 5000:5000 -p 5001:5001 \
  --name sonatype-nexus -v /home/your_account/nexus-data:/nexus-data sonatype/nexus3

 

 

SSL 설정 (리버스프록시)

아래 내용은 시놀로지 NAS로 설정하는 경우에만 해당한다.

  • 별도의 SSL 인증서 설정 없이 NAS에서 제공하는 리버스프록시 기능을 사용한다. (아주 간편하다.)
  • 특정 HTTPS 프로토콜을 Docker 컨테이너의 HTTP 프로토콜로 연결한다.
  • NAS 외부에서 특정 Docker 컨테이너에 HTTPS 프로토콜을 이용하여 접근할 수 있다.
  • 해당 NAS 도메인에 대한 SSL 인증서가 적용된 상태가 유지된다.

 

시놀로지 NAS에 SSL 인증서 적용하는 방법은 아래 글을 참고한다.

 

시놀로지 NAS Let's Encrypt 인증서 발급 받기

개요 Let's Encrypt 사용 계기 원래는 Nexus, GitLab, 인증서 순으로 작성하려고 했는데, 정리 순서가 반대로 되어 있어 인증서부터 작성한다. 시놀로지 NAS를 이용한 인증서 발급 자동 갱신 방법 3월부터

www.bearpooh.com

 

리버스프록시 설정을 위해 시놀로지 NAS의 제어판을 실행하고, 우측 상단의 '고급 모드'를 클릭한다.

 

제일 하단의 '응용 프로그램' 탭의 '응용 프로그램 포털'을 실행한다.

 

 

'역방향 프록시' 탭을 선택하고 생성 버튼을 클릭하여 포트를 연결한다.

  • 설명은 해당 규칙의 이름을 의미한다. nexus3 관련 규칙이므로 nexus3로 지정했다.
  • 소스는 NAS 외부에서 사용할 프로토콜과 포트이다.
  • 대상은 NAS 내부에서 연결할 대상이다.

 

정리하면 외부에서 특정 프로토콜과 포트로 접근하면 지정한 프로토콜과 포트로 전달하는 기능이다.

 

위의 설정을 완료하고 브라우저에서 https://도메인:소스포트 를 입력하면 아래와 같은 화면을 볼 수 있다.

  • 도메인이 test.com 이고
  • 리버스프록시 설정에서 정의한 소스포트가 8888이면
  • Nexus3의 접근 주소는 https://test.com:8888 이다.

 

Repository Formats를 살펴보면 정말 많은 저장소 (Repository)를 설정할 수 있음을 알 수 있다.

이 정도면 최근 인기가 좋은 언어는 거의 다 커버한다고 해도 과언이 아닐듯 하다.

 

상세 도메인과 포트가 공개 되면 외부 공격에 취약할 수 있기 때문에, 비식별화를 적용함을 양해 부탁드린다.

다음 포스팅에서는 Nexus3 초기 설정에 대해 정리할 예정이다.

 

Nexus3 설치 후 초기 설정

시놀로지 NAS에서 Docker를 이용한 Nexus3 설치는 아래 포스팅을 참고한다. 시놀로지 NAS에 Nexus3 구축하기 현재 근무 중인 회사에서는 사내 사설 저장소로 jFrog의 Artifactory를 사용 중이다. 기능도 익숙

www.bearpooh.com

반응형