पैकेज रिपॉजिटरी के लिए सबसे अच्छा अभ्यास


16

मेरे कॉर्पोरेट नेटवर्क में मेरे पास CentOS सर्वरों का एक संग्रह है। सुरक्षा कारणों से, अधिकांश सर्वरों में सामान्य आउटबाउंड इंटरनेट का उपयोग नहीं होता है जब तक कि यह सर्वर के लिए एक मुख्य कार्यात्मक आवश्यकता नहीं है।

यह एक चुनौती है जब मुझे संकुल को अद्यतन करने की आवश्यकता होती है। यम रिपॉजिटरी के लिए, मैं वर्तमान में इंटरनेट से सभी आवश्यक रिपॉज मिरर करता हूं, और इंट्रानेट के अंदर दर्पण उपलब्ध करता हूं। मैं अपने प्रत्येक पाँच परिवेशों में प्रत्येक रेपो की प्रतियां रखता हूं: देव, क्यूए, स्टेजिंग और दो प्रोडक्शन डाटासेंटर।

मैं वर्तमान में भाषा-विशिष्ट पैकेज प्रतिनिधि के लिए हल नहीं करता हूं। जब सर्वर को रूबीज, PyPI, PECL, CPAN या npm से अपडेट की आवश्यकता होती है, तो उन्हें पैकेज लाने के लिए अस्थायी आउटबाउंड इंटरनेट का उपयोग करना पड़ता है। मुझे माणिक और PyPI को मिरर करना शुरू करने के लिए कहा गया है, और बाकी लोग शायद इसका पालन करेंगे।

यह सब क्लंकी है और अच्छी तरह से काम नहीं करता है। मैं इसे एक कैशिंग प्रॉक्सी के साथ एक वातावरण में और चार डेज़ी-जंजीर परदे के पीछे अपने अन्य वातावरणों में, पूर्ण दर्पणों की जटिलता और डिस्क ओवरहेड को खत्म करने के लिए बदलना चाहूंगा। इसके अतिरिक्त:

  • यह या तो आगे या रिवर्स प्रॉक्सी हो सकता है; प्रत्येक पैकेज प्रबंधक एक प्रॉक्सी सर्वर या एक कस्टम रिपॉजिटरी एंडपॉइंट का समर्थन करता है, जो स्थानीय दर्पण या रिवर्स प्रॉक्सी हो सकता है।
  • इसे बारीक अभिगम नियंत्रण की आवश्यकता है, इसलिए मैं यह निर्दिष्ट कर सकता हूं कि कौन से ग्राहक आईपी किस डोमेन से जुड़ सकते हैं।
  • ग्राहकों को अज्ञात डोमेन पर पुनर्निर्देशित करने में सक्षम होना चाहिए। आपका मूल अनुरोध rubygems.org तक सीमित हो सकता है, लेकिन यदि वह सर्वर 302 रैंडम सीडीएन पर लौटाता है, तो आपको इसका पालन करने में सक्षम होना चाहिए।
  • इसे HTTPS बैकएंड का समर्थन करना चाहिए। मुझे आवश्यक रूप से अन्य एसएसएल सर्वरों को लगाने की आवश्यकता नहीं है, लेकिन मुझे एचटीटीपीएस साइट को HTTP पर फिर से उजागर करने में सक्षम होना चाहिए, या एक अलग प्रमाण पत्र के साथ समाप्त और पुनः एन्क्रिप्ट करना चाहिए।

मैं शुरू में रिवर्स प्रॉक्सी को देख रहा था, और वार्निश एकमात्र ऐसा प्रतीत होता है जो मुझे प्रॉक्सी के भीतर 302 रीडायरेक्ट को आंतरिक रूप से हल करने की अनुमति देगा। हालांकि, वार्निश का मुफ्त संस्करण HTTPS बैकेंड का समर्थन नहीं करता है। मैं अब एक आगे प्रॉक्सी विकल्प के रूप में स्क्विड का मूल्यांकन कर रहा हूं।

यह ऐसा कुछ प्रतीत होता है जो उद्यम नेटवर्क के भीतर एक अपेक्षाकृत आम समस्या होनी चाहिए, लेकिन मुझे यह समझने में परेशानी हो रही है कि अन्य लोगों ने इसे कैसे हल किया है। क्या किसी ने कुछ समान लागू किया है या ऐसा करने के लिए सबसे अच्छा विचार है?

धन्यवाद!

जवाबों:


5

हम इसके लिए स्क्विड का उपयोग करते हैं; व्यंग्य के बारे में अच्छी बात यह है कि आप एक पैटर्न मैच के आधार पर वस्तुओं की व्यक्तिगत समाप्ति को काफी आसानी से सेट कर सकते हैं, जो यम रेपो से मेटाडेटा को काफी जल्दी शुद्ध करने की अनुमति देता है। हमारे पास जो विन्यास है वह इसे लागू करता है:

refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern (\.xml|xml\.gz)$      0       20%     2880
refresh_pattern ((sqlite.bz2)*)$      0       20%     2880
refresh_pattern (\.deb|\.udeb)$   1296000 100% 1296000
refresh_pattern (\.rpm|\.srpm)$   1296000 100% 1296000
refresh_pattern .        0    20%    4320

http://www.squid-cache.org/Doc/config/refresh_pattern/


5

यह एक प्रॉक्सी के लिए एक निश्चित उपयोग मामला है । एक सामान्य प्रॉक्सी, रिवर्स-प्रॉक्सी (उर्फ लोड बैलेंसर्स) नहीं।

सबसे प्रसिद्ध और मुक्त और मुक्त स्रोत विद्रूप है । सौभाग्य से यह कुछ अच्छे ओपन-सोर्स सॉफ्टवेयरों में से एक है जिसे आसानी से सिंगल के साथ इंस्टॉल किया जा सकता है apt-get install squid3और सिंगल फाइल के साथ कॉन्फ़िगर किया जा सकता है /etc/squid3/squid.conf

हम अच्छी प्रथाओं और सबक के बारे में जानते हैं।

आधिकारिक कॉन्फ़िगरेशन फ़ाइल थोड़ा संशोधित (5000 बेकार टिप्पणी लाइनों को हटा दिया गया था)।

#       WELCOME TO SQUID 3.4.8
#       ----------------------------
#
#       This is the documentation for the Squid configuration file.
#       This documentation can also be found online at:
#               http://www.squid-cache.org/Doc/config/
#
#       You may wish to look at the Squid home page and wiki for the
#       FAQ and other documentation:
#               http://www.squid-cache.org/
#               http://wiki.squid-cache.org/SquidFaq
#               http://wiki.squid-cache.org/ConfigExamples
#

###########################################################
# ACL
###########################################################

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 1025-65535  # unregistered ports

acl CONNECT method CONNECT

#####################################################
# Recommended minimum Access Permission configuration
#####################################################
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

#####################################################
# ACL
#####################################################

# access is limited to our subnets
acl mycompany_net   src 10.0.0.0/8

# access is limited to whitelisted domains
# ".example.com" includes all subdomains of example.com
acl repo_domain dstdomain .keyserver.ubuntu.com
acl repo_domain dstdomain .debian.org
acl repo_domain dstdomain .python.org

# clients come from a known subnet AND go to a known domain
http_access allow repo_domain mycompany_net

# And finally deny all other access to this proxy
http_access deny all

#####################################################
# Other
#####################################################

# default proxy port is 3128
http_port 0.0.0.0:3128

# don't forward internal private IP addresses
forwarded_for off

# disable ALL caching
# bandwidth is cheap. debugging cache related bugs is expensive.
cache deny all

# logs
# Note: not sure if squid configures logrotate or not
access_log daemon:/var/log/squid3/access.log squid
access_log syslog:squid.INFO squid


# leave coredumps in the first cache dir
coredump_dir /var/spool/squid3

# force immediaty expiry of items in the cache.
# caching is disabled. This setting is set as an additional precaution.
refresh_pattern .               0       0%      0

क्लाइंट कॉन्फ़िगरेशन - पर्यावरण चर

सभी सिस्टम पर इन दो पर्यावरण चर को कॉन्फ़िगर करें।

http_proxy=squid.internal.mycompany.com:3128
https_proxy=squid.internal.mycompany.com:3128

अधिकांश http क्लाइंट लाइब्रेरी (libcurl, httpclient, ...) पर्यावरण चर का उपयोग करके स्वयं को कॉन्फ़िगर कर रहे हैं। अधिकांश एप्लिकेशन आम पुस्तकालयों में से एक का उपयोग कर रहे हैं और इस प्रकार आउट-ऑफ-द-बॉक्स का समर्थन करते हैं (देव के बिना जरूरी नहीं कि यह जानते हुए)।

ध्यान दें कि वाक्य रचना सख्त है:

  1. चर नाम http_proxyअधिकांश लिनक्स पर होना चाहिए।
  2. वैरिएबल वैल्यू MUST के साथ शुरू नहीं होता http(s)://(प्रॉक्सिंग प्रोटोकॉल http (s) नहीं है)।

क्लाइंट कॉन्फ़िगरेशन - विशिष्ट

कुछ अनुप्रयोग पर्यावरण चर को अनदेखा कर रहे हैं और / या चलाई जा रही हैं इससे पहले कि सेवा को चर के रूप में स्थापित किया जा सके (जैसे डेबियन apt)।

