ฉันได้สร้างเว็บแอปพลิเคชั่น PHP หลายตัวที่ฉันแจกจ่าย (ภายใน) ผ่านแพ็คเกจ Debian การทำเช่นนี้เป็นไปอย่างตรงไปตรงมาด้วยสคริปต์ (ง่ายที่นี่) เพื่อทำให้กระบวนการอัตโนมัติ:
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.
ทั้งหมดนี้ค่อนข้างง่ายที่จะทำและทำงานได้ดีสำหรับการกระจายแพคเกจภายในที่ฉันทำ ฉันไม่แน่ใจว่ามันเพียงพอสำหรับการแจกจ่ายทั่วโลก แต่มันอาจคล้ายกับสิ่งที่คน Ubuntu และ Debian ทำเมื่อใช้แพ็กเกจซอร์ส (อาจแจกจ่ายเป็น tarballs พร้อมสคริปต์การติดตั้ง) และสร้างแพ็คเกจ. deb สำหรับพวกเขา
ฉันคิดว่าสิ่งนี้สามารถแก้ไขห้าจุดได้อย่างราบรื่น:
แพ็คเกจ Debian จะทำการคลายการบีบอัดลงในตำแหน่งที่เหมาะสมบนระบบเป้าหมายโดยอัตโนมัติเมื่อทำการติดตั้ง
คุณสามารถให้แพ็คเกจ Debian กำหนดค่า Apache โดยอัตโนมัติ แพคเกจบางอย่างเช่น MySQL และ Apache มีไดเรกทอรี "conf.d" ใน / etc ที่คุณสามารถวางไฟล์การกำหนดค่า นี่คืออุดมคติ สคริปต์แพ็กเกจของคุณสามารถสร้างไดเร็กทอรี debian / etc / apache2 / conf.d และคัดลอกไฟล์คอนฟิกูเรชันที่นั่น มันจะถูกติดตั้งบนระบบเป้าหมายและคุณสามารถรีสตาร์ท Apache ในสคริปต์ที่ชื่อว่า postinst ที่คุณใส่ไว้ใน debian / DEBIAN
นี่อาจเป็นสิ่งที่หลีกเลี่ยงไม่ได้หากต้องป้อนข้อมูลที่กำหนดเองแม้ว่าจะมีหลายระบบที่ต้องการเรียกใช้ "นอกกรอบ" โดยไม่ต้องมีการกำหนดค่า
การมีอยู่ของไลบรารีสามารถรับประกันได้โดยรวมถึงการพึ่งพาแพ็คเกจที่เหมาะสมในไฟล์ควบคุม ข้อมูลการเชื่อมต่อฐานข้อมูลสามารถติดตั้งเป็นค่าเริ่มต้นหรือถามผู้ดูแลระบบในหน้าการกำหนดค่า เมื่อป้อนแล้วหน้ากำหนดค่าควรเรียกใช้สคริปต์การย้ายฐานข้อมูล idempotent เพื่ออัปเดตสคีมาฐานข้อมูล เฟรมเวิร์กเว็บจำนวนมาก (เช่น Django) ทำให้เป็นเรื่องง่าย
รหัสที่อยู่เบื้องหลังหน้าการกำหนดค่าควรทำเครื่องหมายระบบว่ากำหนดค่าไม่ใช่ผู้ดูแลระบบ
บางครั้งวิธีที่ฉันใช้คือแยกการติดตั้งการกำหนดค่าออกจากการติดตั้งแอพโดยแยกแพคเกจออกจากกัน ฉันสามารถมีแพ็คเกจการกำหนดค่าที่แตกต่างกันหลายอย่าง (รีลีสการพัฒนาและอื่น ๆ ) ที่ฉันสามารถติดตั้งได้ตามต้องการ การแยกส่วนนี้ยังมีประโยชน์เนื่องจากการกำหนดค่าและแอปสามารถพัฒนาแยกกันได้โดยไม่ต้องปิดกั้นซึ่งกันและกันเมื่อติดตั้งใหม่