Saya telah membuat beberapa aplikasi web PHP yang saya distribusikan (secara internal) melalui paket Debian. Melakukannya dengan mudah berkat skrip (disederhanakan di sini) untuk mengotomatiskan proses:
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
kontrol :
Package: myapp
Version: 1.2.3
Maintainer: Your Name <yourname@email.com>
Architecture: all
Depends: apache2, php5
Description: The myapp web application.
Semua ini cukup mudah dilakukan, dan berfungsi dengan baik untuk distribusi paket internal yang saya lakukan. Saya tidak yakin itu cukup untuk distribusi global, tetapi mungkin mirip dengan apa yang dilakukan orang-orang Ubuntu dan Debian ketika mereka mengambil paket source (mungkin didistribusikan sebagai tarball dengan skrip instal) dan membuat paket deb .deb untuk mereka.
Saya pikir ini dapat mengatasi lima poin Anda dengan lancar:
Paket Debian secara otomatis mendekompres ke tempat yang tepat pada sistem target ketika diinstal.
Anda dapat memiliki paket Debian mengkonfigurasi Apache secara otomatis. Beberapa paket seperti MySQL dan Apache memiliki direktori "conf.d" di / etc di mana Anda dapat meletakkan file konfigurasi. Ini yang ideal. Skrip pengemasan Anda dapat membuat direktori debian / etc / apache2 / conf.d dan menyalin file konfigurasi di sana. Ini akan diinstal pada sistem target, dan Anda dapat me-restart Apache dalam skrip bernama postinst yang Anda tempatkan di debian / DEBIAN.
Ini mungkin tidak dapat dihindari jika informasi khusus harus dimasukkan, meskipun banyak yang lebih suka sistem yang dapat "out of the box" tanpa konfigurasi yang diperlukan.
Keberadaan perpustakaan dapat dijamin dengan menyertakan dependensi paket yang sesuai dalam file kontrol. Informasi koneksi database dapat diinstal sebagai default, atau diminta dari administrator pada halaman konfigurasi. Setelah dimasukkan, halaman konfigurasi harus mengaktifkan skrip migrasi basis data idempoten untuk memperbarui skema basis data. Beberapa kerangka kerja web (seperti Django) membuatnya mudah.
Kode di belakang halaman konfigurasi harus menandai sistem sebagai terkonfigurasi, bukan administrator.
Suatu pendekatan yang kadang-kadang saya gunakan adalah untuk memisahkan pemasangan konfigurasi dari pemasangan aplikasi dengan membuatnya paket-paket terpisah. Saya kemudian dapat memiliki beberapa paket konfigurasi yang berbeda (rilis, pengembangan, dll.) Yang dapat saya instal sesuka hati. Decoupling ini juga menguntungkan karena konfigurasi dan aplikasi dapat berkembang secara terpisah, tanpa saling berkelahi ketika diinstal ulang.