הגדרת Sonatype Nexus עבור Maven, npm, PyPI ו-Docker Artifacts

מאגרי חבילות מפוזרים מאטים את תהליכי הבנייה והופכים את הצינורות לפגיעים לכשלים של שירותים חיצוניים. אנו מגדירים את Sonatype Nexus כמאגר אחיד עבור ארטיפקטים של Maven, npm, PyPI ו-Docker, ומאחדים את כל התלויות במקום אחד. הצוות שלנו מספק את הפרויקט במפתח מלא, ומבטיח פעילות אמינה של המאגר עם תמיכה מתמשכת.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הגדרת 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.ru

Docker:

עבור 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 שלב אחר שלב

  1. פרוס את Nexus דרך Docker Compose או Java עצמאי.
  2. קבל את הסיסמה הראשונית ובצע התחברות ראשונה.
  3. צור מאגרי Hosted, Proxy ו-Group עבור כל פורמט.
  4. הגדר מדיניות ניקוי ואימות דרך LDAP או SAML.
  5. שלב את 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 ושכח מבעיות תלויות. צור קשר כדי לדון במקרה שלך—נכין את הפתרון האופטימלי.