웹사이트 검색

Ubuntu 20.04에서 Nexus Repository Manager를 설치하고 구성하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 20.04(Focal Fossa)

이 페이지에서

  1. 전제 조건
  2. 시작하기\n
  3. 자바 설치
  4. Nexus 설치
  5. Nexus용 시스템 서비스 파일 만들기
  6. Nginx를 Nexus용 역방향 프록시로 구성\n
  7. Nexus 웹 인터페이스 액세스
  8. 결론

Nexus는 전체 소프트웨어 개발 수명 주기를 보호하는 플랫폼을 제공하는 저장소 관리입니다. 이를 통해 종속성을 수집 및 관리하고 소프트웨어를 더 쉽게 배포할 수 있습니다. 모든 구성 요소, 바이너리 및 빌드 아티팩트의 단일 소스입니다. Gradle, Ant, Maven 및 Ivy에 대한 지원을 제공하고 개발자가 바이너리, 컨테이너, 어셈블리 및 완제품을 통해 구성 요소를 관리할 수 있도록 합니다. 또한 Nexus를 LDAP 및 Atlassian Crowd와 같은 기존 사용자 및 인증 시스템과 통합할 수 있습니다.

이 튜토리얼에서는 Ubuntu 20.04에 Nexus 리포지토리 관리자를 설치하는 방법을 보여줍니다.

전제 조건

  • Ubuntu 20.04를 실행하는 서버.\n
  • 루트 암호는 서버에 구성됩니다.\n

시작하기

시작하기 전에 시스템 패키지를 최신 버전으로 업데이트해야 합니다. 다음 명령을 사용하여 업데이트할 수 있습니다.

apt-get update -y

서버가 업데이트되면 다음 단계로 진행할 수 있습니다.

자바 설치

Nexus는 Java를 기반으로 하므로 시스템에 Java 버전 8을 설치해야 합니다. 다음 명령으로 설치할 수 있습니다.

apt-get install openjdk-8-jdk -y

Java가 설치되면 다음 명령을 사용하여 설치된 Java 버전을 확인할 수 있습니다.

java -version

다음 출력이 표시되어야 합니다.

openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-8u282-b08-0ubuntu1~20.04-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)

Java가 설치되면 다음 단계로 진행할 수 있습니다.

넥서스 설치

시작하기 전에 Nexus를 실행할 별도의 사용자를 만들어야 합니다. 다음 명령어를 실행하여 만들 수 있습니다.

useradd -M -d /opt/nexus -s /bin/bash -r nexus

다음으로 넥서스 사용자가 비밀번호 없이 sudo를 사용하여 모든 사용자를 실행할 수 있습니다. 다음 명령어를 실행하면 됩니다.

echo "nexus ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/nexus

다음으로 Nexus용 디렉터리를 만들고 다음 명령을 사용하여 최신 버전의 Nexus를 다운로드합니다.

mkdir /opt/nexus
wget https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.29.2-02-unix.tar.gz

다운로드가 완료되면 다음 명령을 실행하여 다운로드한 파일을 /opt/nexus 디렉터리에 추출합니다.

tar xzf nexus-3.29.2-02-unix.tar.gz -C /opt/nexus --strip-components=1

그런 다음 다음 명령어를 실행하여 적절한 소유권을 nexus 디렉터리로 설정합니다.

chown -R nexus:nexus /opt/nexus

다음으로 nexus.vmoptions 구성 파일을 편집하고 최대 메모리 크기를 정의합니다.

nano /opt/nexus/bin/nexus.vmoptions

Java 최대 메모리 크기를 설정하고 "../sonatype-work"를 "./sonatype-work"로 바꿉니다.

-Xms1024m
-Xmx1024m
-XX:MaxDirectMemorySize=1024m

-XX:LogFile=./sonatype-work/nexus3/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=/etc/karaf/java.util.logging.properties
-Dkaraf.data=./sonatype-work/nexus3
-Dkaraf.log=./sonatype-work/nexus3/log
-Djava.io.tmpdir=./sonatype-work/nexus3/tmp

