Nexus Repository

Nexus Repository

Kirish

Bir jumla bilan aytganda, Nexus Repository — ishlab chiqish komponentlari uchun umumiy ichki ombor. Bu ishlab chiqishda ishlatiladigan kutubxonalar, paketlar, Docker image’lari va shunga o‘xshash resurslarni bir joyda to‘playdigan va boshqaradigan server bo‘lib, ular kerak bo‘lganda olinishi mumkin.

Hozirda dasturchilar kerakli narsalarni Internetdan alohida-alohida yuklab olishadi. Yigirma kishi bir xil kutubxonani yigirma marta yuklab olishi mumkin, tashqi sayt qisqa vaqtga ishlamay qolsa, barchaning build jarayoni bir vaqtning o‘zida to‘xtaydi. Nexus ular o‘rtasida vositachi bo‘lib, elementni bir marta yuklab oladi va uni hammaga tarqatadi.

Nexus uchta asosiy vazifani bajaradi.

  • Yuklab olish va saqlash — Tashqi manbalardan yuklab olingan kutubxonalarni tashkilot ichida keshlash.

  • O‘z artifact’larimizni saqlash — Biz yaratadigan umumiy modullar va build natijalarini saqlash.

  • Ularni yagona kirish nuqtasi ortida birlashtirish — Bir nechta repository’ni birlashtirish va ularni yagona manzil orqali taqdim etish.

Repository xususiyatlari

Repository’larning uchta asosiy turi mavjud.

  1. Proxy Repository — Tashqi repository’larga ular nomidan so‘rov yuboradi va natijalarni keshlashi mumkin.

  2. Hosted Repository — Biz yaratgan artifact’larni bevosita Repository’ga yuklash imkonini beradi.

  3. Group Repository — Bir nechta repository’ni yagona manzil ostida birlashtirish uchun ishlatiladi.

Agar administrator Proxy va Hosted Repository’larni Group Repository’ga birlashtirsa, foydalanuvchilar repository’larga kirishda Group Repository’dan foydalanishlari mumkin. Bu ularga faqat bitta Repository’dan foydalanish kifoya deganidir.

Repository konfiguratsiyasiga misol

Repository nomi

Format

Turi

Maqsadi

maven-public

maven2

group

Backend dasturchilari foydalanadigan manzil (quyidagi uchta repository’ni birlashtiradi)

maven-releases

maven2

hosted

Biz yaratadigan rasmiy release JAR’lari

maven-snapshots

maven2

hosted

Ishlab chiqilayotgan JAR’lar

maven-mirror

maven2

hosted

Tashqi manbalardan olib kirilgan kutubxonalar

Nexus qo‘llab-quvvatlaydigan paket formatlari

Uning eng katta afzalligi — Java (Maven·Gradle), frontend (npm), Python, Docker image’lari va Linux paketlarini o‘z ichiga olgan 20 dan ortiq format bilan bitta serverda ishlay olishidir. Har bir til uchun alohida repository sozlashning hojati yo‘q. Quyida qo‘llab-quvvatlanadigan paket turlari keltirilgan; Terraform, Yum va boshqalar ham qo‘llab-quvvatlanadi.

image1.pngimage2.png

image3.pngimage4.png

Ichki tarmoqlarda foydalanish

Tarmoqni ajratish bitta katta cheklovni yuzaga keltiradi. Ichki tarmoqdagi serverlar Internetga kira olmaydi. Shu sababli ular “tashqaridan ular nomidan elementlarni xarid qiladigan” Proxy repository’lardan foydalana olmaydi va tashqi manbalardan oldindan yuklab olingan elementlarni olib kirish uchun import jarayoni talab qilinadi.

Eng ko‘p ishlatiladigan konfiguratsiya — ikkita Nexus nusxasini joylashtirish. Ulardan biri kerakli elementlarni oldindan yuklab olish uchun tashqi tarmoqqa (yoki DMZ’ga), ikkinchisi esa ularni dasturchilarga tarqatish uchun ichki tarmoqqa joylashtiriladi. Elementlar ikkalasi o‘rtasida tarmoqlararo ulanish tizimi orqali muntazam ravishda ko‘chiriladi.

  [인터넷] → [외부망 Nexus · Proxy] ← 필요한 것을 미리 받아 캐싱
                    ↓ 추출 → 검증(해시·백신·취약점) → 승인
      ═══ 망분리 경계 · 망연계 시스템으로 전송 ═══
                    ↓
  [내부망 Nexus · Hosted] → [개발자 PC / CI 서버]

Nexus’ni ichki tarmoqqa joriy etishning afzalliklari

Kategoriya

Joriy etishdan oldin

Joriy etilgandan keyin

Kutubxonalar qo‘shish

Import so‘rovini yuborgandan keyin bir necha kun kutish

Avval import qilingan elementlardan darhol foydalanish mumkin

Bog‘liqliklar

Yetishmayotgan har bir element uchun yangi so‘rov yuborish

Bitta build orqali hammasini bir vaqtning o‘zida xavfsiz ta’minlash

Yangi sozlama

Muhitni sozlash uchun bir necha kun ketadi

Bitta build buyrug‘i kifoya

Qabul qilish yo‘llari va audit

USB drayvlar, elektron pochta va boshqalar — barchasi turlicha, shu sababli dalillarni taqdim etish qiyin

