Ho creato diverse applicazioni web PHP che distribuisco (internamente) attraverso pacchetti Debian. Farlo è stato semplice grazie agli script (semplificati qui) per automatizzare il processo:
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
Controllo :
Package: myapp
Version: 1.2.3
Maintainer: Your Name <[email protected]>
Architecture: all
Depends: apache2, php5
Description: The myapp web application.
Tutto questo è abbastanza facile da fare, e funziona bene per la distribuzione interna dei pacchetti che faccio. Non sono sicuro che sia sufficiente per la distribuzione globale, ma potrebbe essere simile a quello che fanno gli utenti di Ubuntu e Debian quando prendono pacchetti sorgente (probabilmente distribuiti come tarball con gli script di installazione) e creano pacchetti .deb per loro.
Penso che questo possa risolvere tranquillamente i tuoi cinque punti:
-
Il pacchetto Debian si decomprime automaticamente nella posizione corretta sul sistema di destinazione quando viene installato.
-
Puoi avere il pacchetto Debian per configurare automaticamente Apache. Alcuni pacchetti come MySQL e Apache hanno directory "conf.d" in / etc in cui è possibile rilasciare i file di configurazione. Questo è l'ideale Lo script di packaging può creare una directory debian / etc / apache2 / conf.d e copiare un file di configurazione. Verrà installato sul sistema di destinazione, e puoi riavviare Apache in uno script chiamato postinst che inserisci in debian / DEBIAN.
-
Questo è probabilmente inevitabile se è necessario inserire informazioni personalizzate, anche se molti preferiscono sistemi che possono essere eseguiti "immediatamente" senza alcuna configurazione richiesta.
-
L'esistenza della libreria può essere garantita includendo le appropriate dipendenze del pacchetto nel file di controllo. Le informazioni sulla connessione al database possono essere installate come predefinite o richieste all'amministratore nelle pagine di configurazione. Una volta inseriti, le pagine di configurazione dovrebbero richiamare script di migrazione del database idempotente per aggiornare lo schema del database. Diversi framework web (come Django) rendono questo facile.
-
Il codice dietro le pagine di configurazione dovrebbe contrassegnare il sistema come configurato, non l'amministratore.
Un approccio che a volte utilizzo è separare l'installazione della configurazione dall'installazione dell'applicazione rendendoli pacchetti separati. Posso quindi avere diversi pacchetti di configurazione (versione, sviluppo, ecc.) Che posso installare a piacimento. Questo disaccoppiamento è anche vantaggioso perché la configurazione e l'app possono evolversi separatamente, senza sbavare l'un l'altro quando vengono reinstallati.