nexus3는 다양한 레포지토리를 사용할 수 있는 사설 저장소 이다. maven, docker, pypi, apt, yum 다양한 패키지 저장소를 한 곳에서 관리가 가능하다는 장점을 가지고 있다.
목차
- nexus3 일반 설치 – OS에 올리는 방
- nexus3 컨테이너 설치 – docker or podman을 사용하여 올리는 방식
- nexus3 https 사용하기 – 사설 인증서를 통한 인증 진행
nexus3 컨테이너 설치 및 https 사용하기
- 이번 컨테이너 설치는 podman 기준 / RHEL 8 기준으로 작성 되었다.
1. 사전 구성
- RHEL 8 기본 버전으로 설치하면 podman은 먼저 설치 되어 있는 상태이다.
- 디렉토리 생성: volume과 연결하는 법과 외부 디렉토리와 연결하는 두가지 방법이 있는데 이번에는 외부 디렉토리와 연결하는 방법으로 진행 하기로 하겠다.
# nexus-data파일과 링크걸기 위해 생성
mkdir /home/nexus-data
2. nexus3 컨테이너 올리기
- port 8081-8085로 한 이유는 repositry를 노출할 포트를 추가로 설정해놓은 것이다. 8081은 nexus 포탈의 기본 port이다.
- 기본 적으로 사용할 수 있는 상태이다.
podman run -d -p 8081-8085:8081-8085 \
--name nexus3 \
-v /home/nexus-data:/nexus-data \
sonatype/nexus3
3. https로 구성하기
먼저 https로 구성하려면 인증서를 만들어야 한다.
- 먼저 아래와 같이 인증서를 생성 해줘야 한다.
- nexus는 SAN(SubjectAltName)이 포함된 인증서만 동작한다.
[root@bastion certs]# openssl req -addext "subjectAltName=DNS:nexus.dhwon.com" -subj "/C=KO/ST=Seoul/L=Seoul/O=test/OU=test/CN=bastion.ocp.dhwon.com/emailAddress=test@dhwon.com" -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt
[root@bastion certs]# cp domain.crt /etc/pki/ca-trust/source/anchors/.
[root@bastion certs]# update-ca-trust
인증서를 구성한 후 java에서 인식 할 수 있도록 인증서를 변환해줘야 한다.
- 주의 해야할 점은 password를 입력하므로 이부분을 설정값에 잘 맞춰서 넣어야만 제대로 인식 된다.
- p12 인증서 생성
$ openssl pkcs12 -export -out <생성할 인증서 네임> -inkey <key> -in <원본 인증서>
# 예시
$ openssl pkcs12 -export -out nexus.p12 -inkey private.key -in origin.crt
- 패스워드 생성하여 jks 인증서로 변환
keytool -importkeystore -deststorepass cloud1234 -destkeypass cloud1234 -destkeystore keystore.jks -srckeystore nexus.p12 -srcstoretype PKCS12 -srcstorepass cloud1234
인증서를 생성했다면 인제 mount 위치를 잘 잡아줘야 한다.
- nexus-default.properties: https 설정 추가
- jetty-https.xml: 인증서 passwod 등록
- keystore.jks: https 인증을 위한 인증서
[root@nexus etc]# tree /home/etc/ /home/jetty/ /home/ssl
/home/etc/
└── nexus-default.properties
/home/jetty/
├── jetty-https.xml
/home/ssl
└── keystore.jks
0 directories, 7 files
nexus-default.properties 설정 변경
- nexus-args: jetty-http.xml →
jetty-https.xml로 변경 - appliation-port →
application-port-ssl로 변경
```
application-port-ssl=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/
# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
nexus-pro-feature
nexus.hazelcast.discovery.isEnabled=true
```
https 설정 변경
- password → 인증서에서 저장한 password로 변경
```
<New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory$Server">
<Set name="KeyStorePath"><Property name="ssl.etc"/>/keystore.jks</Set>
<Set name="KeyStorePassword">cloud1234</Set>
<Set name="KeyManagerPassword">cloud1234</Set>
<Set name="TrustStorePath"><Property name="ssl.etc"/>/keystore.jks</Set>
<Set name="TrustStorePassword">cloud1234</Set>
<Set name="EndpointIdentificationAlgorithm"></Set>
<Set name="NeedClientAuth"><Property name="jetty.ssl.needClientAuth" default="false"/></Set>
<Set name="WantClientAuth"><Property name="jetty.ssl.wantClientAuth" default="false"/></Set>
<Set name="IncludeProtocols">
<Array type="java.lang.String">
<Item>TLSv1.2</Item>
</Array>
</Set>
</New>
```
nexus 올리는 podman 명령어
- 사용할 수 있는 포트는
8081-8085로 설정한다 - nexus-data를 통해 기본적인 설정 적용 진행한다.
- jetty 파일에서
jetty-https.xml사용을 위해 설정 필요 - nexus-default.properties 를 링크를 걸어준다
podman run -d -p 8081-8085:8081-8085 \
--name nexus3 \
-v /home/nexus-data:/nexus-data \
-v /home/ssl:/opt/sonatype/nexus/etc/ssl/ \
-v /home/jetty:/opt/sonatype/nexus/etc/jetty/ \
-v /home/etc/nexus-default.properties:/opt/sonatype/nexus/etc/nexus-default.properties \
sonatype/nexus3
이렇게 생성을 하면 컨테이너가 생성되는 것을 확인 가능 하다
[root@nexus ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1010f1322ae9 docker.io/sonatype/nexus3:latest /opt/sonatype/nex... 3 days ago Up 2 days 0.0.0.0:8081-8085->8081-8085/tcp nexus3
[root@nexus ~]#
접속 화면 확인

nexus 구축해보기는 이번 글로 마무리 하도록 하겠다.