Yagona shlyuz, unda yozuvlar dalil sifatida xizmat qiladi

Xavfsizlik nuqtayi nazaridan

Nexus’dan ichki tarmoqda foydalanilganda ham, u tashqi Nexus serveriga ochiq bo‘ladi. Shu sababli har bir hisob va repozitoriyning Roles va Privileges sozlamalarini konfiguratsiya qilish muhim.

Privileges foydalanuvchilarning repozitoriylardan foydalanish huquqlarini taqsimlash imkonini beradi.

Asosiy funksiyalar — ko‘rib chiqish, o‘qish, qo‘shish, tahrirlash va o‘chirish. Shuning uchun dasturchiga faqat yuklab olish huquqi kerak bo‘lsa, unga faqat read va browse huquqlarini berish, yuklash talab qilingandagina add huquqini qo‘shish mumkin.

Administrator hisoblari barcha huquqlarga ega bo‘lgani sababli, ulardan Artifact’ni odatiy yuklash yoki yuklab olish amallari uchun foydalanish tavsiya etilmaydi.

Sonatype, shuningdek, admin hisobidan faqat to‘liq huquqlar talab qilinadigan holatlarda, masalan, dastlabki sozlash yoki ma’muriy vazifalar uchun foydalanishni, odatiy amallar vaqtida esa cheklangan huquqlarga ega alohida hisobdan foydalanishni tavsiya qiladi.

Amaliy misol (Java + Gradle)

(1) Hisob ma’lumotlari — gradle.properties

Parollarni manba kodiga joylashtirmaslik uchun uy katalogidagi konfiguratsiya fayli yoki muhit o‘zgaruvchilaridan foydalaning. CI muhitida shaxsiy hisob o‘rniga Nexus User Token yaratish va undan foydalanish tavsiya etiladi.

# ~/.gradle/gradle.properties
nexusUrl=https://nexus.example.local
nexusUser=build-bot
nexusToken=xxxxxxxx-xxxx-xxxx

(2) Kutubxonalarni qayerdan olish — settings.gradle

Gradle plaginlariva kutubxonalariturli yo‘llar orqali olinadi. Ikkalasini ham ko‘rsatishingiz kerak. Agar yopiq tarmoqda buni o‘tkazib yuborsangiz, "kutubxona yuklab olindi, ammo jarayon plaginda to‘xtadi" degan holatga duch kelishingiz mumkin.

pluginManagement {
    repositories {
        maven {
            url = uri("${nexusUrl}/repository/gradle-plugins/")
            credentials { username = nexusUser; password = nexusToken }
        }
    }
}

dependencyResolutionManagement {
    // 하위 모듈이 mavenCentral()을 임의로 선언하지 못하게 막습니다
    repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS
    repositories {
        maven {
            url = uri("${nexusUrl}/repository/maven-public/")
            credentials { username = nexusUser; password = nexusToken }
        }
    }
}

(3) Build artefaktlarini yuklash — build.gradle

Versiyaga SNAPSHOT qo‘shilgan bo‘lsa, u development repozitoriysiga yuboriladi; aks holda release repozitoriysiga yuboriladi. Nexus sozlamalari orqali release repozitoriysida ustiga yozishning oldini olish yaxshi fikr. Bu bir xil versiyaga ega bo‘lsa-da, tarkibi turlicha bo‘lgan holatlarning tizimli ravishda oldini olishi mumkin.

plugins { id 'java'; id 'maven-publish' }

publishing {
    publications { maven(MavenPublication) { from components.java } }
    repositories {
        maven {
            url = version.toString().endsWith('SNAPSHOT')
                ? "${nexusUrl}/repository/maven-snapshots/"
                : "${nexusUrl}/repository/maven-releases/"
            credentials { username = nexusUser; password = nexusToken }
        }
    }
}

Ko‘p uchraydigan muammolar

  1. Fayllarni build qilish va yuklashda ba’zan fayl yuklangan bo‘lsa-da, metama’lumotlar yangilanmagani sababli Gradle uni topa olmaydi. Nexus’ning Repair - Rebuild Maven repository metadata vazifasini ishga tushiring yoki keshni tozalash uchun repozitoriydagi Invalidate cache tugmasini bosing.

  2. Nexus serverining sig‘imini boshqarishingiz kerak. Proxy va Hosted repozitoriylariga uzluksiz olib kiriladigan ma’lumotlar to‘planishda davom etadi. Administratorlar eski snapshot ma’lumotlarini tozalashni boshqarish uchun Cleanup Policy sozlamalaridan foydalanishi kerak. Compact blob store buyrug‘ini muntazam ishga tushiring.

Xulosa

Nexus ko‘z-ko‘z qilinadigan vosita emas. Biroq u sozlangach, dasturchilar endi kutubxonalarni kutib o‘tirishlariga hojat qolmaydi, xavfsizlik xodimlari esa tizimga nimalar kirganini bir joyda tekshirishlari mumkin. Ko‘pincha xavfsizlik va ishlab chiqish tezligi bir-biriga zid deyiladi, ammo hech bo‘lmaganda bu sohada yaxshi loyihalangan yagona shlyuz ikkalasini ham yaxshilaydi.

Manbalar

· Sonatype Nexus Repository rasmiy hujjatlari — Repozitoriy turlari / Community Edition’ga kirish (help.sonatype.com)

Bang

Site footer