Debian için PHP web uygulamalarını paketlemek için iyi yaklaşımlar


15

Birçok PHP web uygulaması kurulum ve yükseltme için bu modeli takip eder:

  1. Bir kaynak katran topunun katranını kaldırın.
  2. Apache'yi kaynağa yönlendirin.
  3. Bir web tarayıcısında ana sayfaya gidin.
  4. Kurulumun birkaç web sayfasını gözden geçirin (örn. Kütüphanelerin varlığını kontrol eder, veritabanı bağlantı bilgilerini ister, veritabanı şeması oluşturur veya günceller vb.).
  5. Kullanıcı bir install/dizini başka bir şeyle yeniden adlandırır, böylece uygulama yüklendiğini bilir.

Bu paketi yükleyen kullanıcının yukarıdaki manuel adımların çoğundan geçmesini sağlamadan bir Debian paketi oluşturmanın herhangi bir (basit) yolunu görmüyorum. Uygulamada bir geliştirici olmadığımı, bu yüzden uygulama kurulumunun nasıl çalıştığı üzerinde doğrudan değişiklik yapacak bir konumda olmadığımı unutmayın.

Böyle bir uygulamanın paketlenmesine tipik yaklaşım nedir?


1
Debian paketi ile ne demek istediğinizden emin değilim, ama Composer'a baktınız mı? getcomposer.org
CamelBlues

Yanıtlar:


19

Debian paketleri aracılığıyla (dahili olarak) dağıttığım birkaç PHP web uygulaması oluşturdum. İşlemi otomatikleştirmek için komut dosyaları (burada basitleştirilmiş) sayesinde bunu yapmak basittir:

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.

Tüm bunları yapmak oldukça kolaydır ve yaptığım dahili paket dağıtımı için iyi çalışır. Küresel dağıtım için yeterli olduğundan emin değilim, ancak Ubuntu ve Debian halkının kaynak paketleri aldıklarında (muhtemelen yükleme komut dosyalarıyla tarballs olarak dağıtıldığında) ve onlar için .deb paketleri oluşturduklarındakine benzer olabilir.

Bence bu beş noktanızı rahatça ele alabilir:

  1. Debian paketi, yüklendiğinde otomatik olarak hedef sistemdeki uygun yere açılır.

  2. Debian paketinin Apache'yi otomatik olarak yapılandırmasını sağlayabilirsiniz. MySQL ve Apache gibi bazı paketler, / etc dizininde yapılandırma dosyalarını bırakabileceğiniz "conf.d" dizinlerine sahiptir. Bu ideal. Paketleme komut dosyanız bir debian / etc / apache2 / conf.d dizini oluşturabilir ve oraya bir yapılandırma dosyası kopyalayabilir. Hedef sisteme yüklenecek ve Apache'yi debian / DEBIAN içine yerleştirdiğiniz postinst adlı bir komut dosyasında yeniden başlatabilirsiniz.

  3. Özel bilgilerin girilmesi gerekiyorsa bu muhtemelen kaçınılmazdır, ancak birçoğu yapılandırma gerektirmeden "kutunun dışında" çalışabilen sistemleri tercih eder.

  4. Kontrol dosyasına uygun paket bağımlılıkları eklenerek kütüphane varlığı garanti edilebilir. Veritabanı bağlantı bilgileri varsayılan olarak yüklenebilir veya yapılandırma sayfalarında yöneticiden istenebilir. Girdikten sonra, yapılandırma sayfalarının veritabanı şemasını güncellemek için idempotent veritabanı geçiş komut dosyalarını çağırması gerekir. Birkaç web çerçevesi (Django gibi) bunu kolaylaştırır.

  5. Yapılandırma sayfalarının arkasındaki kod, sistemi yönetici olarak değil yapılandırılmış olarak işaretlemelidir.

Bazen kullandığım bir yaklaşım, yapılandırmanın kurulumunu ayrı paketler yaparak uygulamanın kurulumundan ayırmaktır. Daha sonra isteğe bağlı olarak yükleyebileceğim birkaç farklı yapılandırma paketine (sürüm, geliştirme, vb.) Sahip olabilirim. Bu ayırma da avantajlıdır, çünkü yapılandırma ve uygulama yeniden yüklendiğinde birbirlerini tıka basmadan ayrı ayrı gelişebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.