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.
-
Proxy Repository — Tashqi repository’larga ular nomidan so‘rov yuboradi va natijalarni keshlashi mumkin.
-
Hosted Repository — Biz yaratgan artifact’larni bevosita Repository’ga yuklash imkonini beradi.
-
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.


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
-
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.
-
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