Nexus 3 OSS एक ओपन सोर्स आर्टिफैक्ट रिपॉजिटरी मैनेजर है जो कंटेनर इमेज, Python PIP, Java JAR, और कई अन्य जैसे कई प्रारूपों को संभाल सकता है।
ऑन-प्रिमाइस आर्टिफैक्ट मैनेजर क्यों रखें? इसके कई कारण हैं:
अपने निजी बुनियादी ढांचे का उपयोग करें: आपके पास मालिकाना कोड हो सकता है जिसे सुरक्षित रखने की आवश्यकता है।
तेज़ आर्टिफैक्ट डाउनलोड गति: यदि आप लगातार इंटरनेट पर समान आर्टिफैक्ट डाउनलोड करते हैं, तो आप उन्हें एक केंद्रीय स्थान पर कैश कर सकते हैं, कई सर्वरों पर कई उपयोगकर्ताओं के लाभ के लिए उन्हें कैश करके।
नियंत्रित करें कि कौन से आर्टिफैक्ट आपकी बिल्ड चेन में आते हैं: आर्टिफैक्ट के स्थान को केंद्रीकृत करें, सुनिश्चित करें कि वे उपयोग के लिए स्वीकृत हैं, और यह भी पुष्टि करें कि उनमें दुर्भावनापूर्ण कोड नहीं है।
पृथक करें कि आपके आर्टिफैक्ट तक किसकी पहुंच हो सकती है: आपके अपने संगठन के भीतर कुछ आर्टिफैक्ट तक कौन पहुंच सकता है, इसके लिए आपके पास अधिक सख्त आवश्यकताएं हो सकती हैं।
इस लेख में मैं आपको दिखाऊंगा कि Ansible प्लेबुक का उपयोग करके Nexus 3 के OSS संस्करण को कैसे डाउनलोड, इंस्टॉल और कॉन्फिगर करें।
Nexus 3 8 GB RAM के साथ Orange PI 5 कंप्यूटर पर चलेगा, लेकिन इस प्रोविजनिंग को न्यूनतम आवश्यकताओं वाली किसी भी मशीन पर किया जा सकता है। सेटअप का हिस्सा मेरी इन्वेंट्री फ़ाइल में सूचीबद्ध मशीनों के लिए PyPI.org के लिए एक प्रॉक्सी सेट करना होगा।
इस ट्यूटोरियल से कोड चलाने के लिए आपको क्या चाहिए
Ansible प्लेबुक, Nexus, और PIP मॉड्यूल के लिए सोर्स कोड डाउनलोड करने के लिए एक इंटरनेट कनेक्शन
दो या अधिक Linux मशीनें (मैंने Debian, Armbian, और Fedora IOT का उपयोग किया), कम से कम 8 GB RAM के साथ। मेरे क्लस्टर में Raspberry PI 4 और एक OrangePI 5 का मिश्रण है।
Ansible कंट्रोलर Fedora मशीन पर चलेगा, लेकिन कोई भी सर्वर कंट्रोलर हो सकता है। Ansible के लिए इंस्टॉलेशन निर्देशों का पालन करना आसान है।
प्लेबुक संगठन
मैंने कार्यों को समूहों में विभाजित किया है और परिणामी प्लेबुक इस तरह दिखता है:
[josevnz@dmaf5 Nexus3OnOrangePI]$ tree -N ansible/ ansible/ ├── inventories │ └── home │ └── hosts.yaml ├── roles │ ├── clients │ │ ├── tasks │ │ │ └── main.yaml │ │ └── templates │ │ └── pip.conf.j2 │ └── nexus │ ├── files │ │ └── swagger.json │ ├── tasks │ │ ├── download.yaml │ │ ├── install.yaml │ │ ├── main.yaml │ │ ├── post_install.yaml │ │ ├── pre_install.yaml │ │ ├── repositories.yaml │ │ ├── third_party.yaml │ │ └── user.yaml │ └── templates │ ├── logrotate.nexus3.j2 │ ├── nexus3.service.j2 │ ├── nexus.rc.j2 │ └── nexus.vmoptions.j2 ├── site.yaml ├── vars │ ├── clients.yaml │ └── nexus.yaml └── vault ├── nexus_password.enc └── README.md 13 directories, 21 files
अब थोड़ी व्याख्या:
दो भूमिकाएं हैं: 'nexus' और 'clients'। Nexus भूमिका आर्टिफैक्ट मैनेजमेंट सॉफ्टवेयर सेटअप करने के लिए उपयोग की जाती है, जबकि क्लाइंट भूमिका हर मशीन पर pip सेटिंग्स सेटअप करती है।
Vars में प्रत्येक भूमिका पर उपयोग किए जाने वाले वेरिएबल्स होते हैं, उनके उपयोग को अधिक स्पष्ट बनाने के लिए फ़ाइलों द्वारा अलग किए गए
हमारे पास पासवर्ड हैं, और हमने उन्हें Ansible vault फीचर का उपयोग करके प्रबंधित किया।
फ़ाइल 'site.yaml' भूमिका निष्पादन को व्यवस्थित करती है:
- hosts: all tags: clients vars_files: - vars/clients.yaml roles: - clients - hosts: nexus_server tags: nexus become_user: root become: true vars_files: - vars/nexus.yaml roles: - nexus
अब आइए उस ब्रह्मांड को देखें जहां प्लेबुक निष्पादित होगी।
होस्ट इन्वेंट्री
मेरे मामले में यह काफी सरल है - मेरे दो मुख्य समूह हैं: 'clients' और वह मशीन जहां Nexus 3 सर्वर स्वयं चलेगा:
all: children: nexus_server: hosts: orangepi5.home: home_lab: hosts: dmaf5.home: raspberrypi.home: orangepi5.home:
अगला महत्वपूर्ण कार्य Nexus 3 को डाउनलोड और कॉन्फिगर करना है।
Nexus 3 कैसे इंस्टॉल करें
main.yaml फ़ाइल Nexus भूमिका के लिए प्रत्येक इंस्टॉलेशन कार्य के क्रम और उद्देश्य का वर्णन करती है:
# Tasks listed here are related to the remote Nexus 3 server # Included tasks are called in order --- - include_tasks: third_party.yaml - include_tasks: pre_install.yaml - include_tasks: download.yaml - include_tasks: install.yaml - include_tasks: post_install.yaml - include_tasks: user.yaml - include_tasks: repositories.yaml
आइए पहले देखें कि मैं जिसे "कोर कार्य" कहना पसंद करता हूं:
third_party.yaml: यहां हम OpenJDK8 (Nexus 3 Java में लिखा गया है) और logrotate इंस्टॉल करते हैं ताकि पुराने लॉग का ध्यान रखा जा सके।
pre_install.yaml: यहां बहुत कुछ होता है, जैसे Nexus के लिए आवश्यक निर्देशिकाएं बनाना, प्रक्रिया चलाने के लिए समर्पित गैर-विशेषाधिकार प्राप्त उपयोगकर्ता।
download.yaml: जैसा कि नाम से पता चलता है, हम Nexus 3 OSS सॉफ़्टवेयर का एक नया संस्करण प्राप्त करते हैं और सुनिश्चित करते हैं कि इसका सही चेकसम है। हम इंटरनेट से मैलवेयर इंस्टॉल नहीं करना चाहते।
फिर "अनुकूलित इंस्टॉलेशन समूह" में आने वाले कार्य आते हैं:
install.yaml: सॉफ़्टवेयर को अनपैक करें, इसे स्वचालित रूप से शुरू करने के लिए systemd यूनिट तैयार करें, Nexus के लिए JVM सेटिंग्स सेटअप करें, और logrotate कॉन्फिगरेशन तैनात करें।
post_install.yaml: यहां रोमांचक चीजें होती हैं - सॉफ़्टवेयर इंस्टॉल हो गया है, और हम इसे पहली बार चलाते हैं। हम REST API का उपयोग करके डिफ़ॉल्ट पासवर्ड भी बदलते हैं, ताकि हम अनुकूलन चरण में जा सकें।
user.yaml: यहां हम अपने अंतिम उपयोगकर्ताओं को Nexus द्वारा प्रदान की जाने वाली सेवाओं तक उचित पहुंच प्रदान करने की तैयारी करते हैं। हम REST-API और Ansible क्लाइंट कोड के संयोजन का उपयोग करके ऐसा करते हैं:
# https://help.sonatype.com/repomanager3/installation-and-upgrades/post-install-checklist # https://help.sonatype.com/repomanager3/integrations/rest-and-integration-api --- - name: Enable anonymous user tags: anonymous ansible.builtin.uri: user: "" password: "" url: "/v1/security/anonymous" method: PUT body_format: raw status_code: [ 200, 202, 204 ] headers: Content-Type: application/json body: |- { "enabled" : true, "userId" : "anonymous", "realmName" : "NexusAuthorizingRealm" } force_basic_auth: true return_content: true any_errors_fatal: true - name: Enable Docker security realm tags: docker_realm ansible.builtin.uri: user: "" password: "" url: "/v1/security/realms/active" method: PUT body_format: raw status_code: [ 200, 202, 204 ] headers: Content-Type: application/json body: |- [ "NexusAuthenticatingRealm", "NexusAuthorizingRealm", "DockerToken" ] force_basic_auth: true return_content: true any_errors_fatal: true
तर्क का पालन करना आसान है, HTTP 'PUT' विधि का उपयोग करके आप बता सकते हैं कि यह एक संशोधन ऑपरेशन है (अर्थात मौजूदा भूमिकाएं और उपयोगकर्ता पहले से मौजूद हैं)। त्रुटि पहचान Nexus द्वारा लौटाए गए HTTP कोड प्राप्त करके की जाती है।
अगला चरण हमारे स्थानीय PyPi प्रॉक्सी को तैयार करना है। यह एक बहु-चरण कार्य है और अगले में विस्तार से वर्णित किया जाएगा।
Nexus 3 पर PyPI प्रॉक्सी कैसे सेट करें
Nexus 3 भूमिका पर अंतिम फ़ाइल 'repositories.yaml' है। यहां हम निम्नलिखित चरणों से गुजरते हैं:
जांचें कि प्रॉक्सी पहले से सेटअप था या नहीं (GET या केवल पढ़ने का ऑपरेशन)
यदि यह मौजूद नहीं है, तो एक नया बनाएं (JSON पेलोड के साथ POST विधि जिसमें पूरी नई रिपॉजिटरी बनाने का विवरण हो)
ध्यान दें कि यह प्लेबुक रिपॉजिटरी सेटिंग्स को अपडेट करने का विकल्प प्रदान नहीं करता। REST API के साथ यह करना संभव है, लेकिन मैं इसे पाठक के लिए एक अभ्यास के रूप में छोड़ दूंगा।
PyPi प्रॉक्सी तैयार करने के कार्य नीचे दिखाए गए हैं:
# Create proxy for repositories # https://help.sonatype.com/repomanager3/integrations/rest-and-integration-api # PyPi: https://pip.pypa.io/en/stable/user_guide/ --- - name: Check if the PyPi proxy exists tags: pypi_proxy_exists ansible.builtin.uri: user: "" password: "" url: "/v1/repositories/pypi/proxy/python_proxy" method: GET body_format: raw status_code: [ 200, 202, 204, 404 ] headers: Content-Type: application/json force_basic_auth: true return_content: true any_errors_fatal: true register: python_local - name: Create PyPI proxy tags: pypi_proxy_create ansible.builtin.uri: user: "" password: "" url: "/v1/repositories/pypi/proxy" method: POST body_format: raw status_code: [ 201 ] headers: Content-Type: application/json body: |- { "name": "python_proxy", "online": true, "storage": { "blobStoreName": "default", "strictContentTypeValidation": true }, "proxy": { "remoteUrl": "https://pypi.org/", "contentMaxAge": -1, "metadataMaxAge": 1440 }, "negativeCache": { "enabled": true, "timeToLive": 1440 }, "httpClient": { "blocked": false, "autoBlock": true, "connection": { "retries": 0, "timeout": 60, "enableCircularRedirects": false, "enableCookies": true, "useTrustStore": false } } } force_basic_auth: true return_content: true any_errors_fatal: true when: python_local.status == 404
हम लगभग वहां हैं। अब हमें अपने PyPi क्लाइंट्स को बताना होगा कि उन्हें अपने Python लाइब्रेरी प्राप्त करने के लिए सीधे PyPi साइट के बजाय हमारे स्थानीय Nexus का उपयोग करना चाहिए।
क्लाइंट्स कैसे सेट करें
क्लाइंट्स भूमिका बहुत सरल है और केवल pip.conf के लिए एक टेम्पलेट तैनात करने की आवश्यकता है जिसमें हमारे नए रिपॉजिटरी पर खोज को बाध्य करने के लिए पर्याप्त जानकारी हो:
# Tasks here are meant to be used on our clients user --- - name: Create installation directory for pip.conf tags: pip_basedir ansible.builtin.file: state: directory path: "" owner: "" group: "" mode: "u+rwx,go-rwx" - name: Copy pip.conf file tags: pip_copy ansible.builtin.template: src: pip.conf.j2 dest: "/pip.conf" owner: "" group: "" mode: u=rxw,g=r,o=r
परिणामी फ़ाइल हर मशीन पर '~/.config/pip/pip.conf' पर तैनात हो जाती है:
# https://pip.pypa.io/en/stable/topics/configuration/ [global] timeout = 60 [install] index = https://orangepi5.home:8081/repository/python_proxy/pypi index-url = https://orangepi5.home:8081/repository/python_proxy/simple/ trusted-host = orangepi5.home
ऊपर की फ़ाइल दिखाती है कि एक बार मेरे क्लस्टर पर तैनात होने के बाद फ़ाइल का अंतिम संस्करण कैसा दिखेगा (आपका हल किए गए URL के साथ अलग होगा)।
अब पूरे प्लेबुक को चलाने और यह देखने का समय है कि यह कैसा दिखता है।
प्लेबुक कैसे चलाएं
प्लेबुक चलाने के लिए, हम कुछ तर्क पास करते हैं:
हमारे होस्ट इन्वेंट्री का स्थान
एन्क्रिप्टेड पासवर्ड फ़ाइल का स्थान और मास्टर फ़ाइल जिसमें संरक्षित फ़ाइल की सामग्री को अनलॉक करने के लिए मास्टर पासवर्ड होता है
और अंत में हमारे मुख्य प्लेबुक फ़ाइल का स्थान
cd ansible ansible-playbook --inventory inventories --extra-vars @vault/nexus_password.enc --vault-password-file $HOME/vault/ansible_vault_pass site.yaml
नए PyPI प्रॉक्सी का परीक्षण कैसे करें
अपने नए प्रॉक्सी का परीक्षण करने के लिए, हम pip और एक वर्चुअल एनवायरनमेंट का उपयोग करके Python Rich इंस्टॉल करेंगे।
josevnz@orangepi5:~$ python3 -m venv ~/virtualenv/rich (rich) josevnz@orangepi5:~$ . ~/virtualenv/rich/bin/activate (rich) josevnz@orangepi5:~$ pip install rich Looking in indexes: https://orangepi5.home:8081/repository/python_proxy/simple/ Collecting rich Downloading https://orangepi5.home:8081/repository/python_proxy/packages/rich/13.3.4/rich-13.3.4-py3-none-any.whl (238 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 238.7/238.7 KB 14.8 MB/s eta 0:00:00 Collecting pygments<3.0.0,>=2.13.0 Downloading https://orangepi5.home:8081/repository/python_proxy/packages/pygments/2.15.0/Pygments-2.15.0-py3-none-any.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 23.8 MB/s eta 0:00:00 Collecting markdown-it-py<3.0.0,>=2.2.0 Downloading https://orangepi5.home:8081/repository/python_proxy/packages/markdown-it-py/2.2.0/markdown_it_py-2.2.0-py3-none-any.whl (84 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.5/84.5 KB 6.9 MB/s eta 0:00:00 Collecting mdurl~=0.1 Downloading https://orangepi5.home:8081/repository/python_proxy/packages/mdurl/0.1.2/mdurl-0.1.2-py3-none-any.whl (10.0 kB) Installing collected packages: pygments, mdurl, markdown-it-py, rich Successfully installed markdown-it-py-2.2.0 mdurl-0.1.2 pygments-2.15.0 rich-13.3.4
और फिर हम नए रिपॉजिटरी पर नए आर्टिफैक्ट्स देखकर पुष्टि कर सकते हैं कि कैश वास्तव में उपयोग किया गया था:
PyPi आर्टिफैक्ट्स देखें
आइए क्लाइंट का डेमो देखें, कुछ और इंस्टॉल करते हुए:
REST-API का उपयोग करके आगे अनुकूलन
प्रत्येक Nexus इंस्टॉलेशन आपको एक JSON फ़ाइल डाउनलोड करने की अनुमति देता है जो सर्वर द्वारा समर्थित API का वर्णन करती है। उदाहरण के लिए, मेरे सर्वर में आप मेरे orangepi5.home सर्वर से इस तरह एक कॉपी प्राप्त कर सकते हैं:
curl --fail --remote-name https://orangepi5.home:8081/service/rest/swagger.json
साथ ही, UI आपको अपने इंस्टॉलेशन को अनुकूलित करने के लिए अन्य REST API एंडपॉइंट आज़माने की अनुमति देता है।
REST API टेस्टिंग
निष्कर्ष
मैं Nexus 3 बुक को पढ़ने में कुछ समय बिताने की सलाह देता हूं ताकि आप इस टूल द्वारा प्रदान की जा सकने वाली सुविधाओं से परिचित हो सकें।
समुदाय ने Debian और RPM इंस्टॉलर तैयार किए हैं, यदि आपको Ansible का उपयोग करने के विपरीत इस प्रकार के सेटअप की आवश्यकता है।
Nexus 3 के बहुत सारे कॉन्फिगरेबल सेटिंग्स हैं। हमने यहां केवल सतह को छुआ है। यह लेख तैयार करते समय मुझे 'ThoTeam Nexus3-oss रिपॉजिटरी' मिली जिसमें एक बहुत ही पूर्ण और अद्यतन प्लेबुक थी, लेकिन यह मेरे होम लैब के लिए आवश्यक किसी भी चीज़ से कहीं अधिक जटिल थी।
Archiva एक और ओपन सोर्स आर्टिफैक्ट मैनेजर है, यह कार्यक्षमता में अधिक सीमित है लेकिन सेटअप करने में भी सरल है।
पोस्ट-इंस्टॉलेशन चेकलिस्ट में कुछ कार्य हैं जिन्हें मुझे अपने होम लैब के लिए पूरा करने की आवश्यकता नहीं थी। कृपया यह सुनिश्चित करने के लिए इसे देखें कि आपका सेटअप पूरा है।
मुफ्त में कोड करना सीखें। freeCodeCamp का ओपन सोर्स पाठ्यक्रम 40,000 से अधिक लोगों को डेवलपर्स के रूप में नौकरी पाने में मदद कर चुका है। शुरू करें