Debian用のPHP Webアプリケーションをパッケージ化するための優れたアプローチ


15

多くのPHP Webアプリケーションは、インストールおよびアップグレードのためにこのモデルに従います。

  1. ソースtarボールを展開します。
  2. Apacheをソースに向けます。
  3. Webブラウザーをホームページに移動します。
  4. セットアップのいくつかのWebページを調べます(たとえば、ライブラリの存在の確認、データベース接続情報の要求、データベーススキーマの作成または更新など)。
  5. ユーザーがinstall/ディレクトリの名前を別の名前に変更し、アプリケーションがインストールされたことを認識できるようにします。

パッケージをインストールするユーザーに上記の手動ステップの多くを行わせることなく、これからDebianパッケージを作成する(簡単な)方法はありません。私はアプリケーションの開発者ではないため、アプリケーションのインストール方法を直接変更することはできません。

そのようなアプリケーションをパッケージ化するための典型的なアプローチは何ですか?


1
Debianパッケージの意味がわかりませんが、Composerを検討しましたか?getcomposer.org
CamelBlues

回答:


19

Debianパッケージを介して(内部的に)配布するPHP Webアプリケーションをいくつか作成しました。プロセスを自動化するスクリプト(ここでは簡略化)のおかげで、そうすることは簡単です。

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

制御

Package: myapp
Version: 1.2.3
Maintainer: Your Name <yourname@email.com>
Architecture: all
Depends: apache2, php5
Description: The myapp web application.

これはすべて非常に簡単に実行でき、私が行う内部パッケージの配布に適しています。グローバルな配布に十分かどうかはわかりませんが、UbuntuやDebianの人々がソースパッケージ(インストールスクリプトを使用してtarballとして配布される可能性があります)を取得し、それらの.debパッケージを作成する場合と同様です。

これで5つのポイントにスムーズに対処できると思います。

  1. Debianパッケージは、インストール時にターゲットシステム上の適切な場所に自動的に解凍されます。

  2. DebianパッケージにApacheを自動的に設定させることができます。MySQLやApacheなどの一部のパッケージには、構成ファイルをドロップできる/ etcに「conf.d」ディレクトリがあります。これが理想です。パッケージングスクリプトはdebian / etc / apache2 / conf.dディレクトリを作成し、そこに設定ファイルをコピーできます。ターゲットシステムにインストールされ、debian / DEBIANに配置したpostinstというスクリプトでApacheを再起動できます。

  3. カスタム情報を入力する必要がある場合、これはおそらく避けられませんが、多くのユーザーは、構成を必要とせずに「そのまま」実行できるシステムを好みます。

  4. ライブラリの存在は、適切なパッケージの依存関係を制御ファイルに含めることで保証できます。データベース接続情報は、デフォルトとしてインストールするか、構成ページで管理者に尋ねることができます。入力後、構成ページはべき等データベース移行スクリプトを呼び出して、データベーススキーマを更新する必要があります。いくつかのWebフレームワーク(Djangoなど)がこれを簡単にします。

  5. 構成ページの背後にあるコードは、システムを管理者ではなく構成済みとしてマークする必要があります。

私が時々使用するアプローチは、構成のインストールとアプリのインストールを別々のパッケージにすることで分離することです。その後、自由にインストールできるいくつかの異なる構成パッケージ(リリース、開発など)を作成できます。また、このデカップリングは、再インストール時に相互に干渉することなく、構成とアプリを個別に進化させることができるため、有利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.