<पी> नेक्सस 3 ओएसएस एक ओपन सोर्स आर्टिफैक्ट रिपॉजिटरी मैनेजर है जो कंटेनर इमेज, पायथन पीआईपी, जावा जार और कई अन्य जैसे कई प्रारूपों को संभाल सकता है। <पी> ऑन-प्रिमाइस आर्टिफैक्ट प्रबंधक क्यों है? इसके कई कारण हैं: - <पी> अपने निजी बुनियादी ढांचे का उपयोग करें:आपके पास मालिकाना कोड हो सकता है जिसे सुरक्षित रखने की आवश्यकता है।
- <पी> तेज आर्टिफैक्ट डाउनलोड गति:यदि आप इंटरनेट पर लगातार एक ही आर्टिफैक्ट डाउनलोड करते हैं, तो आप उन्हें कैश करके कई सर्वरों पर अपने कई उपयोगकर्ताओं के लाभ के लिए एक केंद्रीय स्थान पर कैश कर सकते हैं।
- <पी> नियंत्रित करें कि कौन सी कलाकृतियाँ आपकी निर्माण श्रृंखला में शामिल होती हैं:कलाकृतियों के स्थान को केंद्रीकृत करें, सुनिश्चित करें कि वे उपयोग के लिए स्वीकृत हैं, और यह भी पुष्टि करें कि उनमें दुर्भावनापूर्ण कोड नहीं है।
- <पी> अलग करें कि आपकी कलाकृतियों तक कौन पहुंच सकता है:आपके अपने संगठन के भीतर कुछ कलाकृतियों तक कौन पहुंच सकता है, इस पर आपकी अधिक सख्त आवश्यकताएं हो सकती हैं।
<पी> इस लेख में मैं आपको दिखाऊंगा कि आप Ansible प्लेबुक का उपयोग करके Nexus 3 के OSS संस्करण को कैसे डाउनलोड, इंस्टॉल और कॉन्फ़िगर कर सकते हैं। <पी> नेक्सस 3 8 जीबी या रैम वाले ऑरेंज पीआई 5 कंप्यूटर पर चलेगा, लेकिन यह प्रावधान न्यूनतम आवश्यकताओं के साथ किसी भी मशीन पर किया जा सकता है। सेटअप के एक भाग में मेरी इन्वेंट्री फ़ाइल पर सूचीबद्ध मशीनों के लिए PyPI.org के लिए एक प्रॉक्सी सेट करना शामिल होगा। आपको इस ट्यूटोरियल से कोड चलाने के लिए क्या चाहिए
- <पी> एन्सिबल प्लेबुक, नेक्सस और पीआईपी मॉड्यूल के लिए स्रोत कोड डाउनलोड करने के लिए एक इंटरनेट कनेक्शन
- <पी> कम से कम 8 जीबी रैम वाली दो या दो से अधिक लिनक्स मशीनें (मैंने डेबियन, आर्मबियन और फेडोरा आईओटी का उपयोग किया)। मेरे क्लस्टर में रास्पबेरी पीआई 4 और ऑरेंजपीआई 5 का मिश्रण है।
- <पी> Ansible नियंत्रक फेडोरा मशीन पर चलेगा, लेकिन कोई भी सर्वर नियंत्रक हो सकता है। 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
<पी> अब थोड़ा समझाते हुए: - <पी> दो भूमिकाएँ हैं:'नेक्सस' और 'क्लाइंट'। नेक्सस भूमिका का उपयोग आर्टिफैक्ट प्रबंधन सॉफ़्टवेयर को सेटअप करने के लिए किया जाता है, जबकि क्लाइंट भूमिका प्रत्येक मशीन पर पिप सेटिंग्स सेट करती है।
- <पी> वर्र्स में प्रत्येक भूमिका पर उपयोग किए जाने वाले वेरिएबल होते हैं, जिन्हें उनके उपयोग को अधिक स्पष्ट बनाने के लिए फ़ाइलों द्वारा अलग किया जाता है
- <पी> हमारे पास पासवर्ड हैं, और हमने उन्हें Ansible वॉल्ट सुविधा का उपयोग करके प्रबंधित किया है।
- <पी> फ़ाइल '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
<पी> आइए अब ब्रह्मांड को देखने के लिए आगे बढ़ें जहां प्लेबुक निष्पादित की जाएगी। मेजबान सूची
<पी> मेरे मामले में यह काफी सरल है - मेरे दो मुख्य समूह हैं:'क्लाइंट' और मशीन जहां नेक्सस 3 सर्वर स्वयं चलेगा: all:
children:
nexus_server:
hosts:
orangepi5.home:
home_lab:
hosts:
dmaf5.home:
raspberrypi.home:
orangepi5.home:
<पी> अगला महत्वपूर्ण कार्य Nexus 3 को डाउनलोड और कॉन्फ़िगर करना है। नेक्सस 3 कैसे स्थापित करें
<पी> फ़ाइल main.yaml नेक्सस भूमिका के लिए प्रत्येक इंस्टॉलेशन कार्य के क्रम और उद्देश्य का वर्णन करती है: # 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 स्थापित करते हैं (नेक्सस 3 जावा में लिखा गया है) और पुराने लॉग की देखभाल के लिए लॉगरोटेट करते हैं।
- <पी> pre_install.yaml:यहां बहुत कुछ होता है, जैसे नेक्सस के लिए आवश्यक निर्देशिका बनाना, समर्पित गैर-विशेषाधिकार प्राप्त उपयोगकर्ता जो प्रक्रिया चलाएगा।
- <पी> डाउनलोड.yaml:जैसा कि नाम से पता चलता है, हमें नेक्सस 3 ओएसएस सॉफ़्टवेयर का एक ताज़ा संस्करण मिलता है और सुनिश्चित करें कि इसमें सही चेकसम है। हम इंटरनेट से मैलवेयर इंस्टॉल नहीं करना चाहते।
<पी> इसके बाद वे कार्य आते हैं जो "अनुकूलित इंस्टॉलेशन समूह" में आते हैं: - <पी> install.yaml:सॉफ़्टवेयर को अनपैक करें, इसे स्वचालित रूप से प्रारंभ करने के लिए सिस्टम यूनिट तैयार करें, नेक्सस के लिए JVM सेटिंग्स सेटअप करें, और लॉगरोटेट कॉन्फ़िगरेशन को तैनात करें।
- <पी> 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
<पी> तर्क का पालन करना आसान है, 'PUT' http विधि का उपयोग करके आप बता सकते हैं कि यह एक संशोधन ऑपरेशन है (मतलब मौजूदा भूमिकाएं और उपयोगकर्ता पहले से मौजूद हैं)। नेक्सस द्वारा लौटाए गए HTTP कोड प्राप्त करके त्रुटि का पता लगाया जाता है। <पी> अगला कदम हमारी स्थानीय PyPi प्रॉक्सी तैयार करना है। यह एक बहु-चरणीय कार्य है और इसका वर्णन आगे विस्तार से किया जाएगा। नेक्सस 3 पर PyPI प्रॉक्सी कैसे सेट करें
<पी> Nexus 3 भूमिका पर अंतिम फ़ाइल 'repositories.yaml' है। यहां हम निम्नलिखित चरणों से गुजरते हैं: - <पी> जांचें कि क्या प्रॉक्सी पहले से ही सेटअप थी (प्राप्त करें या केवल पढ़ने के लिए ऑपरेशन)
- <पी> यदि यह मौजूद नहीं है, तो एक नया रिपॉजिटरी बनाएं (पूरी नई रिपॉजिटरी बनाने के लिए विवरण के साथ 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 लाइब्रेरीज़ प्राप्त करने के लिए अपने स्थानीय Nexus का उपयोग करना चाहिए, न कि सीधे PyPi साइट का। क्लाइंट कैसे सेट करें
<पी> ग्राहकों की भूमिका बहुत सरल है और हमारे नए भंडार पर खोज को बाध्य करने के लिए पर्याप्त जानकारी के साथ केवल 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 = http://orangepi5.home:8081/repository/python_proxy/pypi
index-url = http://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 प्रॉक्सी का परीक्षण कैसे करें
<पी> अपनी नई प्रॉक्सी का परीक्षण करने के लिए, हम पाइप और एक आभासी वातावरण का उपयोग करके पायथन रिच स्थापित करेंगे। josevnz@orangepi5:~$ python3 -m venv ~/virtualenv/rich
(rich) josevnz@orangepi5:~$ . ~/virtualenv/rich/bin/activate
(rich) josevnz@orangepi5:~$ pip install rich
Looking in indexes: http://orangepi5.home:8081/repository/python_proxy/simple/
Collecting rich
Downloading http://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 http://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 http://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 http://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 का उपयोग करके आगे अनुकूलन
<पी> प्रत्येक नेक्सस इंस्टॉलेशन आपको एक JSON फ़ाइल डाउनलोड करने की अनुमति देता है जो सर्वर द्वारा समर्थित एपीआई का वर्णन करता है। उदाहरण के लिए, मेरे सर्वर में आप मेरे Orangepi5.home सर्वर से इस तरह की एक प्रति प्राप्त कर सकते हैं: curl --fail --remote-name http://orangepi5.home:8081/service/rest/swagger.json
<पी> साथ ही, यूआई आपको अपने इंस्टॉलेशन को अनुकूलित करने के लिए अन्य REST API एंडपॉइंट्स को आज़माने की अनुमति देता है। <पी>
<पी> REST API परीक्षण पी> निष्कर्ष
<पी> मेरा सुझाव है कि आप कुछ समय व्यतीत करें और Nexus 3 पुस्तक पढ़ें ताकि आप इस टूल द्वारा प्रदान की जा सकने वाली सुविधाओं से परिचित हो सकें। <पी> यदि आपको Ansible का उपयोग करने के बजाय इस प्रकार के सेटअप की आवश्यकता है, तो समुदाय ने डेबियन और RPM इंस्टॉलर तैयार किए हैं। <पी> Nexus 3 में बहुत कुछ है कॉन्फ़िगर करने योग्य सेटिंग्स का। हमने यहां केवल सतह को कवर किया है। इस लेख को तैयार करते समय मुझे एक बहुत ही संपूर्ण और अद्यतित प्लेबुक के साथ 'थोटीम नेक्सस3-ओएसएस रिपॉजिटरी' मिली, लेकिन यह मेरी होम लैब के लिए आवश्यक किसी भी चीज़ से कहीं अधिक जटिल थी। <पी> आर्किवा एक अन्य ओपन सोर्स आर्टिफैक्ट मैनेजर है, यह कार्यक्षमता में अधिक सीमित है लेकिन सेटअप करने में भी आसान है। <पी> कुछ कार्यों के साथ एक पोस्ट-इंस्टॉलेशन चेकलिस्ट है जिसे मुझे अपने होम लैब के लिए पूरा करने की आवश्यकता नहीं थी। यह सुनिश्चित करने के लिए कृपया इसे जांचें कि आपका सेटअप पूरा हो गया है। <पी> मुफ़्त में कोड करना सीखें. फ्रीकोडकैंप के ओपन सोर्स पाठ्यक्रम ने 40,000 से अधिक लोगों को डेवलपर्स के रूप में नौकरी पाने में मदद की है। आरंभ करें