티스토리 뷰

728x170

이번 포스팅에서는 Spring Boot에서 사용하는 Maven Dependency 리포지토리인 Nexus2 내부 저장소 구축 과정에 대해 살펴보겠습니다.

지난 몇번의 포스팅 동안 폐쇄망 환경에서 구성해야 하는 여러 고려사항들을 살펴보고 있습니다.

지난 포스팅은 다음을 참고하시기 바랍니다.

 

[Spring Boot] git clone을 활용한 Spring Boot 프로젝트 repository 이관

[Spring Boot] gitlab & Eclipse 연동을 통한 Spring Boot 개발 프로젝트 구축

 

그 중 인터넷 환경에서 Maven Repository를 사용하여 손쉽게 Dependency를 관리하던 것을 내부망에서는 (인터넷이 불가능한) 사용할 수 없게됩니다.

이를 대체하기 위해 Maven Project의 Repository를 내부망에서 관리할 수 있도록 구축하는 Nexus 모듈에 대한 구축 과정을 살펴보도록 하겠습니다.

Nexus2 OSS 설치

1) nexus2 oss 다운로드

nexus2 oss 모듈은 다음 URL에서 다운로드 받을 수 있습니다.

https://help.sonatype.com/repomanager2/download

위 URL에 접속하면 다운로드 받을 수 있는 버전으로 Pro 버전과 OSS 버전이 제공되며, Pro 버전의 경우 비용이 지불됩니다.

포스팅에서는 Nexus2 OSS 버전을 사용하도록 하겠습니다.

2) 다운로드 받은 Nexus2 OSS 바이너리를 서버에 업로드하여 압축을 해제합니다.

[root@guruson nexus2]# ls -la
total 80468
drwxr-xr-x 4 root root       89 Jul 28 13:20 .
drwxr-xr-x 3 root root       20 Jul 28 13:20 ..
drwxr-xr-x 8 1001 1001      113 Apr 20 00:08 nexus-2.14.13-01
-rw-r--r-- 1 root root 82396385 Jul 28 13:17 nexus-2.14.13-01-bundle.tar.gz
drwxr-xr-x 3 1001 1001       37 Apr 20 00:19 sonatype-work
[root@guruson nexus2]#

이때 생성되는 디렉토리는 위와 같이 nexus-2.14.13-01 & sonatype-work로 구성되어 있으며, nexus-2.14.13-01은 nexus 관련 설정 및 바이너리가 위치하며, sonatype-work은 실제 메타데이터와 바이너리, 라이브러리등이 저장되는 공간입니다.

3) Nexus2 기동 및 포트를 확인합니다.

nexus가 기동되는 포트는 다음 위치에 정의되어 있습니다.

=> /root/nexus/nexus2/nexus-2.14.13-01/conf
==================================================
# Sonatype Nexus
# ==============
# This is the most basic configuration of Nexus.

# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus

# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus
runtime=${bundleBasedir}/nexus/WEB-INF

# orientdb buffer size in megabytes
storage.diskCache.bufferSize=4096

위와같이 nexus.properties에 정의되어 있는 application-port=8081로 기동되며 기동방법은 다음과 같습니다.

./nexus start &

[root@guruson bin]# ./nexus start &
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script.

[1]+  Exit 1                  ./nexus start RUN_AS_USER=root
[root@guruson bin]# ps -ef | grep nexus
root      7730 12003  0 13:24 pts/0    00:00:00 grep --color=auto nexus
[root@guruson bin]# export RUN_AS_USER=root
[root@guruson bin]# ./nexus start &
[1] 7767
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Starting Nexus OSS...
Started Nexus OSS.

[1]+  Done                    ./nexus start
[root@guruson bin]#

기동 시 유의할 점은 위와 같이 root 계정으로 nexus를 기동할 경우 에러가 발생되며, RUN_AS_USER=root를 환경변수에 등록해 주어야 기동이 가능합니다.

다만 본 포스팅에서는 편의성에 의해 root로 기동하지만, 실제 구축 운영할 경우에는 nexus 계정을 생성하여 관리하는 것을 권고합니다.

기동 상태는 다음에서 확인할 수 있습니다.

