오늘은 폐쇄망엥서 사용할 Nexus 서버 구축에 대해 알아보겠습니다.
서버 환경은 Linux Rocky9 입니다. Nexus는 JDK를 기반으로 돌아가기 때문에 Java 설치가 필요합니다. Java가 설치되어 있지 않은 경우 이 글을 확인해 주세요.
Nexus
Nexus는 Sonatype에서 개발한 저장소 관리 툴로, 개발자들이 소프트웨어 패키지를 쉽게 저장, 공유할 수 있도록 돕는 레포지토리 매니저입니다. Nexus를 이용하여 빌드 아티팩트(jar, war)와 의존성을 관리하고 이를 개발 환경에서 사용할 수 있습니다.
Nexus를 사용하게 된 이유는 다음과 같습니다.
외부망과 폐쇄망 간의 중간 지대인 DMZ에 Nexus 서버를 배치하여 필요한 의존성을 가져오게 하고, 폐쇄망에 있는 개발 환경에서는 Nexus 서버만을 통해 의존성을 관리할 수 있게 하여 보안과 개발 효율성을 모두 충족할 수 있습니다.
1. Nexus 설치하기
1-1. 다운로드
# nexus 디렉토리 생성
mkdir /home/nexus
# nexus 다운로드
wget https://download.sonatype.com/nexus/3/nexu-3.70.3-01-java8-unix.tar.gz
직접 설치하기
1-2. 압축 해제
tar -xvf nexus-3.70.3-01-java8-unix.tar.gz
1-3. 서버 실행
# 방화벽 8081포트 허용
firewall-cmd --zone=public --add-port=8081/tcp
cd nexus-3.70.3-01/bin
./nexus run
Nexus의 기본 포트는 8081입니다. 포트 정보를 변경하고 싶은 경우 아래 경로 접속 후 포트를 수정할 수 있습니다.
vi /home/nexus/nexus-3.70.3-01/etc/nexus-default.properties
2. 설정
서버가 실행되면 접속IP:8081로 접속합니다. 우측 상단에 Sign In을 통해 로그인을 합니다.
관리자 계정(admin)의 패스워드는 아래 경로에서 확인할 수 있습니다. 패스워드 확인 후 신규 패스워드로 변경합니다.
접근 제한을 설정합니다.
Enable anonymous access : 자격증명없이 접속 허용
Disable anonymous access : 자격증명된 사용자만 접근 가능
Repository 타입
Repository 타입에는 proxy, group, hosted가 있습니다.
- proxy : 외부 레포지토리를 프록시 합니다. 내부 환경에서 외부로 직접 접근이 불가능한 경우 프록시를 활용할 수 있습니다.
- group : 여러 레포지토리를 그룹핑합니다.
- hosted : 실제 현재 nexus에 라이브러리를 제공합니다. 자체 개발 라이브러리를 업로드하고 공유할 때 hosted 레포지토리를 설정합니다.
3. Nexus Repository 연결하기
본 예제에서는 proxy 레포지토리를 연결해 테스트를 진행합니다.
proxy 레포지토리는 Maven 기본 저장소인 repo1.maven.org/maven2/에서 의존성을 가져옵니다. (repo.maven.org는 Maven Central의 공식 엔드포인트이며, repo1.maven.org는 이 저장소의 별칭으로 사용되는 도메인입니다)
테스트 프로젝트 생성 후 maven/settings.xml 파일에 아래 내용을 추가합니다.
Local maven repository 기본 경로
- window : C:\Users\계정명\.m2
- mac : ~/.m2
settings.xml
<servers>
<server>
<id>nexus</id>
<username>admin</username>
<password>접속패스워드</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-repo</id>
<mirrorOf>external:http:*</mirrorOf>
<url>http://NEXUS서버IP:8081/repository/maven-central/</url>
<blocked>false</blocked>
</mirror>
<!--
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
</mirror>
-->
</mirrors>
프로젝트의 pom.xml에 아래와 같이 repositories를 추가합니다.
pom.xml
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.org/maven2/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<id>public</id>
<url>http://NEXUS서버IP:8081/repository/maven-central/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
기본 Maven 경로인 https://repo.maven.org/maven2를 사용하지 않기 위해 snapshots, releases에 enabled를 false로 설정하고, Nexus repository를 추가합니다.
이후 Maven - clean > Maven - install을 진행해보면 아래와 같이 Nexus 서버로부터 의존성을 가져오게 됩니다.
참고문서