====== Nexus ======
* description : nexus 내용 기술
* author : heon
* email : khlee@repia.com
* lastupdate : 2023-09-22
===== 정보 =====
* URL: http://nexus.repia.com:8081 \\
* IP: 125.132.25.172 \\
* PORT: 8081 \\
* 위치: /opt/nexus \\
* admin 계정: admin / repia12#$
===== Nexus 란? =====
* Nexus는 메이븐에서 사용할 수 있는 Repository다. \\
* 외부에서 dependency를 수고를 덜고, local nexus(cache)로 사용함으로써 빠르게 라이브러리를 끌어올 수 있고, 개발팀에서 사용하는 공용 라이브러리를 local nexus에 배포해서 팀간에 공유할 수 있다.\\
> 출처 \\
* [[https://www.ibm.com/garage/method/practices/deliver/tool_nexus/|IBM Nexus]] \\
===== 1. 다운로드 및 설치 =====
opt 디렉터리에 설치하는 것을 기준으로 진행합니다.\\
sudo mkdir -p /opt/nexus
cd /opt/nexus
\\
tar 파일을 다운받고 압축 해제합니다.\\
sudo wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
sudo tar -xvzf latest-unix.tar.gz
\\
Nexus 서비스를 생성합니다.\\
Nexus를 서비스로 관리하기 위해 systemd 서비스 유닛 파일을 생성합니다.\\
sudo vi /etc/systemd/system/nexus.service
\\
그런 다음 아래의 내용을 추가하고 저장합니다.\\
[Unit]
Description=Nexus Repository Manager
After=network.target
[Service]
Type=forking
ExecStart=/opt/nexus/nexus-3.x.x-xx/bin/nexus start
ExecStop=/opt/nexus/nexus-3.x.x-xx/bin/nexus stop
User=nexus
Restart=on-abort
[Install]
WantedBy=multi-user.target
'' /opt/nexus/nexus-3.x.x-xx/ '' 부분을 Nexus 설치 디렉터리로 변경해야합니다.\\
또한 필요한 경우 ''User''를 Nexus를 실행할 사용자로 변경합니다.\\
\\
Nexus를 실행할 사용자를 만들고 해당 사용자에게 권한을 부여\\
sudo useradd -M -r -s /sbin/nologin nexus
sudo chown -R nexus:nexus /opt/nexus
\\
서비스를 시작하고 부팅 시 자동으로 실행되도록 활성화합니다.\\
sudo systemctl start nexus
sudo systemctl enable nexus
\\
Nexus가 성공적으로 실행 중인지 확인하기 위해 로그를 확인할 수 있습니다.\\
sudo tail -f /opt/nexus/sonatype-work/nexus3/log/wrapper.log
웹 브라우저에서 다음 URL을 사용하여 Nexus 웹 인터페이스에 액세스할 수 있습니다.\\
http://125.132.25.172:8081/
''Nexus의 기본 port는 8081입니다.''\\
Nexus 구동에 성공하면 아래와 같은 화면을 볼 수 있습니다.\\
{{:wiki:3party:20230922_101048.png?400|}}
===== 2. 최초 계정 및 설정 =====
최초 계정의 비밀번호는 nexus-data/admin.password 파일 안에 기입되어 있습니다.\\
아이디: admin\\
비밀번호: 위의 사항 참조\\
* Nexus 버전이 3.17.0 버전 이전이라면 비밀번호는 admin123입니다. \\
로그인에 성공하면 아래와 같이 비밀번호 설정화면이 팝업됩니다.\\
{{:wiki:3party:changepassword.png?400|}}
비밀번호 설정 완료 후, 익명에 대한 접근 설정 여부를 물어봅니다.\\
{{:wiki:3party:firstsetting.png?400|}} \\
보안을 위해서 익명 사용자는 접근을 허용하지 않도록 하겠습니다. \\
===== 3. 레포지토리 생성 =====
상위의 톱나바퀴 아이콘 > Repository > Repositories > create repository를 클릭합니다.\\
{{:wiki:3party:create.png?400|}} \\
타입은 maven2(hosted)를 선택합니다.\\
{{:wiki:3party:repomake.png?400|}}\\
* proxy: 외부 리포지토리를 프록시 해준다. 즉, 내부 시스템에서 외부에 직접 접근하지 못하는 환경을 구성할때 프록시를 주로 사용한다.
* group: 여러 리포지토리를 그루핑 한다.
* hosted: 실제 현재 nexus에서 라이브러리를 제공한다. 주로 자체 개발한 라이브러리를 서비스할때 hosted 리포지토리를 설정한다.
repository 설정은 아래와 같이 진행하겠습니다.\\
''해당 이미지는 예시일 뿐입니다. 실제로는 Version.Policy별로 구분해서 레포지토리를 생성 및 사용해야합니다.''\\
{{:wiki:3party:reposet.png?400|}}\\
===== 4. 레포지토리에 라이브러리 배포 =====
* 해당 방법은 구동된 Nexus ''웹페이지''에서 바로 진행하는 방법입니다.\\
* 배포할 라이브러리의 pom.xml에 등록하여 바로 repository에 배포하는 방법은 아래의 ref > Nexus에 Spring Maven 라이브러리 배포 및 사용하기 링크 참조.\\
\\
상자 모양 아이콘 > Upload > 원하는 repository 선택 \\
{{:wiki:3party:reposet2.png?400|}}\\
repository에 올릴 라이브러리를 선택하고, 필드를 입력해줍니다.\\
{{:wiki:3party:reposet3.png?400|}}\\
완료된 화면은 아래와 같습니다.\\
{{:wiki:3party:reposet4.png?400|}}
===== 5. 라이브러리를 build.gralde에 적용하는 방법 =====
build.gradle에 아래와 같이 기입합니다.
repositories {
maven {
url "repositoy url"
credentials {
username 'your-username'
password 'your-password'
}
}
}
dependencies {
implementation group: 'your-group-id', name: 'your-artifact-id', version: 'version'
}
''repositoy url''은 아래의 사진과 같이 확인 가능합니다.\\
{{:wiki:3party:reposet5.png?600|}} \\
넥서스 계정의 별도 관리가 필요하다면 gradle.properties에 아래와 같이 입력한 후에 build.gradle에서 사용 가능합니다.\\
gradle.properties\\
version = 1.0.0
nexusUsername = repia-khlee
nexusPassword = 1234
nexusSnapshotUrl = http://125.132.25.172:8081/repository/repia-snapshot/
build.gradle\\
repositories {
maven {
url project.findProperty("nexusSnapshotUrl")
credentials {
username project.findProperty("nexusUsername")
password project.findProperty("nexusPassword")
}
}
// jcenter()
}
===== Tip =====
* Nexus에서 각 역할과, 계정을 생성하여 관리하는 Repository를 분류할 수 있습니다. 방법은 아래의 Ref > Nexus Repository 설치 및 레포지토리 생성과 역할,계정 생성 링크 참조.
* release, snapshot repository에 따라서 개별 관리가 필요합니다.
===== Troubleshooting =====
* [[https://github.com/kindredgroup/puppet-nexus/issues/3|FileDescriptors 에러가 발생한경우]]
===== Ref =====
* [[https://devocean.sk.com/blog/techBoardDetail.do?ID=163423|Nexus Repository 설치 및 레포지토리 생성과 역할,계정 생성]]
* [[https://devocean.sk.com/blog/techBoardDetail.do?ID=163425|Nexus에 Spring Maven 라이브러리 배포 및 사용하기]]
{{tag>heon nexus 넥서스}}