[root@guruson conf]# netstat -anp | grep 8081
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      7819/java           
[root@guruson conf]# ps -ef | egrep "java|nexus" | grep -v grep
root      7817     1  0 13:25 ?        00:00:00 /root/nexus/nexus2/nexus-2.14.13-01/bin/../bin/jsw/linux-x86-64/wrapper /root/nexus/nexus2/nexus-2.14.13-01/bin/../bin/jsw/conf/wrapper.conf wrapper.syslog.ident=nexus wrapper.pidfile=/root/nexus/nexus2/nexus-2.14.13-01/bin/../bin/jsw/linux-x86-64/nexus.pid wrapper.daemonize=TRUE wrapper.lockfile=/var/lock/subsys/nexus
root      7819  7817  4 13:25 ?        00:00:39 java -Djava.io.tmpdir=./tmp -Djava.net.preferIPv4Stack=true -Dcom.sun.jndi.ldap.connect.pool.protocol=plain ssl -Xms256m -Xmx768m -Djava.library.path=bin/jsw/lib -classpath bin/jsw/lib/wrapper-3.2.3.jar:./lib/metrics-jetty-2.2.0.jar:./lib/jetty-server-8.1.16.v20140903.jar:./lib/jul-to-slf4j-1.7.25.jar:./lib/nexus-bootstrap-2.14.13-01.jar:./lib/logback-access-1.2.3.jar:./lib/plexus-interpolation-1.16.jar:./lib/jetty-io-8.1.16.v20140903.jar:./lib/javax.servlet-3.0.0.v201112011016.jar:./lib/jetty-client-8.1.16.v20140903.jar:./lib/jetty-deploy-8.1.16.v20140903.jar:./lib/jetty-webapp-8.1.16.v20140903.jar:./lib/jetty-servlet-8.1.16.v20140903.jar:./lib/jetty-continuation-8.1.16.v20140903.jar:./lib/metrics-core-2.2.0.jar:./lib/jetty-jmx-8.1.16.v20140903.jar:./lib/jetty-http-8.1.16.v20140903.jar:./lib/jetty-rewrite-8.1.16.v20140903.jar:./lib/jetty-util-8.1.16.v20140903.jar:./lib/logback-core-1.2.3.jar:./lib/jetty-xml-8.1.16.v20140903.jar:./lib/logback-classic-1.2.3.jar:./lib/jetty-security-8.1.16.v20140903.jar:./lib/metrics-logback-2.2.0.jar:./lib/slf4j-api-1.7.25.jar:./conf/ -Dwrapper.key=f2Dq3bnHfn8k4pwC -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=7817 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 org.sonatype.nexus.bootstrap.jsw.JswLauncher ./conf/jetty.xml ./conf/jetty-requestlog.xml
[root@guruson conf]#

위와 같이 8081 port listen 상태와 nexus process 기동 프로세스를 확인합니다.

4) Nexus2 OSS Webadmin 접속 및 기본 구성을 진행합니다.

접속 URL → http://nexus_install_server_ip:8081/nexus

최초 접속 시 다음과 같은 화면이 나타나며, 오른쪽 상단의 Log In 버튼을 선택합니다.

초기 ID / Passwd는 admin/admin123으로 고정되어 있습니다.

접속이 완료되면 왼쪽의 다음과 같은 메뉴바를 확인할 수 있습니다.

Spring Boot 라이브러리 업로드

1) 3rd party 라이브러리를 확인합니다.

다양한 Repository가 존재하지만 그중 3rd party repository를 사용하여 Nexus2에 라이브러리를 업로드하고 이를 Maven Repository로 참조할 수 있도록 변경해 보도록 하겠습니다.

최초 Repository에서는 다음과 같이 archetype-catalog.xml 파일만 존재하는 상태입니다.

2) Spring Boot 라이브러리를 Nexus 3rd party repository에 적용합니다.

먼저 Spring Boot의 인터넷이 되는 환경에서 다운로드 받은 Maven Repository를 확인합니다.

Maven Repository를 별도로 지정하지 않았을 경우 C:\Users\user\.m2\repository 경로에 Repository가 생성됩니다.

해당 라이브러리를 Nexus2가 설치된 서버로 업로드합니다.

업로드 위치는 /root/nexus/nexus2/sonatype-work/nexus/storage/thirdparty 이며, 앞서 살펴본것과 같이 sonatype-work 리포지토리 저장소에 라이브러리 파일을 업로드합니다.

3) 3rd party 라이브러리를 다시 확인합니다.

업로드가 완료되면 Nexus2 Webadmin에서 리포지토리에 업로드가 정상적으로 되었는지 확인할 수 있습니다.

위와같이 Spring Boot Repository에 업로드 된 파일들이 정상적으로 Nexus2 OSS 3rd party로 업로드 된것을 확인할 수 있습니다.

 

이번시간에는 Nexus2 OSS를 사용하여 내부 Maven Repository를 구축하고 라이브러리 업로드를 진행해 보았습니다.

다음 포스팅에서는 내부 레포지토리의 라이브러리를 사용하여 Spring Boot Maven Repository를 설정하고 라이브러리를 가져오는 과정을 살펴보도록 하겠습니다.

또한 Spring Boot의 기본 구조에 대해서도 알아보겠습니다.

그리드형
댓글
댓글쓰기 폼