Nexus Repository Manager — prywatne repozytorium artefaktów
Opublikowano: 10 kwietnia 2026 · Kategoria: VPS i serwery
Każdy build Java pobiera dziesiątki JAR-ów z Maven Central, build Node.js tysiące pakietów z npmjs.com, build Python — z PyPI. Bez cachowania budowanie offline jest niemożliwe, a przy CI każdy cold start trwa minuty. Nexus Repository Manager rozwiązuje ten problem przez proxy + caching zewnętrznych repozytoriów i hosting prywatnych bibliotek. Jeden Nexus w organizacji zastępuje lokalne cache na każdej maszynie i gwarantuje reprodukowalność buildów. Ten artykuł pokazuje instalację przez Docker, konfigurację repozytoriów Maven, npm i Docker, oraz cleanup policies.
Instalacja Nexus przez Docker
Nexus 3 dostępny jest jako obraz Docker sonatype/nexus3. Wymaga minimum 4 GB
RAM ze względu na JVM. Dane persistujemy przez named volume.
# docker-compose.yml
version: "3.9"
services:
nexus:
image: sonatype/nexus3:latest
container_name: nexus
restart: unless-stopped
ports:
- "8081:8081" # UI i Maven/npm/PyPI
- "8082:8082" # Docker registry (proxy)
- "8083:8083" # Docker registry (hosted)
volumes:
- nexus-data:/nexus-data
environment:
- INSTALL4J_ADD_VM_PARAMS=-Xms2g -Xmx4g -XX:MaxDirectMemorySize=4g
ulimits:
nofile:
soft: 65536
hard: 65536
volumes:
nexus-data:
# docker compose up -d
# Odczytaj haslo admina:
# docker exec nexus cat /nexus-data/admin.password
# Otwórz http://twoj-ip:8081 → zaloguj sie admin / haslo z powyzszego Konfiguracja repozytoriów Maven
Nexus używa trzech typów repozytoriów: proxy (lustro zewnętrznego repo), hosted (własne artefakty) i group (agregacja wielu repo za jednym URL). Standardowy setup Maven w Nexus to: proxy Maven Central + hosted releases + hosted snapshots + group łącząca wszystkie trzy.
# W UI Nexus: Administration → Repository → Repositories → Create repository
# 1. maven2 (proxy) — Maven Central
# Name: maven-central-proxy
# Remote storage: https://repo1.maven.org/maven2/
# Blob store: default
# 2. maven2 (hosted) — prywatne release
# Name: maven-releases
# Version policy: Release
# 3. maven2 (hosted) — snapshoty
# Name: maven-snapshots
# Version policy: Snapshot
# 4. maven2 (group) — wszystko razem
# Name: maven-public
# Members: maven-releases, maven-snapshots, maven-central-proxy
# ~/.m2/settings.xml — konfiguracja Maven
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus.example.com:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>nexus</id>
<username>admin</username>
<password>haslo-nexus</password>
</server>
</servers>
</settings> Konfiguracja npm i PyPI proxy
# npm proxy w Nexus: # Repository → npm (proxy) # Name: npm-proxy # Remote storage: https://registry.npmjs.org # Konfiguracja lokalnego npm klienta: npm config set registry http://nexus.example.com:8081/repository/npm-proxy/ # Z autentykacja: npm config set //nexus.example.com:8081/repository/npm-proxy/:username admin npm config set //nexus.example.com:8081/repository/npm-proxy/:_password BASE64_HASLO # Lub .npmrc w projekcie: # registry=http://nexus.example.com:8081/repository/npm-proxy/ # PyPI proxy w Nexus: # Repository → pypi (proxy) # Name: pypi-proxy # Remote storage: https://pypi.org # Konfiguracja pip: # ~/.pip/pip.conf [global] index-url = http://nexus.example.com:8081/repository/pypi-proxy/simple/ trusted-host = nexus.example.com # Lub przez argument: # pip install requests --index-url http://nexus.example.com:8081/repository/pypi-proxy/simple/
Docker Registry w Nexus
# Nexus jako Docker Registry wymaga osobnych portów per repo!
# Repository → docker (proxy)
# Name: docker-hub-proxy
# HTTP port: 8082
# Remote storage: https://registry-1.docker.io
# Use Docker Hub: tak
# Repository → docker (hosted)
# Name: docker-private
# HTTP port: 8083
# Na hoście klienta Docker (/etc/docker/daemon.json):
{
"insecure-registries": ["nexus.example.com:8082", "nexus.example.com:8083"]
}
# Uzycie
docker login nexus.example.com:8083
docker tag myapp:latest nexus.example.com:8083/myapp:latest
docker push nexus.example.com:8083/myapp:latest
# Pull przez proxy Docker Hub (bez rate limitu)
docker pull nexus.example.com:8082/library/nginx:alpine Cleanup policies i zarządzanie miejscem
| Kryterium | Opis | Typowa wartość |
|---|---|---|
| Last downloaded before | Usuń jeśli nie pobierany od N dni | 30–90 dni dla proxy |
| Last modified before | Usuń jeśli nie zmieniony od N dni | 180 dni dla snapshots |
| Release type | Tylko Releases lub tylko Snapshots | Snapshots = agresywniej |
| Asset name regex | Usuń pasujące do wzorca nazwy | np. .*-SNAPSHOT.jar |
| Retain N newest | Zachowaj N najnowszych wersji (Pro) | 3–5 wersji |
Cleanup policies przypisujesz do repozytoriów w ustawieniach Cleanup Policy. Uruchamiane są przez scheduled task Cleanup service — możesz go skonfigurować w Administration → Tasks. Po uruchomieniu cleanup, usuń fizycznie komponenty przez task Compact blob store — inaczej miejsce na dysku się nie zwolni.