Pendekatan yang baik untuk mengemas aplikasi web PHP untuk Debian

15

Banyak aplikasi web PHP mengikuti model ini untuk instalasi dan peningkatan:

  1. Batalkan tar bola sumber.
  2. Arahkan Apache ke sumbernya.
  3. Arahkan peramban web ke beranda.
  4. Pergi melalui beberapa halaman web pengaturan (misalnya, memeriksa keberadaan perpustakaan, meminta informasi koneksi database, membuat atau memperbarui skema database, dll.).
  5. Pengguna mengganti nama install/direktori ke sesuatu yang lain sehingga aplikasi tahu telah diinstal.

Saya tidak melihat cara (sederhana) untuk membuat paket Debian dari ini tanpa membuat pengguna menginstal paket melalui banyak langkah manual di atas. Perhatikan bahwa saya bukan pengembang pada aplikasi jadi saya tidak dalam posisi untuk membuat perubahan langsung pada cara kerja instalasi aplikasi.

Apa pendekatan khas untuk mengemas aplikasi semacam itu?

rlandster
sumber
1
Saya tidak yakin apa yang Anda maksud dengan paket Debian, tetapi apakah Anda sudah melihat ke Komposer? getcomposer.org
CamelBlues

Jawaban:

19

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 <[email protected]>
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:

  1. Paket Debian secara otomatis mendekompres ke tempat yang tepat pada sistem target ketika diinstal.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

Randall Cook
sumber