Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Mac

ปรับใช้ Nexus 3 OSS บน Orange Pi 5 โดยใช้ Ansible:คำแนะนำทีละขั้นตอน

ปรับใช้ Nexus 3 OSS บน Orange Pi 5 โดยใช้ Ansible:คำแนะนำทีละขั้นตอน

Nexus 3 OSS เป็นตัวจัดการพื้นที่เก็บข้อมูลอาร์ติแฟกต์โอเพนซอร์สที่สามารถรองรับได้หลายรูปแบบ เช่น อิมเมจคอนเทนเนอร์, Python PIP, Java Jar และอื่นๆ อีกมากมาย

เหตุใดจึงต้องมีผู้จัดการอาร์ติแฟกต์ภายในองค์กร มีเหตุผลหลายประการ:

  • ใช้โครงสร้างพื้นฐานส่วนตัวของคุณ:คุณอาจมีรหัสที่เป็นกรรมสิทธิ์ซึ่งจำเป็นต้องได้รับการปกป้อง

  • ความเร็วในการดาวน์โหลดอาร์ติแฟกต์ที่เร็วขึ้น:หากคุณดาวน์โหลดอาร์ติแฟกต์เดียวกันทางอินเทอร์เน็ตอยู่ตลอดเวลา คุณสามารถแคชสิ่งเหล่านั้นไว้ที่ตำแหน่งศูนย์กลาง เพื่อประโยชน์ของผู้ใช้หลายรายในเซิร์ฟเวอร์หลายเครื่องด้วยการแคชสิ่งเหล่านั้น

  • ควบคุมสิ่งที่สร้างให้กับห่วงโซ่การสร้างของคุณ:รวมตำแหน่งของสิ่งประดิษฐ์ไว้ที่ศูนย์กลาง ตรวจสอบให้แน่ใจว่าได้รับการอนุมัติสำหรับการใช้งาน และยืนยันด้วยว่าไม่มีโค้ดที่เป็นอันตราย

  • แยกผู้ที่สามารถเข้าถึงอาร์ติแฟกต์ของคุณได้:คุณอาจมีข้อกำหนดที่เข้มงวดมากขึ้นว่าใครสามารถเข้าถึงอาร์ติแฟกต์บางอย่างภายในองค์กรของคุณได้

ในบทความนี้ ฉันจะแสดงให้คุณเห็นว่าคุณสามารถดาวน์โหลด ติดตั้ง และกำหนดค่า Nexus 3 เวอร์ชัน OSS โดยใช้ Playbook Ansible ได้อย่างไร

Nexus 3 จะทำงานบนคอมพิวเตอร์ Orange PI 5 ที่มี 8 GB หรือ RAM แต่การจัดเตรียมนี้สามารถทำได้ในเครื่องทุกเครื่องที่มีข้อกำหนดขั้นต่ำ ส่วนหนึ่งของการตั้งค่าจะประกอบด้วยการตั้งค่าพร็อกซีสำหรับ PyPI.org สำหรับเครื่องที่อยู่ในรายการไฟล์สินค้าคงคลังของฉัน

สิ่งที่คุณต้องมีเพื่อเรียกใช้โค้ดจากบทช่วยสอนนี้

  1. การเชื่อมต่ออินเทอร์เน็ตเพื่อดาวน์โหลดซอร์สโค้ดสำหรับ Ansible Playbook, Nexus และโมดูล PIP

  2. เครื่อง Linux สองเครื่องขึ้นไป (ฉันใช้ Debian, Armbian และ Fedora IOT) พร้อม RAM อย่างน้อย 8 GB คลัสเตอร์ของฉันมีส่วนผสมของ Raspberry PI 4 และ OrangePI 5

  3. คอนโทรลเลอร์ Ansible จะทำงานบนเครื่อง Fedora แต่เซิร์ฟเวอร์ใด ๆ ก็สามารถเป็นคอนโทรลเลอร์ได้ คำแนะนำในการติดตั้งสำหรับ Ansible นั้นง่ายต่อการปฏิบัติตาม

องค์กรเพลย์บุ๊ก

ฉันแบ่งงานออกเป็นกลุ่มและ Playbook ที่ได้จะมีลักษณะดังนี้:

