Sonatype Nexus Repository 는 Maven · npm · PyPI · Docker · Helm · APT · YUM 등 여러 형식의 패키지를 한 서버에 두는 아티팩트 저장소다. 외부 저장소를 프록시(캐시)하는 저장소, 자체 산출물을 올리는 hosted 저장소, 둘을 하나의 URL 로 묶는 group 저장소를 조합한다. 폐쇄망에서는 외부 패키지 통로를 이 서버 하나로 좁히는 역할을 한다.
무료 Community Edition 과 상용 Pro 가 있다. 현행 버전은 3.96.2-01 이다.[1] 클라이언트 쪽 연동은 Pip custom repository 설정 · Maven 문서를 본다.
공식 시스템 요구사항이다.[2]
| 항목 | 값 |
|---|---|
| Java | OpenJDK 21 (3.87.0 이후 Java 21 필수, 3.86.x 까지는 17) |
| OS | Linux, Windows, macOS. root 로 실행하지 않는다 |
| CPU · 메모리 | 소규모 2 CPU · 8 GB, 중규모 4 CPU · 8 GB. RAM 의 2/3 까지만 Nexus 에 준다 |
| 파일 디스크립터 | 65,536 이상. 부족하면 데이터가 유실된다 |
| 데이터베이스 | H2(내장, 하루 20만 요청 · 컴포넌트 10만 개 이하) 또는 PostgreSQL(권장). OrientDB 는 3.71.0 부터 지원하지 않는다 |
| 포트 | 8081 (HTTP). Docker 저장소는 저장소별 별도 포트 |
| 디렉터리 | 내용 |
|---|---|
/opt/sonatype/nexus-3.x.y-nn |
애플리케이션. bin/nexus 실행 스크립트, etc/jetty/ |
/opt/sonatype/sonatype-work/nexus3 |
데이터 디렉터리. etc/nexus.properties, admin.password, log/, blobs/ |
sudo dnf install -y java-21-openjdk-headless tar
sudo useradd -r -s /bin/bash -d /opt/sonatype nexus
sudo mkdir -p /opt/sonatype
파일 디스크립터 한도를 올린다. systemd 유닛에서도 LimitNOFILE 로 다시 준다.
echo 'nexus - nofile 65536' | sudo tee /etc/security/limits.d/nexus.conf
cd /opt/sonatype
sudo curl -LO https://download.sonatype.com/nexus/3/nexus-3.96.2-01-linux-x86_64.tar.gz
sudo tar xvz --keep-directory-symlink -f nexus-3.96.2-01-linux-x86_64.tar.gz
sudo ln -s /opt/sonatype/nexus-3.96.2-01 /opt/sonatype/nexus
sudo chown -R nexus:nexus /opt/sonatype
nexus-3.96.2-01/ 과 sonatype-work/ 두 디렉터리가 생긴다. 다음 버전으로 올릴 때는 새 아카이브를 풀고 심볼릭 링크만 옮긴다.
실행 계정과 포트를 정한다.
echo 'run_as_user="nexus"' | sudo tee /opt/sonatype/nexus/bin/nexus.rc
# /opt/sonatype/sonatype-work/nexus3/etc/nexus.properties
application-port=8081
application-host=0.0.0.0
nexus-context-path=/
JVM 힙은 /opt/sonatype/nexus/bin/nexus.vmoptions 에서 -Xms · -Xmx 를 같은 값으로 준다. 데이터 디렉터리의 파일은 첫 기동 때 생성된다.
# /etc/systemd/system/nexus.service
[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/opt/sonatype/nexus/bin/nexus start
ExecStop=/opt/sonatype/nexus/bin/nexus stop
User=nexus
Restart=on-abort
TimeoutSec=600
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now nexus.service
tail -f /opt/sonatype/sonatype-work/nexus3/log/nexus.log
sudo firewall-cmd --permanent --add-port=8081/tcp
sudo firewall-cmd --reload
Started Sonatype Nexus 로그가 찍히면 http://<host>:8081/ 에 접속한다. 관리자 계정은 admin, 초기 비밀번호는 데이터 디렉터리에 있다. 첫 로그인 마법사에서 비밀번호를 바꾸고 익명 접근 허용 여부를 정한다.
sudo cat /opt/sonatype/sonatype-work/nexus3/admin.password
HTTPS 는 Nexus HTTPS 적용 을 따른다.
Settings → Repository → Repositories → Create repository 에서 형식을 고른다. 흔한 조합은 다음과 같다.
| 형식 | proxy | hosted | group |
|---|---|---|---|
| maven2 | maven-central |
maven-releases, maven-snapshots |
maven-public |
| pypi | pypi-proxy (https://pypi.org/) |
pypi-hosted |
pypi-group |
| docker | docker-hub |
docker-hosted |
docker-group (별도 HTTP 포트) |
클라이언트는 group 저장소 URL 하나만 바라본다 — https://nexus.example.com/repository/maven-public/, .../repository/pypi-group/simple.
nexus.properties 에 키스토어 경로를 적었는데 기동 로그에는 전혀 다른 경로를 찾는다고 나온다.pypi-all · pypi-host · pypi-proxy 세 저장소가 있는데 pip install 은 어디를…최신 버전 3.96.2-01 — 2026-09-20 확인. https://help.sonatype.com/en/download.html ↩︎ ↩︎
System Requirements. 2026-09-20 확인. https://help.sonatype.com/en/sonatype-nexus-repository-system-requirements.html ↩︎
Installation Methods. 2026-09-20 확인. https://help.sonatype.com/en/installation-methods.html ↩︎
Run as a Service. 2026-09-20 확인. https://help.sonatype.com/en/run-as-a-service.html ↩︎