इन अनुप्रयोगों के लिए विशेष कॉन्फ़िगरेशन (जैसे /etc/apt.conf) की आवश्यकता होगी ।

HTTPS प्रॉक्सी - कनेक्ट करें

HTTPS proxying पूरी तरह से डिजाइन द्वारा समर्थित है। यह एक विशेष "कनेक्ट" विधि का उपयोग करता है जो ब्राउज़र और प्रॉक्सी के बीच किसी प्रकार की सुरंग स्थापित करता है।

उस बात के बारे में बहुत कुछ पता नहीं है, लेकिन मैं इसके साथ वर्षों में कभी नहीं था। यह सिर्फ काम करता है।

HTTPS विशेष मामला - पारदर्शी प्रॉक्सी

पारदर्शी प्रॉक्सी पर एक नोट। (यानी प्रॉक्सी छिपा हुआ है और यह ग्राहकों के अनुरोधों को स्वीकार करता है। मानव-में-मध्य)।

पारदर्शी परदे के पीछे HTTPS तोड़ रहे हैं। क्लाइंट को पता नहीं है कि एक प्रॉक्सी है और विशेष कनेक्ट विधि का उपयोग करने का कोई कारण नहीं है।

क्लाइंट एक सीधा HTTPS कनेक्शन की कोशिश करता है ... जो इंटरसेप्टेड है। अवरोधन का पता लगाया जाता है और त्रुटियों को सभी जगह फेंक दिया जाता है। (HTTPS का मतलब मानव-में-मध्य हमलों का पता लगाना है)।

डोमेन और CDN श्वेतसूची

डोमेन और सबडोमेन व्हाइटलाइनिंग पूरी तरह से स्क्विड द्वारा समर्थित है। बहरहाल, यह समय-समय पर अप्रत्याशित तरीकों से विफल होने के लिए बाध्य है।

आधुनिक वेबसाइटों में सभी प्रकार के डोमेन पुनर्निर्देशन और CDN हो सकते हैं। एसीएल तब टूटेगा जब लोग एक डोमेन में बड़े करीने से सब कुछ डालने के लिए अतिरिक्त मील नहीं गए।

कभी-कभी एक इंस्टॉलर या एक पैकेज होगा जो रनिंग से पहले होमशिप को कॉल करना या बाहरी निर्भरता को फिर से प्राप्त करना चाहता है। यह हर एक बार विफल हो जाएगा और ऐसा कुछ भी नहीं है जो आप इसके बारे में कर सकते हैं।

कैशिंग

प्रदान की गई कॉन्फ़िगरेशन फ़ाइल कैशिंग के सभी प्रकार को अक्षम कर रही है। माफी से अधिक सुरक्षित।

व्यक्तिगत रूप से, मैं इस समय क्लाउड में चीजों को चला रहा हूं, सभी उदाहरणों में कम से कम 100 एमबीपीएस कनेक्टिविटी है और प्रदाता लोकप्रिय सामान (जैसे डेबियन) के लिए अपने स्वयं के रिपोज़ चलाता है जो स्वचालित रूप से खोजे जाते हैं। बैंडविड्थ को एक कमोडिटी बनाता है जिसकी मैं कम परवाह नहीं कर सकता था।

मैं एक कैशिंग बग का अनुभव करने के बजाय कैशिंग को पूरी तरह से अक्षम कर दूंगा जो मेरे मस्तिष्क को समस्या निवारण में पिघला देगा। इंटरनेट पर हर एक व्यक्ति अपने कैशिंग हेडर को सही नहीं कर सकता।

हालांकि सभी वातावरणों की आवश्यकताएं समान नहीं हैं। आप अतिरिक्त मील जा सकते हैं और कैशिंग कॉन्फ़िगर कर सकते हैं।

कभी भी प्रॉक्सी पर प्रमाणीकरण की आवश्यकता नहीं होती है

ग्राहकों से पासवर्ड प्रमाणीकरण की आवश्यकता होती है, आमतौर पर उनके LDAP खातों के साथ। यह ब्रह्मांड के हर ब्राउज़र और हर कमांड लाइन टूल को तोड़ देगा।

यदि आप प्रॉक्सी पर प्रमाणीकरण करना चाहते हैं, तो न करें।

यदि प्रबंधन प्रमाणीकरण चाहता है, तो समझाएं कि यह संभव नहीं है।

यदि आप एक देव हैं और आपने अभी-अभी ऐसी कंपनी ज्वाइन की है जो प्रत्यक्ष इंटरनेट को रोक रही है और प्रॉक्सी प्रमाणीकरण के लिए मजबूर कर रही है, तो RUN AWAY WHILE YOU CAN।

