डेबियन के लिए PHP वेब अनुप्रयोगों की पैकेजिंग के लिए अच्छे दृष्टिकोण


15

कई PHP वेब एप्लिकेशन इंस्टॉलेशन और अपग्रेड के लिए इस मॉडल का अनुसरण करते हैं:

  1. एक स्रोत टार बॉल अन-टार।
  2. स्रोत पर बिंदु अपाचे।
  3. होम पेज पर वेब ब्राउजर नेविगेट करें।
  4. सेट-अप के कई वेब पेजों से गुजरें (जैसे, पुस्तकालयों के अस्तित्व की जांच, डेटाबेस कनेक्शन की जानकारी के लिए पूछता है, डेटाबेस स्कीमा, आदि बनाता है या अपडेट करता है)।
  5. उपयोगकर्ता किसी install/निर्देशिका को किसी अन्य चीज़ में बदल देता है ताकि एप्लिकेशन को यह पता चले कि इसे स्थापित किया गया है।

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

इस तरह के एक आवेदन पैकेजिंग के लिए विशिष्ट दृष्टिकोण क्या है?


1
मुझे यकीन नहीं है कि आप डेबियन पैकेज से क्या मतलब है, लेकिन क्या आपने संगीतकार में देखा है? getcomposer.org
CamelBlues

जवाबों:


19

मैंने कई PHP वेब एप्लिकेशन बनाए हैं जिन्हें मैं (आंतरिक रूप से) डेबियन पैकेज के माध्यम से वितरित करता हूं। ऐसा करने से प्रक्रिया को स्वचालित करने के लिए स्क्रिप्ट (यहां सरलीकृत) के लिए सीधे धन्यवाद दिया गया है:

create_package.sh :

# create a clean debian package directory
rm -rf debian
mkdir -p debian/DEBIAN
mkdir -p debian/var/www/myapp

# populate the debian directory
cp control    debian/DEBIAN
cp myapp.php  debian/var/www/myapp
cp index.html debian/var/www/myapp

# finish through fakeroot so we can adjust ownerships without needing to be root    
fakeroot ./finish_package.sh debian .

finish_package.sh :

# $1 is the debian directory, $2 is the output directory

# adjust ownerships
chown -R root:root $1
chown -R nobody:nobody $1/var/www/myapp

# finally build the package
dpkg-deb --build $1 $2

नियंत्रण :

Package: myapp
Version: 1.2.3
Maintainer: Your Name <yourname@email.com>
Architecture: all
Depends: apache2, php5
Description: The myapp web application.

यह सब करना काफी आसान है, और आंतरिक पैकेज वितरण के लिए अच्छी तरह से काम करता है जो मैं करता हूं। मुझे यकीन नहीं है कि यह वैश्विक वितरण के लिए पर्याप्त है, लेकिन यह उबंटू और डेबियन लोगों के समान हो सकता है जब वे स्रोत पैकेज लेते हैं (संभवतः स्थापित स्क्रिप्ट के साथ टारबॉल के रूप में वितरित किए जाते हैं) और उनके लिए .deb पैकेज बनाते हैं।

मुझे लगता है कि यह आपके पांच बिंदुओं को सुचारू रूप से संबोधित कर सकता है:

  1. डेबियन पैकेज स्वचालित रूप से लक्ष्य प्रणाली पर उचित स्थान पर विघटित हो जाता है जब इसे स्थापित किया जाता है।

  2. आप डेबियन पैकेज को अपाचे को स्वचालित रूप से कॉन्फ़िगर कर सकते हैं। कुछ पैकेज जैसे MySQL और Apache में "conf.d" डायरेक्टरीज़ हैं / जिसमें आप कॉन्फिगरेशन फाइल्स ड्रॉप कर सकते हैं। यह आदर्श है। आपकी पैकेजिंग स्क्रिप्ट एक डेबियन / etc / apache2 / conf.d निर्देशिका बना सकती है और वहाँ एक कॉन्फ़िगरेशन फ़ाइल की प्रतिलिपि बना सकती है। यह लक्ष्य प्रणाली पर स्थापित किया जाएगा, और आप Apache को स्क्रिप्ट में पोस्टस्टीन में पुनः आरंभ कर सकते हैं जिसे आप डेबियन / DEBIAN में रखते हैं।

  3. यह संभवत: अपरिहार्य है यदि कस्टम जानकारी दर्ज की जानी चाहिए, हालांकि कई पसंदीदा सिस्टम "बॉक्स से बाहर" चला सकते हैं, जिसमें कोई कॉन्फ़िगरेशन आवश्यक नहीं है।

  4. नियंत्रण फ़ाइल में उचित पैकेज निर्भरताओं को शामिल करके लाइब्रेरी अस्तित्व की गारंटी दी जा सकती है। डेटाबेस कनेक्शन की जानकारी या तो डिफ़ॉल्ट के रूप में स्थापित की जा सकती है, या कॉन्फ़िगरेशन पृष्ठों पर व्यवस्थापक से पूछी जा सकती है। एक बार दर्ज करने के बाद, कॉन्फ़िगरेशन पेजों को डेटाबेस स्कीमा को अपडेट करने के लिए बेकार डेटाबेस माइग्रेशन स्क्रिप्ट को आमंत्रित करना चाहिए। कई वेब फ्रेमवर्क (जैसे Django) इसे आसान बनाते हैं।

  5. कॉन्फ़िगरेशन पृष्ठों के पीछे के कोड को सिस्टम को कॉन्फ़िगर करना चाहिए, न कि व्यवस्थापक को।

एक दृष्टिकोण जो मैं कभी-कभी उपयोग करता हूं, वह कॉन्फ़िगरेशन की स्थापना को एप्लिकेशन की स्थापना से अलग पैकेज बनाकर अलग करना है। फिर मेरे पास कई अलग-अलग कॉन्फ़िगरेशन पैकेज (रिलीज़, विकास, आदि) हो सकते हैं जिन्हें मैं इच्छा पर स्थापित कर सकता हूं। यह डीकॉउलिंग भी लाभप्रद है क्योंकि कॉन्फ़िगरेशन और ऐप अलग-अलग विकसित हो सकते हैं, बिना एक दूसरे को पुनः इंस्टॉल किए बिना।

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