CPU/MEM : 8Core / 16GB
OS : Ubuntu 22.04.3 Server
Disk : 300GB
Ubuntu 22.04 서버.
sudo/administrator가 활성화된 루트가 아닌 사용자.
jdk 설치 전 apt update를 진행합니다.
sudo apt update
sudo apt-get update
jdk 8 버전을 다운로드 합니다.
sudo apt install -y openjdk-8-jdk
java -version
을 통해 설치가 잘 되었는지 확인합니다.
Nexus 설치를 위해 새로운 전용 Linux 사용자를 생성합니다.
sudo useradd -d /opt/nexus -s /bin/bash nexus
sudo passwd nexus
하드/소프트 제한에 대해 최대 개방(65536) 설정을 합니다.
다음으로 아래 명령을 사용하여 ulimit를 65536으로 설정합니다.
ulimit -n 65536
위 명령어는 일시적 적용이므로, 아래 단계를 통해 영구적으로 ulimit 설정이 가능합니다.
ulimit를 영구적으로 설정하려면 nano 편집기를 사용하여 새 구성 파일 /etc/security/limits.d/nexus.con을 만드십시오.
sudo nano /etc/security/limits.d/nexus.conf
파일에 다음 구성을 추가합니다. 이 예에서는 값이 65536인 특정 사용자 넥서스에 대한 ulimit를 설정합니다.
nexus - nofile 65536
ulimit -a
를 통해 설정이 적용되었는지 확인합니다.
Nexus Repository Manager 패키지를 다운로드
wget https://download.sonatype.com/nexus/3/nexus-3.41.1-01-unix.tar.gz
파일을 압축해제
nexus-3.41.1-01 디렉토리 : Nexus 패키지의 기본 디렉토리이고
sonatype-work 디렉토리 : Nexus의 기본 작업 디렉토리입니다.
tar xzf nexus-3.41.1-01-unix.tar.gz
디렉토리를 /opt로 이동
Nexus 패키지 디렉토리는 /opt/nexus이고 Nexus 작업 디렉토리는 /opt/sonatype-work입니다.
mv nexus-3.41.1-01 /opt/nexus
mv sonatype-work /opt/
마지막으로 아래 chown 명령을 통해 두 디렉토리의 소유권을 사용자 및 그룹 넥서스로 변경합니다.
chown -R nexus:nexus /opt/nexus /opt/sonatype-work
/opt/nexus/bin/nexus.rc 파일 설정
run_as_user 옵션의 주석을 제거하고 값을 nexus로 변경
run_as_user="nexus"
최대 힙 메모리 변경 ( 필요 시 진행)
다음으로 nano 편집기를 사용하여 /opt/nexus/bin/nexus.vmoptions 구성 파일을 열어 Nexus의 최대 힙 메모리를 설정합니다.
sudo vi /opt/nexus/bin/nexus.vmoptions
-Xms1024m
-Xmx1024m
-XX:MaxDirectMemorySize=1024m
-XX:ActiveProcessorCount=4
기본 옵션으로 진행 - 5line은 추후 설명
아래 명령어를 통해 nexus 실행 가능
# /opt/nexus/bin
./nexus start
systemd 서비스 파일로 Nexus를 실행하면 systemctl 명령을 통해 nexus 프로세스를 관리할 수 있습니다.
sudo vi /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
daemon-reload를 통해 시스템 관리자를 다시 로드
sudo systemctl daemon-reload
nexus.service를 시작하고 활성화합니다.
Nexus Repository Manager는 이제 로컬 IP 주소 127.0.0.1에서 기본 포트 8081로 시작합니다. 또한 nexus.service는 시스템 부팅 시 자동으로 실행됩니다.
sudo systemctl enable nexus.service
sudo systemctl start nexus.service
마지막으로 다음 명령을 실행하여 nexus.service를 확인하고 서비스가 실행 중인지 확인합니다.
sudo systemctl status nexus.service
localhost로 배포, ubuntu server os에서 배포했기 때문에 접속을 위해 hosts파일을 수정합니다.
# vi /etc/hosts
192.168.31.xxx moon6.ps3-osc.shop
로그인
id : admin
pw : 하단 확인
비밀번호를 확인합니다.
cat /opt/sonatype-work/nexus3/admin.password
현재는 http 5000 port로 테스트 → 이후 https로 변경
Nexus 설정
vm 설정
현재 설정한 private registry는 기본적으로 인증되지 않은 저장소이고, HTTPS 통신을 사용하는것도 아니기에, docker daemon에서 해당 서버로의 접근을 차단한다.
그렇기에 docker daemon 설정을 변경하여 해당 서버로의 통신을 허가해야 한다.
docker daemon 설정의 insecure-registries 옵션을 수정하여 docker 엔진이 안전하지 않은 private registry에 접근할 수 있도록 허가했다. 이를 https로 변환하는 작업을 수행한다.
Repository의 https: 5001포트를 열어줍니다.
앞서 nexus가 구동되고 있는 시스템에는 Java가 설치되어 있다.
그렇다면 keytool 이라는 Java KeyStore 기반 인증서를 관리할 수 있는 도구가 같이 설치되었을 것이다.
이걸 이용하여 nexus repository에서 사용할 KeyStore를 생성한다.
아래와 같은 명령을 통해 KeyStore를 생성한다.
cd /cert
openssl pkcs12 -export -out nexus.p12 -inkey server.key -in server.crt
keytool -importkeystore -srckeystore nexus.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype pkcs12
생성한 파일을 nexus의 경로에 복제
cp keystore.jks /opt/nexus/etc/ssl/keystore.jks
nexus 설정 변경
우선 nexus의 기본 설정 파일에서 HTTPS PORT를 지정하고, HTTPS 설정을 불러오도록 지정해야 한다.
vi /opt/nexus/etc/nexus-default.properties
nexus-default.properties 파일을 수정 한 뒤 KeyStore의 적용을 위해 /opt/nexus/etc/jetty/jetty-https.xml 파일을 수정
vi /opt/nexus/etc/jetty/jetty-https.xml
systemctl restart nexus.service
daemon.json에 있는 파일을 삭제해줍니다. - insecure-registries제거
docker login 시도
docker login moon6.ps3-osc.shop:5001
Nexus가 시스템 서비스로 실행되면 이제 Nexus에 대한 역방향 프록시를 설정할 수 있습니다.
리버스 프록시로 Nexus 실행
Nexus Repository Manager는 127.0.0.1에서 기본 포트 8081로 실행 중입니다. 네트워크 외부에서 액세스할 수 있도록 하려면 표준 HTTP/HTTPS 포트에서 실행되는 Nginx 역방향 프록시를 사용합니다.
apt 명령을 실행하여 Nginx 웹 서버를 Ubuntu 시스템에 설치합니다.
sudo apt install -y nginx
Nginx가 설치되면 다음 systemctl 명령을 실행하여 nginx 서비스를 확인하고 확인합니다. nginx 서비스가 활성화되고 시스템 부팅 시 자동으로 실행되는 것을 볼 수 있습니다. 그리고 nginx 서비스의 상태가 실행 중입니다.
sudo systemctl is-enabled nginx
sudo systemctl status nginx
새 서버 블록 구성 /etc/nginx/sites-available/nexus을 만듭니다.
sudo vi /etc/nginx/sites-available/nexus
다음 Nginx 구성을 파일에 추가하고 도메인 이름을 변경해야 합니다.
upstream nexus3 {
server 127.0.0.1:8081;
}
server {
listen 80;
server_name moon6.ps3-osc.shop;
location / {
proxy_pass http://nexus3/;
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;
}
}
다음으로 다음 명령을 실행하여 sites-enabled 디렉토리에 대한 구성 파일의 심볼릭 링크를 생성하여 Nexus에 대한 서버 블록 구성을 활성화합니다. 그런 다음 Nginx 구성을 확인하여 Nginx가 올바르게 구성되었는지 확인합니다.
sudo ln -s /etc/nginx/sites-available/nexus /etc/nginx/sites-enabled/
sudo nginx -t
Nginx 구성이 제대로 구성된 경우 "test is successfull"
과 같은 출력 메시지가 표시되어야 합니다.
마지막으로 다음 명령을 실행하여 Nginx 서비스를 다시 시작하고 Nexus에 대한 새 서버 블록 구성을 적용합니다.
sudo systemctl restart nginx
이제 Nginx 웹 서버를 Ubuntu 시스템의 Nexus Repository Manager에 대한 리버스 프록시로 설정했습니다. 이제 도메인 이름을 통해 Nexus 설치에 액세스할 수 있습니다.
구매했던 pem 파일을 다운로드하고, 이를 key, crt형태로 변환합니다.
openssl rsa -in _wildcard_.xxx.key.pem -text > server.key
openssl x509 -inform PEM -in _wildcard_xxxx.crt.pem -out server.crt
mkdir /cert
cp server.* /cert
이전에 구성했던 /etc/nginx/sites-available/nexus 파일을 변환합니다.
sudo vi /etc/nginx/sites-available/nexus
upstream nexus3 {
server 127.0.0.1:8081;
}
server {
listen 443 ssl;
server_name moon6.ps3-osc.shop;
ssl_certificate /cert/server.crt;
ssl_certificate_key /cert/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE+AESGCM:ECDHE+AES256:ECDHE+AES128:!aNULL:!MD5:!DSS:!DH:!CAMELLIA:!AESCCM;
location / {
proxy_pass http://nexus3/;
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;
}
}
sudo ln -s -f /etc/nginx/sites-available/nexus /etc/nginx/sites-enabled/
sudo nginx -t
nexus 재시작
sudo systemctl restart nginx