파일을 저장하고 닫은 다음 nexus.rc 파일을 편집하고 실행을 사용자로 정의합니다.

nano /opt/nexus/bin/nexus.rc

nexus 사용자로 다음 줄의 주석을 제거하고 변경합니다.

run_as_user="nexus"

파일을 저장하고 닫은 후 다음 명령으로 Nexxus 서비스를 시작합니다.

sudo -u nexus /opt/nexus/bin/nexus start

다음으로 다음 명령을 사용하여 Nexus를 확인합니다.

tail -f /opt/nexus/sonatype-work/nexus3/log/nexus.log

다음과 같은 결과가 표시되어야 합니다.

2021-02-23 12:20:51,839+0000 INFO  [jetty-main-1]  *SYSTEM com.softwarementors.extjs.djn.servlet.DirectJNgineServlet - Servlet GLOBAL configuration: registryConfiguratorClass=
2021-02-23 12:20:51,853+0000 INFO  [jetty-main-1]  *SYSTEM com.softwarementors.extjs.djn.jscodegen.CodeFileGenerator - Creating source files for APIs...
2021-02-23 12:20:52,582+0000 INFO  [jetty-main-1]  *SYSTEM org.sonatype.nexus.siesta.SiestaServlet - JAX-RS RuntimeDelegate: org.sona649a69ca
2021-02-23 12:20:52,611+0000 INFO  [jetty-main-1]  *SYSTEM org.jboss.resteasy.plugins.validation.i18n - RESTEASY008550: Unable to find CDI supporting ValidatorFactory. Using default ValidatorFactory
2021-02-23 12:20:53,811+0000 INFO  [jetty-main-1]  *SYSTEM org.sonatype.nexus.siesta.SiestaServlet - Initialized
2021-02-23 12:20:53,817+0000 INFO  [jetty-main-1]  *SYSTEM org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Initialized
2021-02-23 12:20:53,852+0000 INFO  [jetty-main-1]  *SYSTEM org.eclipse.jetty.server.handler.ContextHandler - Started {Sonatype Nexus,/,file:///opt/nexus/public/,AVAILABLE}
2021-02-23 12:20:53,883+0000 INFO  [jetty-main-1]  *SYSTEM org.eclipse.jetty.server.AbstractConnector - Started {HTTP/1.1, (http/1.1)}{0.0.0.0:8081}
2021-02-23 12:20:53,884+0000 INFO  [jetty-main-1]  *SYSTEM org.eclipse.jetty.server.Server - Started @37529ms
2021-02-23 12:20:53,884+0000 INFO  [jetty-main-1]  *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer - 
-------------------------------------------------

Started Sonatype Nexus OSS 3.29.2-02

-------------------------------------------------

이 시점에서 Nexus가 시작되고 포트 8081에서 수신 대기합니다. 다음 명령으로 확인할 수 있습니다.

ss -altnp | grep 8081

다음과 같은 결과가 표시되어야 합니다.

LISTEN    0         50                 0.0.0.0:8081             0.0.0.0:*        users:(("java",pid=5548,fd=795)) 

그런 다음 다음 명령을 사용하여 Nexus 서비스를 중지합니다.

/opt/nexus/bin/nexus stop

Nexus용 Systemd 서비스 파일 생성

다음으로 Nexus 서비스를 관리하기 위해 systemd 서비스 파일을 생성해야 합니다. 다음 명령으로 만들 수 있습니다.

nano /etc/systemd/system/nexus.service

다음 줄을 추가합니다.

[Unit]
Description=nexus service
After=network.target

[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
User=nexus
Restart=on-abort

[Install]
WantedBy=multi-user.target

파일을 저장하고 닫은 후 다음 명령을 사용하여 systemd 데몬을 다시 로드합니다.

systemctl daemon-reload

그런 다음 Nexus 서비스를 시작하고 다음 명령을 사용하여 시스템 재부팅 시 시작되도록 활성화합니다.

systemctl start nexus
systemctl enable nexus

다음 명령을 사용하여 Nexus 서비스의 상태를 확인할 수도 있습니다.

systemctl status nexus

다음과 같은 결과가 표시되어야 합니다.

? nexus.service - nexus service
     Loaded: loaded (/etc/systemd/system/nexus.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-02-23 12:22:49 UTC; 15s ago
    Process: 6181 ExecStart=/opt/nexus/bin/nexus start (code=exited, status=0/SUCCESS)
   Main PID: 6368 (java)
      Tasks: 40 (limit: 4691)
     Memory: 642.9M
     CGroup: /system.slice/nexus.service
             ??6368 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -server -Dinstall4j.jvmDir=/usr/lib/jvm/java-8-openjdk-amd64/jre -Dexe4j.mo>

Feb 23 12:22:49 ubunt4 systemd[1]: Starting nexus service...
Feb 23 12:22:49 ubunt4 nexus[6181]: Starting nexus
Feb 23 12:22:49 ubunt4 systemd[1]: Started nexus service.
lines 1-13/13 (END)

완료되면 다음 단계로 진행할 수 있습니다.

Nginx를 Nexus용 역방향 프록시로 구성

다음으로 Nginx를 설치하고 Nginx를 리버스 프록시로 구성해야 합니다. 먼저 다음 명령을 사용하여 Nginx 패키지를 설치합니다.

apt-get install nginx -y

Nginx가 설치되면 다음 명령을 사용하여 Nginx 가상 호스트 구성 파일을 만듭니다.

nano /etc/nginx/conf.d/nexus.conf

다음 줄을 추가합니다.

upstream backend {
  server 127.0.0.1:8081;
}

server {
    listen 80;
    server_name nexus.example.com;

    location / {
        proxy_pass http://backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}

파일을 저장하고 닫은 후 다음 명령을 사용하여 Nginx 구성 파일을 확인합니다.

nginx -t

다음 출력이 표시되어야 합니다.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

마지막으로 Nginx 서비스를 다시 시작하여 변경 사항을 적용합니다.

systemctl restart nginx

다음 명령을 사용하여 Nginx의 상태를 확인할 수도 있습니다.

systemctl status nginx

다음과 같은 결과가 표시되어야 합니다.

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-02-23 12:24:57 UTC; 4s ago
       Docs: man:nginx(8)
    Process: 7106 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 7107 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 7123 (nginx)
      Tasks: 3 (limit: 4691)
     Memory: 3.5M
     CGroup: /system.slice/nginx.service
             ??7123 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??7124 nginx: worker process
             ??7125 nginx: worker process

Feb 23 12:24:57 ubunt4 systemd[1]: Starting A high performance web server and a reverse proxy server...
Feb 23 12:24:57 ubunt4 systemd[1]: Started A high performance web server and a reverse proxy server.

Nexus 웹 인터페이스에 액세스

Nexus 웹 UI에 액세스하기 전에 다음 명령을 사용하여 Nexus 관리자 비밀번호를 인쇄하십시오.

cat /opt/nexus/sonatype-work/nexus3/admin.password

다음 출력이 표시되어야 합니다.

b7c899cf-c6d3-4d11-a4cb-9a44e5d1787e

이제 웹 브라우저를 열고 URL http://nexus.example.com을 사용하여 Nexus 웹 UI에 액세스합니다. 다음 페이지로 리디렉션됩니다.

이제 로그인 버튼을 클릭합니다. Nexus 로그인 페이지로 리디렉션됩니다.

관리자 사용자 이름, 비밀번호를 제공하고 로그인 버튼을 클릭합니다. Nexus 설정 페이지가 표시됩니다.

계속하려면 다음 버튼을 클릭하십시오. 다음 페이지가 표시됩니다.

새 비밀번호를 설정하고 다음 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

"익명 액세스 사용" 옵션을 선택하고 다음 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

마침 버튼을 클릭하여 설정을 완료하고 톱니바퀴 설정 아이콘을 클릭합니다. Nexus 리포지토리 대시보드가 표시되어야 합니다.

결론

축하합니다! Ubuntu 20.04 서버에서 Nginx를 리버스 프록시로 사용하여 Nexus 저장소 관리자를 성공적으로 설치했습니다. 궁금한 점이 있으면 언제든지 문의해 주세요.