निष्कर्ष

हम आम विन्यास, सामान्य गलतियों और चीजों के माध्यम से चले गए, जिनके बारे में किसी को भी जानकारी होनी चाहिए।

सबक सीखना:

  • प्रॉक्सिंग (स्क्विड) के लिए एक अच्छा ओपन-सोर्स सॉफ्टवेयर है
  • इसे कॉन्फ़िगर करना आसान है (एक छोटी फ़ाइल)
  • सभी (वैकल्पिक) सुरक्षा उपायों में ट्रेडऑफ़ हैं
  • अधिकांश उन्नत विकल्प सामान को तोड़ देंगे और आपको परेशान करने के लिए वापस आएंगे
  • पारदर्शी परदे के पीछे HTTPS तोड़ रहे हैं
  • प्रॉक्सी प्रमाणीकरण बुराई है

प्रोग्रामिंग और सिस्टम डिज़ाइन में हमेशा की तरह, आवश्यकताओं और अपेक्षाओं का प्रबंधन करना महत्वपूर्ण है।

मैं एक प्रॉक्सी स्थापित करते समय मूल बातें करने की सलाह दूंगा। आम तौर पर, किसी विशेष फ़िल्टरिंग के बिना एक सादे प्रॉक्सी अच्छी तरह से काम करेगा और कोई परेशानी नहीं देगा। बस (ऑटो) ग्राहकों को याद रखना होगा।


s / man-in-he-Middle / man-in-the-middle / (S / E एकल चरित्र को संपादित करता है)
चेन लेवी

4

यह आपके सभी कार्यों को हल नहीं करेगा, लेकिन शायद यह अभी भी सहायक है। नाम के बावजूद, apt-cacher-ng केवल डेबियन और डेरिवेटिव के साथ काम नहीं करता है, और है

एक कैशिंग प्रॉक्सी। लिनक्स वितरकों से पैकेज फ़ाइलों के लिए विशेष रूप से, डेबियन (और डेबियन आधारित) वितरण के लिए लेकिन उन तक सीमित नहीं है।

मैं आपके जैसे (समान डेबियन आधारित) वातावरण में उत्पादन में इसका उपयोग कर रहा हूं।

हालांकि, AFAIK, यह रूबीज, PyPI, PECL, CPAN या npm का समर्थन नहीं करेगा और दानेदार ACL प्रदान नहीं करता है।

व्यक्तिगत रूप से, मुझे लगता है कि स्क्वीड की जांच करना एक अच्छा विचार है। यदि आप अंत में एक सेटअप लागू करते हैं, तो क्या आप अपने अनुभव साझा कर सकते हैं? मुझे काफी दिलचस्पी है कि यह कैसे जाता है।


2

हमारे पास एक समान चुनौती थी और स्थानीय रिपोज और एक स्नैपशॉट आधारित भंडारण प्रणाली का उपयोग करके इसे हल किया है। हम मूल रूप से विकास रिपॉजिटरी को अपडेट करते हैं, इसे परीक्षण के लिए क्लोन करते हैं, क्लोनिंग के लिए और अंत में उत्पादन के लिए। उपयोग की गई डिस्क की मात्रा उस तरह से सीमित है, साथ ही यह सभी धीमी गति से भंडारण है और यह ठीक है।

क्लाइंट को हमारे कॉन्फ़िगरेशन प्रबंधन से रिपॉजिटरी जानकारी मिलती है इसलिए यदि आवश्यक हो तो स्विच करना आसान है।

आप उपयोगकर्ता-एजेंट स्ट्रिंग्स या स्रोत ips / मास्क संयोजनों का उपयोग करके प्रॉक्सी सर्वर पर ऐस का उपयोग करना चाहते हैं और कुछ डोमेन तक उनकी पहुंच को प्रतिबंधित कर सकते हैं, लेकिन यदि आप ऐसा करते हैं तो मुझे जो समस्या दिखती है वह संकुल / पुस्तकालयों के विभिन्न संस्करणों की है। यदि मेजबान में से कोई एक cpan और अनुरोध मॉड्यूल तक पहुंच सकता है xxx :: yyy जब तक कि ग्राहक एक विशिष्ट संस्करण का उपयोग करने का निर्देश नहीं देता है, तो cpan (या pypy या rubygems) से नवीनतम खींचेगा, जो पहले से ही हो सकता है या नहीं भी हो सकता है। प्रॉक्सी में कैश किया गया। तो आप एक ही वातावरण पर विभिन्न संस्करणों के साथ समाप्त हो सकते हैं। यदि आप स्थानीय रिपॉजिटरी का उपयोग करते हैं तो आपको वह समस्या नहीं होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.