मैंने कई 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 पैकेज बनाते हैं।
मुझे लगता है कि यह आपके पांच बिंदुओं को सुचारू रूप से संबोधित कर सकता है:
डेबियन पैकेज स्वचालित रूप से लक्ष्य प्रणाली पर उचित स्थान पर विघटित हो जाता है जब इसे स्थापित किया जाता है।
आप डेबियन पैकेज को अपाचे को स्वचालित रूप से कॉन्फ़िगर कर सकते हैं। कुछ पैकेज जैसे MySQL और Apache में "conf.d" डायरेक्टरीज़ हैं / जिसमें आप कॉन्फिगरेशन फाइल्स ड्रॉप कर सकते हैं। यह आदर्श है। आपकी पैकेजिंग स्क्रिप्ट एक डेबियन / etc / apache2 / conf.d निर्देशिका बना सकती है और वहाँ एक कॉन्फ़िगरेशन फ़ाइल की प्रतिलिपि बना सकती है। यह लक्ष्य प्रणाली पर स्थापित किया जाएगा, और आप Apache को स्क्रिप्ट में पोस्टस्टीन में पुनः आरंभ कर सकते हैं जिसे आप डेबियन / DEBIAN में रखते हैं।
यह संभवत: अपरिहार्य है यदि कस्टम जानकारी दर्ज की जानी चाहिए, हालांकि कई पसंदीदा सिस्टम "बॉक्स से बाहर" चला सकते हैं, जिसमें कोई कॉन्फ़िगरेशन आवश्यक नहीं है।
नियंत्रण फ़ाइल में उचित पैकेज निर्भरताओं को शामिल करके लाइब्रेरी अस्तित्व की गारंटी दी जा सकती है। डेटाबेस कनेक्शन की जानकारी या तो डिफ़ॉल्ट के रूप में स्थापित की जा सकती है, या कॉन्फ़िगरेशन पृष्ठों पर व्यवस्थापक से पूछी जा सकती है। एक बार दर्ज करने के बाद, कॉन्फ़िगरेशन पेजों को डेटाबेस स्कीमा को अपडेट करने के लिए बेकार डेटाबेस माइग्रेशन स्क्रिप्ट को आमंत्रित करना चाहिए। कई वेब फ्रेमवर्क (जैसे Django) इसे आसान बनाते हैं।
कॉन्फ़िगरेशन पृष्ठों के पीछे के कोड को सिस्टम को कॉन्फ़िगर करना चाहिए, न कि व्यवस्थापक को।
एक दृष्टिकोण जो मैं कभी-कभी उपयोग करता हूं, वह कॉन्फ़िगरेशन की स्थापना को एप्लिकेशन की स्थापना से अलग पैकेज बनाकर अलग करना है। फिर मेरे पास कई अलग-अलग कॉन्फ़िगरेशन पैकेज (रिलीज़, विकास, आदि) हो सकते हैं जिन्हें मैं इच्छा पर स्थापित कर सकता हूं। यह डीकॉउलिंग भी लाभप्रद है क्योंकि कॉन्फ़िगरेशन और ऐप अलग-अलग विकसित हो सकते हैं, बिना एक दूसरे को पुनः इंस्टॉल किए बिना।