2012-11-23 12 views
5

私は、同じコードベースを共有するPHP Webアプリケーションの複数のインスタンスを管理するための最良の方法(または最も簡単な方法)を探しています。同じコードベースで複数のWebアプリケーションを管理する

私はあなたのためにそれを打破してみましょう:

当社のドメインは、独自の設定ファイルとデータベースとのそれぞれのアプリケーションの複数のインスタンスをホストしています。

http://mydomain.com
|
| ------/customer1/
|
| ------/customer2/
|
| ------/customer3/+カスタム機能

はのは、その顧客に1 & 2を言おうが(私たちは彼らのためにホストすること)アプリケーションを購入し、彼らは、そのアプリケーションのベースモデルを持っています。 (カスタマイズされていない)

しかし、顧客3は機能XまたはYが必要なので、その機能をコード化してアプリケーションに追加します。

しかし、コードベースの更新(フレームワークのコアクラスのセキュリティ修正)があるときは、3人の顧客全員がベースコードの更新を取得する必要があります!

この種の設定を管理するにはどうすればよいでしょうか? FTPを使用して手動ですべてのファイルをアップロードするのは苦労し、コードをマージすることはできません。

おそらくGitを使うのは解決策かもしれませんが、どうすればいいですか?顧客ごとに別々のリポジトリを作成しますか?百人以上のお客様に成長するとどうなりますか?

このような設定を使用する必要がある理由、使用しない理由など、洞察を歓迎します。 (しかし、私たちはお客様のためにアプリケーションをホストしていることを覚えておいてください)

+0

これらの機能はどのように設定されていますか?モジュールベースの設定が最も可能性が高いので、データベーステーブルを使用することができます:クライアント - >機能1 - >オフ、クライアント2 - >機能2 - >をオンにし、コード内のその機能を有効または無効にします。 –

+0

機能はフレームワークによってサポートされているため、モジュール式です。 –

答えて

1

私は今何年も前にやったことを覚えています。だから私は今これで少し錆びています。

スタンドアロンフレームワークを構築しました。これは、すべてのインクルードを1つの.phpファイルにまとめました。それを使用したフレームワークはPULL要求を行い、フレームワークのmd5が中央サーバのフレームワークと一致した場合、更新は必要ありませんでした。それ以外の場合は、httpsで新しいフレームワークをダウンロードし、それ自身のコピーを置き換えます。これにより、それを使用した他のすべてのアプリにプルされた自動アップデートシステムが作成されました。

大きな問題は、構文エラーと言って中央サーバーにアップロードすると、他のすべてのサーバーにアップロードされて破損するということです。フレームワークを使用しないプルリクエストを作成するには、cronジョブを使用することをお勧めします。フレームワークで構文エラーが発生しないようにプルリクエストを実行しないようにします。これにより、セントラルサーバーで構文エラーを修正すると、少なくとも自動的に修正される機能が追加されます。ただし、この場合は、各更新プログラムをテストするステージングサーバーを用意することが非常に重要です。

もちろん、基本的なことは、フレームワークが使用している画像について言及しているだけでなく、SQLの更新なども引き継がれる必要があるということです。

大量のエラーを防ぐために、中央サーバにアップロードする前に、これを再検査してください。理想的ではない!単体テスト、ステージングサーバー、小規模で簡単な更新が必要ですが、大規模な更新の方が間違っている可能性が高く、間違っていれば元に戻すより多くの場合、リスクを軽減できます。

フレームワークは、多くの異なるサイトを使用する計画を立てるときにできるだけ柔軟にするために、最初から非常に非常に非常に非常によく構造化する必要があります。初めに間違ったデザインをした場合、道路をさらに見直すことは不可能です。たとえば、PDOをデータベースアクセスに使用すると、すべてのアプリケーションで異なるデータベースを使用できるようになりますが、クラスなどは(データベースがmysqlかoracleかにかかわらず)データベースとやりとりする方法がわかりません可能ならば、少なくとも1つに固執することをお勧めします。

他の言語のフレームワークを見て、彼らが何をしているのかを見てみることをお勧めします。あなたは良いデザイン原則に固執し、適用可能な場合にのみデザインパターンを使用し、MVCを書き留めなければなりません!

さらに読む...

これは容易な作業ではありませんので、警告されます。

+0

追加の読み込み部分を追加しました – VBAssassin

+0

私はすでにモジュールで拡張できるMVCフレームワークを使用しています。あなたが提供したリンクを見ていきます。ありがとう! –

+0

それはカスタムビルドフレームワーク、オープンソースのものか商用のものですか? – VBAssassin

0

カスタム機能をモジュラーにします。プラグインや拡張機能を持つWordPress/Joomlaと同様のアーキテクチャを使用してください。これにより、顧客は簡単に別々のフィーチャセットを持つことができますが、すべて同じベースコードを共有します。

1

あなたがシステム

回答1-ST上を生きるために一つの質問

  • 開発と、発散コード(任意の)SCMからコードの
  • 展開を支援するために二つの別々の異なるタスクを混合しましたSCMはブランチングおよびマージブランチです(各顧客は独自のブランチを持っていますが、そこから1つの開発ブランチから必要な部分をマージします)。または/より良い/ "タスクごとの分岐"ブランク必要なすべてのターゲットで時間、回避チェリーピッキング)

    質問があなたのSCMと対話することができ、「-ツールを構築する」(あなたは)もっと詳細な回答のため、後に詳細を記述する必要がある

    回答2-NDに

関連する問題