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:
Debian paketi, yüklendiğinde otomatik olarak hedef sistemdeki uygun yere açılır.
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.
Ö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.
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.
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.