[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' และ 'ลูกค้า' บทบาท 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

ตอนนี้เรามาดูจักรวาลที่ Playbook จะถูกดำเนินการกัน

สินค้าคงคลังของโฮสต์

ในกรณีของฉัน มันค่อนข้างง่าย – ฉันมีสองกลุ่มหลัก:'ไคลเอนต์' และเครื่องที่เซิร์ฟเวอร์ 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

มาดูกันก่อนว่าฉันชอบเรียกว่า "งานหลัก" อะไร:

  1. Third_party.yaml:ในที่นี่ เราติดตั้ง OpenJDK8 (Nexus 3 เขียนด้วยภาษา Java) และล็อกการหมุนเพื่อดูแลบันทึกเก่า

  2. pre_install.yaml:มีสิ่งต่างๆ มากมายเกิดขึ้นที่นี่ เช่น การสร้างไดเร็กทอรีที่จำเป็นสำหรับ Nexus ซึ่งเป็นผู้ใช้เฉพาะที่ไม่มีสิทธิพิเศษที่จะเรียกใช้กระบวนการ

  3. download.yaml:ตามชื่อเลย เราได้รับซอฟต์แวร์ Nexus 3 OSS เวอร์ชันใหม่และตรวจสอบให้แน่ใจว่ามีการตรวจสอบความถูกต้อง เราไม่ต้องการติดตั้งมัลแวร์จากอินเทอร์เน็ต

จากนั้นงานที่จัดอยู่ใน “กลุ่มการติดตั้งแบบกำหนดเอง”:

  1. install.yaml:แกะซอฟต์แวร์ เตรียมหน่วย systemd เพื่อเริ่มทำงานโดยอัตโนมัติ ตั้งค่าการตั้งค่า JVM สำหรับ Nexus และปรับใช้การกำหนดค่า logrotate

  2. post_install.yaml:สิ่งที่น่าตื่นเต้นเกิดขึ้นที่นี่ – ซอฟต์แวร์ได้รับการติดตั้งและเราเปิดใช้งานเป็นครั้งแรก นอกจากนี้เรายังเปลี่ยนรหัสผ่านเริ่มต้นโดยใช้ REST API เพื่อให้เราสามารถย้ายไปยังขั้นตอนการปรับแต่งได้

  3. 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' คุณสามารถบอกได้ว่าเป็นการดำเนินการแก้ไข (หมายถึงบทบาทและผู้ใช้ที่มีอยู่แล้ว) การตรวจจับข้อผิดพลาดทำได้โดยการรับรหัส HTTP ที่ส่งคืนโดย Nexus

ขั้นตอนต่อไปคือการเตรียมพร็อกซี PyPi ในเครื่องของเรา นี่เป็นงานหลายขั้นตอนและจะมีการอธิบายรายละเอียดต่อไป

วิธีการตั้งค่าพร็อกซี PyPI บน Nexus 3

ไฟล์สุดท้ายในบทบาท Nexus 3 คือ 'repositories.yaml' ในที่นี้เราจะทำตามขั้นตอนต่อไปนี้:

  1. ตรวจสอบว่าพร็อกซีได้รับการตั้งค่าแล้ว (GET หรือการดำเนินการอ่านอย่างเดียว)

  2. หากไม่มี ให้สร้างใหม่ (วิธี POST พร้อมเพย์โหลด JSON พร้อมรายละเอียดเพื่อสร้างพื้นที่เก็บข้อมูลใหม่ทั้งหมด)

ข้อสังเกตกว่า Playbook นี้ไม่มีตัวเลือกในการอัปเดตการตั้งค่าพื้นที่เก็บข้อมูล คุณสามารถใช้ 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 ทราบว่าควรใช้ Nexus ในพื้นที่ของเรา ไม่ใช่ไซต์ PyPi โดยตรงเพื่อรับไลบรารี Python ของเรา

วิธีการตั้งค่าลูกค้า

บทบาทของลูกค้านั้นง่ายกว่ามากและต้องการเพียงปรับใช้เทมเพลตสำหรับ 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 ที่ได้รับการแก้ไข)

ถึงเวลาแล้วที่จะเรียกใช้ Playbook ทั้งหมดและดูว่าจะมีหน้าตาเป็นอย่างไร

วิธีเรียกใช้ Playbook

