הגדרת Sonatype Nexus עבור Maven, npm, PyPI ו-Docker Artifacts
אנו מגדירים את Sonatype Nexus כמאגר artifacts אחיד המשלב Maven, npm, PyPI ו-Docker במקום אחד. זה מבטל פתרונות מפוזרים ומבטיח builds יציבים גם ברשתות מבודדות. ללא Nexus, כל build מוריד תלויות מאפס; כאשר מגבלת הקצב של Docker Hub נכנסת לפעולה (100 משיכות ב-6 שעות למשתמשים אנונימיים), ה-pipeline שלך יכול להיכשל. אנו פותרים זאת: Nexus מאחסן חבילות מקומית ומקבע גרסאות, ומאיץ את ה-CI/CD פי 2–3. הניסיון שלנו: 10+ שנים ב-DevOps, 30+ התקנות Nexus.
למה Nexus עבור מאגרים ארגוניים?
Nexus Repository Manager תומך ב-proxying ובאירוח עבור כל הפורמטים המרכזיים: Maven (Java), npm (JS), PyPI (Python), Docker (containers), וכן Helm, NuGet, apt, yum. בסביבות air-gapped (רשתות תעשייתיות, דרישות רגולציה), pipeline אוטומטי בלתי אפשרי ללא Nexus. Nexus מוגדר כראוי מקצר את זמן ה-build ב-40% (ממוצע בפרויקטים שלנו) ומפחית את התעבורה הנצרכת ב-80% באמצעות caching מקומי. זה מבטל בעיות עם מגבלות קצב של רישומים חיצוניים. בהשוואה ל-Artifactory, הרישוי של Nexus זול יותר לעסקים קטנים (עד פי 5), אם כי חסרה תמיכה בחלק מהפורמטים. עם זאת, עבור stacks טיפוסיים, Nexus מכסה את כל הצרכים.
כיצד Sonatype Nexus מאיץ CI/CD ואמינות Build
pipeline של CI/CD מושך תלויות ישירות מ-Maven Central, npm registry ו-Docker Hub בכל פעם. עם אינטרנט לא יציב או מגבלות קצב (Docker Hub: 100 משיכות/6 שעות למשתמשים אנונימיים), builds מתחילים להיכשל. כאשר תלויות מתעדכנות "בשקט", ההתנהגות משתנה—גרסאות לא מקובעות ב-cache הארגוני. בסביבות air-gapped (רשתות תעשייתיות, רגולציה), ה-pipeline פשוט לא עובד ללא Nexus. Nexus פותר את כל הבעיות הללו: caching דרך proxy repositories, קיבוע גרסאות דרך hosted repositories, ו-group repository כנקודת כניסה יחידה.
התקנת Nexus
docker-compose.yml עבור Nexus
---
# docker-compose.yml
services:
nexus:
image: sonatype/nexus3:3.68.0
container_name: nexus
ports:
- "8081:8081" # Web UI и Maven/npm/PyPI
- "5000:5000" # Docker hosted registry
- "5001:5001" # Docker proxy registry
volumes:
- nexus-data:/nexus-data
environment:
- INSTALL4J_ADD_VM_PARAMS=-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m
restart: unless-stopped
volumes:
nexus-data:
driver: local
Nexus דורש לפחות 4 GB RAM. הסיסמה הראשונית נמצאת ב-# docker-compose.yml services: nexus: image: sonatype/nexus3:3.68.0 container_name: nexus ports: - "8081:8081" # Web UI и Maven/npm/PyPI - "5000:5000" # Docker hosted registry - "5001:5001" # Docker proxy registry volumes: - nexus-data:/nexus-data environment: - INSTALL4J_ADD_VM_PARAMS=-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m restart: unless-stopped volumes: nexus-data: driver: local . לאחר התחברות ראשונה, שנה את הסיסמה ואפשר גישת קריאה אנונימית (עבור CI ללא אימות בעת משיכה).
הגדרת מאגרים
Nexus עובד עם שלושה סוגי מאגרים: Hosted, Proxy, Group.
| סוג | תיאור | דוגמה לשימוש |
|---|---|---|
| Hosted | אחסון artifacts משלך | ספריות פנימיות, builds |
| Proxy | Proxy לרישום חיצוני עם cache | Docker Hub, Maven Central |
| Group | שילוב Hosted + Proxy לכתובת אחת | נקודת גישה יחידה עבור CI |
| פורט | מטרה |
|---|---|
| 8081 | Web UI, Maven, npm, PyPI |
| 5000 | Docker hosted registry |
| 5001 | Docker proxy registry |
Maven:
- maven-central (proxy -> https://repo1.maven.org/maven2)
- maven-releases (hosted, מדיניות: release)
- maven-snapshots (hosted, מדיניות: snapshot)
- maven-public (group: maven-releases + maven-snapshots + maven-central)
ב-cat /data/nexus/admin.password של המפתח — רק כתובת ה-group:
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>https://nexus.company.ru/repository/maven-public/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>nexus</id>
<username>deploy</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
</servers>
</settings>npm:
# Настройка npm для использования Nexus
npm config set registry https://nexus.company.ru/repository/npm-group/
npm config set //nexus.company.ru/repository/npm-group/:_authToken ${NEXUS_NPM_TOKEN}
# Публикация внутреннего пакета
npm publish --registry https://nexus.company.ru/repository/npm-hosted/PyPI:
# ~/.config/pip/pip.conf
[global]
index-url = https://nexus.company.ru/repository/pypi-group/simple/
trusted-host = nexus.company.ruDocker:
עבור Docker, יש צורך בפורטים נפרדים (Nexus לא יכול לשתף Docker registry לפי נתיב, רק לפי פורט). הגדר את Docker daemon כ-insecure registry אם אין TLS.
docker pull nexus.company.ru:5001/library/nginx:1.25
docker tag my-app:1.0 nexus.company.ru:5000/my-app:1.0
docker push nexus.company.ru:5000/my-app:1.0 מדיניות אחסון וניקוי
ללא מדיניות ניקוי, nexus-data גדל ללא שליטה. הגדר ב-Administration → Cleanup Policies:
- Maven snapshots: מחק artifacts ישנים מ-30 יום או אם יש יותר מ-5 גרסאות לכל artifact
- Docker images: מחק תמונות ללא תג, שמור 10 תגים אחרונים לכל תמונה
- npm: מחק גרסאות ישנות מ-90 יום אם קיימת גרסה חדשה יותר
ניתן להחיל מדיניות ידנית או בלוח זמנים דרך Tasks → Execute Cleanup Policies.
אבטחה ואימות
Nexus תומך ב-LDAP ו-SAML לאימות. תפקידים: anonymous (קריאה בלבד לציבור), developer (קריאה + פרסום ל-hosted), admin. עבור CI/CD, צור משתמש settings.xml ייעודי עם הרשאות מינימליות—רק push למאגרים הרלוונטיים.
כיצד להגדיר את Nexus שלב אחר שלב
- פרוס את Nexus דרך Docker Compose או Java עצמאי.
- קבל את הסיסמה הראשונית ובצע התחברות ראשונה.
- צור מאגרי Hosted, Proxy ו-Group עבור כל פורמט.
- הגדר מדיניות ניקוי ואימות דרך LDAP או SAML.
- שלב את Nexus עם CI/CD והכשר את הצוות.
דוגמה: הגדרת Nexus עבור סטארטאפ פינטק עם סביבת Air-Gapped
אחד הפרויקטים שלנו—סטארטאפ פינטק שנדרש לפרוס את Nexus ברשת מבודדת ללא גישה לאינטרנט. הקמנו proxy repositories, טעינת cache מראש עבור Maven Central (כ-500 ספריות פופולריות) ו-Docker Hub (תמונות בסיס עבור Java, Python, Node). התוצאה: builds כבר לא תלויים ברישומים חיצוניים, זמן ה-build ירד מ-15 ל-5 דקות (הפחתה של 67%), והאבטחה השתפרה דרך בקרת גרסאות באמצעות hosted repositories.
מה כלול בעבודה
אנו מספקים את מחזור ההגדרה המלא של Nexus:
- פריסת Nexus ב-Docker או על VM עם אופטימיזציית JVM
- הגדרת מאגרי Maven, npm, PyPI, Docker עם proxying ו-caching
- שילוב עם CI/CD (GitLab CI, Jenkins, GitHub Actions) ו-LDAP/SAML
- סיום SSL דרך reverse proxy (nginx)
- מדיניות ניקוי וגיבויים
- תיעוד לצוותים והכשרה
לוחות זמנים משוערים וקריאה לפעולה
הגדרת Nexus סטנדרטית אורכת בין 3 ל-5 ימים. המורכבות תלויה במספר הפורמטים, דרישות האבטחה והשילוב עם התשתית הקיימת. קבל ייעוץ—נעריך את הפרויקט שלך ביום אחד. הזמן הגדרת Nexus ושכח מבעיות תלויות. צור קשר כדי לדון במקרה שלך—נכין את הפתרון האופטימלי.







