일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Cluster
- java
- ec2
- 간단
- EMR
- 로그인
- Mac
- Redis
- spring
- 클러스터
- Docker
- vue
- hive
- 젠킨스
- aws
- SpringBoot
- Kafka
- 레디스
- redash
- 설정
- 예제
- login
- Zeppelin
- gradle
- fastcampus
- Jenkins
- 자바
- 머신러닝
- config
- 자동
- Today
- Total
코알못
[Docker] Nexus - meven proxy로 활용하여 빠른 빌드 실습 본문
이번 시간에는 Nexus 설치 및 이용을 해보도록 한다!
Nexus를 이용하면 아래 장점을 누릴 수 있다.
- 클라우드가 아닌 자체 서버에 내부 소스 코드 저장하여 보안적 측면에서 좋음
- maven central에 있는 라이브러리중 사용하는 라이브러리는 nexus blob stores(local, aws s3)에 저장
- 두번째부터 라이브러리 사용시 저장한 데이터를 사용하므로 maven central 와 네트워크 통신을 하지 않아도 되어 빠르게 사용 가능함 (빠른 빌드)
- 서비스 서버가 maven central(외부)를 통신하지 않고 nexus(내부)서버와 통신하면 되므로 서비스 서버를 private한 공간(외부 통신 안되는 구간)에 구축 할 수 있음
[이전글] 에서도 Nexus 관련 실습을 진행하였으나 이번 시간에는 다르게 실습 하도록 하며 원하는 목적에 맞게 글을 확인하면 된다.
구분 | 이전 실습 | 현재 실습 |
설치 방법 | wget으로 소스파일 직접 다운 | docker를 통해 이미지 다운 |
목적 | 사내 소스 파일 private한 서버에 저장 (장점 01) | 빠른 빌드 (장점 02) |
실습 내용 | 사내 소스 파일을 nexus 에 올리고 다운 받아 이용 | maven central에 있는 라이브러리 AWS S3에 저장하여 이용 |
이제 실습을 진행해보자!
실습을 위해 EC2 아래 스펙이 필요하므로 t3.medium로 생성해본다.
CPU | MEMORY |
2 Core | 4GB |
아래와 같이 원하는 선택사항 선택후 인스턴스 시작을 눌러 EC2를 생성한다.
보안 그룹은 아래와 같이 nexus 포트인 8081, ssh 를 위한 22번 포트 인바운드를 열어둔다.
저자의 경우 모든 대역을 오픈하였으나 실제 서비스 할 경우에는 실제 접속하는 IP 나 대역만 열어 두도록 한다!
EC2에 접속한 뒤
$ ssh -i [pem key] ubuntu@[IP]
아래와 같이 패키지 업데이트 한 뒤 도커를 설치하고 일반 유저(ubuntu)에게 권한을 부여하여 root 권한 없이 실행 가능하도록 한다.
$ sudo apt update
$ sudo apt install -y docker.io
$ sudo chmod 666 /var/run/docker.sock
이제 docker로 Nexus 설치 한다!
$ docker run --name nexus -d -p 8081:8081 -v ~/nexus-data:/nexus-data -u root sonatype/nexus3
사용한 옵션은 아래 참고한다.
옵션 | 내용 |
--name nexus | 컨테이너명을 nexus로 지정한다. |
-d | 백그라운드로 띄운다. |
-p 8081:8081 | 서버 8081 포트를 컨테이너 8081 포트로 연결한다. |
-v ~/nexus-data:/nexus-data | 로컬 볼륨(~/nexus-data)에 컨테이너 볼륨(/nexus-data)을 마운트하여 컨테이너 삭제 뒤에도 데이터가 날라가지 않도록 한다. |
-u root | 루트 권한으로 컨테이너를 실행한다. (컨테이너 안에서 sudo를 못쓰기 때문에 컨테이너 자체를 루트 권한으로 띄운다.) |
이제 nexus를 브라우저에 http://[IP]:8081 입력하여 접속해보자!
아래와 같이 첫 화면이 나오며 Sign in 을 눌러 로그인 하려고 보면 관리자 ID는 admin이며 패스워드는 아래 경로에서 확인 가능하다고 하니 복사하여 로그인 하도록 한다.
둘중에 하나 입력하여 패스워드 확인하고 입력하여 로그인 한다.
$ docker exec -it nexus bash -c 'cat /nexus-data/admin.password'
$ cat ~/nexus-data/admin.password
로그인 하면 새로운 패스워드 변경창이 뜨며 설정하고 Next를 눌러 넘어가며 Disable 을 눌러 로그인 하지 않은 유저가 조작 하지 못하도록 한다.
이제 meven central 라이브러리를 S3에 저장하기 위해 Blob Stores 를 생성해보자!
아래 경로로 들어가면 default로 로컬 경로 4.9GB 저장 가능한 Blob Stores 가 있으며 Create 버튼을 누른다.
아래와 같이 설정 하며 AWS Key의 경우 [해당글]에 'AWS Key 를 생성' 부분을 참고하여 키 생성하고 입력한다.
설정 관련해서는 아래 정리한 표 참고한다.
구분 | 내용 |
Type | S3(AWS), File(Local) 중에 선택하며 저자는 S3에 저장할 예정이니 S3를 선택한다. |
Name | Blob Sores를 구분할 이름을 지정한다. |
Region | S3 리전을 입력하며 저자의 경우 서울이므로 ap-northeast-2를 입력한다. |
Bucket | S3에 라이브러리를 저장할 버킷명을 입력한다. (이미 생성되어 있는 버킷이면 해당 버킷에 저장하며 생성 되어 있지 않다면 생성한다.) |
Prefix | 위에 지정한 버킷의 어떤 디렉토리에 저장할지 적는다. (이미 생성되어 있는 버킷이면 해당 버킷에 저장하며 생성 되어 있지 않다면 생성한다.) |
Expiration Days | 예를 들어 3일 일 때 라이브러리를 Nexus에서 삭제하면 S3에 저장된 라이브러리는 3일 뒤에 삭제 되고 -1이면 Nexus에서 삭제시 S3에서도 바로 삭제된다. |
Access Key / Secret Key | AWS Key |
S3 이기에 무제한 공간으로 생성 되었으며 S3 에 들어가서 보면 정상적으로 해당 버킷, 디렉토리가 생성 된것을 볼 수 있다.
해당 Blob Stores 를 사용하기 위해 Create 버튼을 눌러 repository를 생성한다.
maven central에 라이브러리 대신 가져오는 용도로 사용하므로 의미에 맞는 proxy를 선택하면 되며
Version policy 의 경우 Mixed 는 release, snapshot 모두 사용한다는 의미 이며
Layout policy 는 라이브러리 가져올시 상대 경로 입력해도 된다는 뜻이며 나머지는 디폴트로 한다.
그리고 remote storage 에는 메이븐 저장소 URL 'https://repo1.maven.org/maven2/' 을 입력한다.
그 다음 사용할 Blob store 인 S3 를 선택하고 Create 버튼을 눌러 생성한다.
nexus에서 maven repo를 가져오기 위해서는 아래 저장소 URL 을 복사한뒤
아래와 같이 build.gradle 을 수정하면 된다.
allowInsecureProtocol true 의 경우 maven url 이 https 가 아니면 오류가 발생하므로 현재는 상용 서비스가 아니니 true 로 하여 임시로 오류 발생하지 않도록 한다.
repositories {
//mavenCentral()
maven {
url "[복사한 저장소 URL]"
allowInsecureProtocol true
credentials {
username "[nexus id]"
password "[nexus pw]"
}
}
}
변경한 뒤 빌드를 수행하고 S3 에 정상적으로 저장 되었는지 확인 하면 19MB 쌓인 것을 볼 수 있다.
이제 로컬에 빌드 캐시를 지우고 빌드 시간이 얼마나 소요되는지 확인한다.
$ rm -rf ~/.gradle/caches/*
$ gradlew build
세번 평균으로 측정하였으며 아래와 같이 Nexus 사용시 소요시간이 단축 된 것을 볼 수 있다.
nexus 변경전 | nexus에서 라이브러리 두번째 가져올시 |
약 2분 | 약 42초 |
끝!!
'ETC' 카테고리의 다른 글
[Zeppelin] 노트 저장 경로 local > S3 로 변경 (0) | 2023.03.31 |
---|---|
[EKS] 알아보자! (0) | 2023.03.29 |
[Docker] 이미지 취약점 분석을 위한 Clair 설치 및 이용 방법 (0) | 2023.03.22 |
[EC2] EBS 볼륨 확장 (0) | 2023.03.22 |
[Docker] Sonarqube(with.jacoco) 활용 - 설치 및 연동 (0) | 2023.03.19 |