ในการเรียกใช้ Playbook เราต้องผ่านข้อโต้แย้งบางประการ:

  1. ตำแหน่งของสินค้าคงคลังโฮสต์ของเรา

  2. ตำแหน่งของไฟล์รหัสผ่านที่เข้ารหัสและไฟล์หลักที่มีรหัสผ่านหลักเพื่อปลดล็อคเนื้อหาของไฟล์ที่ได้รับการป้องกัน

  3. และสุดท้ายคือตำแหน่งของไฟล์ Playbook หลักของเรา

cd ansible
ansible-playbook --inventory inventories --extra-vars @vault/nexus_password.enc --vault-password-file $HOME/vault/ansible_vault_pass site.yaml

ปรับใช้ Nexus 3 OSS บน Orange Pi 5 โดยใช้ Ansible:คำแนะนำทีละขั้นตอน

วิธีทดสอบพร็อกซี PyPI ใหม่

เพื่อทดสอบพร็อกซีใหม่ของเรา เราจะติดตั้ง Python Rich โดยใช้ pip และสภาพแวดล้อมเสมือน

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

จากนั้นเราสามารถยืนยันได้ว่าแคชนั้นถูกใช้จริง ๆ โดยการดูสิ่งประดิษฐ์ใหม่บนที่เก็บใหม่:

ปรับใช้ Nexus 3 OSS บน Orange Pi 5 โดยใช้ Ansible:คำแนะนำทีละขั้นตอน

ดูสิ่งประดิษฐ์ PyPi

มาดูการสาธิตการทำงานของไคลเอนต์ โดยติดตั้งอย่างอื่น:

ปรับใช้ Nexus 3 OSS บน Orange Pi 5 โดยใช้ Ansible:คำแนะนำทีละขั้นตอน

การปรับแต่งเพิ่มเติมโดยใช้ REST-API

การติดตั้ง Nexus ทุกครั้งทำให้คุณสามารถดาวน์โหลดไฟล์ JSON ที่อธิบาย API ที่เซิร์ฟเวอร์รองรับได้ ตัวอย่างเช่น ในเซิร์ฟเวอร์ของฉัน คุณสามารถรับสำเนาเช่นนี้จากเซิร์ฟเวอร์ orangepi5.home ของฉัน:

curl --fail --remote-name http://orangepi5.home:8081/service/rest/swagger.json

นอกจากนี้ UI ยังช่วยให้คุณลองใช้ตำแหน่งข้อมูล REST API อื่นๆ เพื่อปรับแต่งการติดตั้งของคุณได้

ปรับใช้ Nexus 3 OSS บน Orange Pi 5 โดยใช้ Ansible:คำแนะนำทีละขั้นตอน

การทดสอบ REST API

บทสรุป

ฉันขอแนะนำให้ใช้เวลาอ่านหนังสือ Nexus 3 เพื่อทำความคุ้นเคยกับคุณลักษณะที่เครื่องมือนี้มีให้

ชุมชนได้เตรียมตัวติดตั้ง Debian และ RPM หากคุณต้องการการตั้งค่าประเภทนี้แทนที่จะใช้ Ansible

Nexus 3 มีมากมาย ของการตั้งค่าที่กำหนดค่าได้ เราครอบคลุมเฉพาะพื้นผิวที่นี่ ขณะเตรียมบทความนี้ ฉันพบ 'พื้นที่เก็บข้อมูล ThoTeam Nexus3-oss' พร้อมด้วย Playbook ที่สมบูรณ์และทันสมัย แต่มันซับซ้อนกว่าสิ่งอื่นใดที่ฉันต้องการสำหรับห้องปฏิบัติการที่บ้านของฉันมาก

Archiva เป็นอีกหนึ่งผู้จัดการสิ่งประดิษฐ์โอเพ่นซอร์ส ซึ่งมีข้อจำกัดในด้านฟังก์ชันการทำงานมากกว่า แต่ยังตั้งค่าได้ง่ายกว่า

มีรายการตรวจสอบหลังการติดตั้งซึ่งมีงานบางอย่างที่ฉันไม่จำเป็นต้องทำให้เสร็จสำหรับโฮมแล็บของฉัน โปรดตรวจสอบเพื่อให้แน่ใจว่าการตั้งค่าของคุณเสร็จสมบูรณ์

เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น