ทำให้แพ็คเกจส่วนตัวของคุณสามารถเข้าถึงได้ในที่เดียว
ด้วยดัชนี PYPI ที่เป็นโฮสต์
คำอธิบาย•ลอง! •เริ่มต้นใช้งาน•แก้ไขแพ็คเกจที่จัดทำดัชนี•คำถามที่พบบ่อย•คำเกี่ยวกับการโจมตีห่วงโซ่อุปทาน•มีส่วนร่วม•การอ้างอิง
ที่เก็บนี้เป็นหน้า GitHub ที่ใช้เป็นดัชนี PYPI ซึ่งสอดคล้องกับ PEP503
คุณสามารถใช้มันเพื่อจัดกลุ่มแพ็คเกจทั้งหมดของคุณในที่เดียวและเข้าถึงได้อย่างง่ายดายผ่าน pip เกือบจะเหมือนกับแพ็คเกจอื่น ๆ ที่เปิดเผยต่อสาธารณะ!
ในขณะที่ดัชนี PYPI เป็นแบบสาธารณะแพ็คเกจส่วนตัวที่จัดทำดัชนีที่นี่จะถูกเก็บไว้เป็นส่วนตัว: คุณจะต้องมีการตรวจสอบความถูกต้องของ GitHub เพื่อให้สามารถดึงข้อมูลได้
เยี่ยมชม astariul.github.io/github-hosted-pypi/ และพยายามติดตั้งแพ็คเกจที่จัดทำดัชนีที่นั่น!
ลองติดตั้งแพ็คเกจ public-hello :
pip install public-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/ นอกจากนี้ยังจะติดตั้งแพ็คเกจ mydependency โดยอัตโนมัติ!
ลองด้วย:
from public_hello import hi
print ( hi ())นอกจากนี้คุณยังสามารถติดตั้งเวอร์ชันเฉพาะ:
pip install public-hello==0.1 --extra-index-url https://astariul.github.io/github-hosted-pypi/ ตอนนี้พยายามติดตั้งแพ็คเกจ private-hello :
pip install private-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/มันจะไม่ทำงานเพราะมันเป็นส่วนตัวและมีเพียงฉันเท่านั้นที่สามารถเข้าถึงได้!
Settings ที่เก็บของคุณและเปิดใช้งานหน้า GitHubindex.html และ pkg_template.html ตามความชอบของคุณ<user>.github.io/<repo_name> เพื่อดูดัชนี PYPI ของคุณ ตอนนี้ดัชนี PYPI ของคุณคือการตั้งค่าคุณสามารถลงทะเบียน / อัปเดต / ลบแพ็คเกจแพ็คเกจที่จัดทำดัชนี
การกระทำของ GitHub ถูกตั้งค่าให้ทำเพื่อคุณโดยอัตโนมัติ
คุณเพียงแค่ต้อง:
Actions ของที่เก็บของคุณregister / update / delete ) และทริกเกอร์ด้วยตนเอง อย่างที่คุณทราบ pip สามารถติดตั้งแพ็คเกจ GitHub-hosted ได้หากได้รับในรูปแบบ pip install git+<repo_link> ดัชนี PYPI นี้เป็นเพียงดัชนีของลิงก์ไปยังที่เก็บ GitHub อื่น ๆ
หน้า GitHub เป็นสาธารณะดังนั้นดัชนี PYPI นี้จึงเป็นสาธารณะ แต่มันก็มีลิงก์ไปยังที่เก็บ GitHub อื่น ๆ ไม่มีรหัสโฮสต์บนดัชนี PYPI นี้!
หากรหัสโฮสติ้งที่เก็บเป็นส่วนตัวคุณจะต้องตรวจสอบสิทธิ์กับ GitHub เพื่อให้สามารถโคลนได้อย่างมีประสิทธิภาพทำให้เป็นส่วนตัว
หากคุณสงสัยโดยเฉพาะเกี่ยวกับการโจมตีห่วงโซ่อุปทานให้ตรวจสอบส่วนเกี่ยวกับเรื่องนี้!
เมื่อเรียกใช้ pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/ ต่อไปนี้เกิดขึ้น:
pip จะดูที่ https://pypi.org/ , ดัชนีสาธารณะเริ่มต้น, พยายามค้นหาแพ็คเกจที่มีชื่อที่ระบุhttps://astariul.github.io/github-hosted-pypi/pip ( git+<repo_link>@<tag> )pip เข้าใจว่าเป็นที่เก็บ GitHub และจะโคลนพื้นที่เก็บข้อมูล (ที่แท็กเฉพาะ) ในพื้นที่pip ติดตั้งแพ็คเกจpip ติดตั้งการพึ่งพาที่ขาดหายไปด้วยขั้นตอนเดียวกันการรับรองความถูกต้องเกิดขึ้นในขั้นตอนที่ 4 เมื่อโคลนพื้นที่เก็บข้อมูล
แนวทางปฏิบัติที่ดีที่สุดเพียงอย่างเดียวคือการใช้ GitHub สิ่งนี้อนุญาตให้แพ็คเกจของคุณมีเวอร์ชันที่เรียกโดยแท็กเฉพาะ
ในการทำเช่นนี้:
pip install git+<repo_link>@<tag>git+<repo_link>@<tag> ) คุณสามารถระบุชื่ออื่นสำหรับแพ็คเกจที่จัดทำดัชนีของคุณ เพียงแค่ให้ชื่อที่แตกต่างกันในแบบฟอร์มเมื่อลงทะเบียน
ตัวอย่างเช่นหากคุณมีแพ็คเกจส่วนตัวที่ชื่อว่า tensorflow เมื่อคุณลงทะเบียนในดัชนีนี้คุณสามารถตั้งชื่อมันได้ my_cool_tensorflow ดังนั้นจึงไม่มีการชนชื่อกับแพ็คเกจสาธารณะ tensorflow
จากนั้นคุณสามารถติดตั้งด้วย pip install my_cool_tensorflow --extra-index-url https://astariul.github.io/github-hosted-pypi/
จากนั้นจาก python คุณสามารถทำได้:
import tensorflowแต่ระวังเรื่องนี้! ในขณะที่เป็นไปได้ที่จะจัดการกับสิ่งนี้ แต่ก็ควรมีชื่อที่ไม่ซ้ำกันสำหรับแพ็คเกจของคุณเพื่อหลีกเลี่ยงความสับสน แต่เพื่อความปลอดภัย!
การสร้างอิมเมจนักเทียบท่าไม่ได้มีการโต้ตอบดังนั้นจึงไม่มีการแจ้งชื่อผู้ใช้และรหัสผ่าน
แต่คุณควรใส่ข้อมูลรับรอง GitHub ของคุณในไฟล์ .netrc ดังนั้น pip สามารถตรวจสอบสิทธิ์เมื่อโคลนจาก GitHub
ในการทำสิ่งนี้อย่างปลอดภัยบน Docker คุณควรใช้ความลับของนักเทียบท่า นี่คือการสอนอย่างรวดเร็วเกี่ยวกับวิธีการทำ:
ขั้นตอนที่ 1 : บันทึกข้อมูลประจำตัวของคุณในไฟล์ลับ ทำตามตัวอย่างนี้:
machine github.com
login <gh_user>
password <gh_pass>
n
ระวังถ้าคุณใช้ IDE ที่แทนที่แท็บตามช่องว่างหรือถ้าคุณอยู่ใน Windows (ที่สิ้นสุดบรรทัดคือ rn )!
มาตั้งชื่อไฟล์นี้ gh_auth.txt
ขั้นตอนที่ 2 : สร้างไฟล์ Docker ของคุณ ในไฟล์ Docker คุณควรติดตั้งไฟล์ลับใน .netrc และเรียกใช้คำสั่งที่คุณต้องการการรับรองความถูกต้อง ตัวอย่างเช่น :
# syntax=docker/dockerfile:experimental
FROM python:3
RUN --mount=type=secret,id=gh_auth,dst=/root/.netrc pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/ขั้นตอนที่ 3 : สร้างอิมเมจนักเทียบท่าของคุณระบุตำแหน่งของความลับที่สร้างขึ้นในขั้นตอนที่ 1:
sudo DOCKER_BUILDKIT=1 docker build --secret id=gh_auth,src=./gh_auth.txt .
หากคุณมีคำถามหรือแนวคิดใด ๆ ในการปรับปรุงคำถามที่พบบ่อยนี้โปรดเปิดปัญหา PR / เปล่า!
อย่างที่คุณเห็นก่อนหน้านี้ดัชนี PYPI ที่โฮสต์ GitHub นี้ขึ้นอยู่กับคุณสมบัติ pip --extra-index-url เนื่องจากคุณลักษณะนี้ทำงานอย่างไรจึงมีความเสี่ยงที่จะโจมตีห่วงโซ่อุปทาน
ตัวอย่างเช่นสมมติว่าคุณมีแพ็คเกจชื่อ fbi_package เวอร์ชัน 2.8.3 โฮสต์บนดัชนี PYPI ส่วนตัวของคุณ
ผู้โจมตีสามารถสร้างแพ็คเกจที่เป็นอันตรายด้วยชื่อเดียวกันและเวอร์ชันที่สูงกว่า (เช่น 99.0.0 )
เมื่อคุณเรียก pip install fbi_package --extra-index-url my_pypi_index.com ภายใต้ฮูด pip จะดาวน์โหลดแพ็คเกจเวอร์ชันล่าสุดซึ่งเป็นแพ็คเกจที่เป็นอันตราย!
ในขณะที่ที่เก็บนี้ทำให้สะดวกมากที่จะมีดัชนี PYPI ของคุณเองโปรดทราบว่าหน้านั้นเป็นสาธารณะดังนั้นทุกคนสามารถดูชื่อแพ็คเกจที่คุณใช้และสร้างแพ็คเกจที่เป็นอันตรายด้วยชื่อเดียวกันนี้ ...
นั่นเป็นเหตุผลที่เรารวมการตรวจสอบอัตโนมัติในดัชนี PYPI ส่วนตัวนี้ เมื่อใดก็ตามที่คุณเข้าถึงหน้าแพ็คเกจของคุณ PYPI API จะถูกเรียกและหากพบแพ็คเกจที่มีชื่อเดียวกันและพบเวอร์ชันที่สูงกว่าคำสั่งการติดตั้งจะถูกแทนที่ด้วยคำเตือน
คุณสามารถดูการสาธิตคำเตือนดังกล่าวได้ที่ https://astariul.github.io/github-hosted-pypi/transformers/
หากคุณเห็นคำเตือนนี้อย่าติดตั้งแพ็คเกจ! เปลี่ยนชื่อแพ็คเกจของคุณหรืออัปเกรดเวอร์ชันเหนือคู่สาธารณะแทน
ระวังที่นั่น!
ปัญหาและการประชาสัมพันธ์ยินดีต้อนรับ!
หากคุณเจออะไรแปลก ๆ / สามารถปรับปรุงได้โปรดติดต่อ!
นี่เป็นแรงบันดาลใจอย่างมากจากที่เก็บนี้
มันเป็นเพียงเวอร์ชันที่ได้รับการยกย่องด้วยหน้าสะอาดและการกระทำของ GitHub เพื่อเพิ่มอัปเดตและลบแพ็คเกจออกจากดัชนีของคุณได้อย่างง่ายดาย
ตรวจสอบบล็อกโพสต์ของผู้เขียนต้นฉบับด้วย!
ไอคอนที่ใช้ในหน้านี้ทำโดย freepik จาก flaticon