symfony 3の上に大きなSAAS Webアプリケーションビルドを静かにしています。約10〜20個のアプリケーションから始まり、現在500以上のアプリケーションに成長しました。既にアプリケーションごとのベンダーディレクトリだけが150MB以上のサイズです。共有コードベースのマルチインスタンスsymfonyアプリケーション
これらのアプリケーションにはそれぞれ独自のデータベースがあります。私はこのようにしたいと思います。しかし、いくつかのコードが共有されているといいと思います。たとえばvendorディレクトリとsrcディレクトリを取ってください。すべてのアプリケーションで同じですが、すべてがOpCacheに個別にロードされます。私はリソースの意味で、これらのディレクトリが共有されるのが最善であると信じています。
ComposerとSymfonyの両方は、実際には共有ディレクトリを多く持つマルチインスタンスアプリケーションをサポートしていないようです。しかし、誰かが私が念頭に置いたことを達成するための手がかりを持っているのか、それとも私の計画が実現できないのか疑問に思っていましたか?
設定はアプリケーション(parameters.yml)ごとに異なり、ウェブディレクトリにはアプリケーションごとに異なるスタイルシートが含まれています。だから、彼らは残りの部分から分離する必要があります。
私はこのために環境設定を使用することを考えていましたが、環境 "test"、 "dev"、 "application1"、 "application2"などがあるとは思わないでしょう。config_prod.ymlが突然また使用できなくなります。
私の考え方は間違っていますか?どのようにこれを達成するための任意の提案?あるいは、私はちょうど完全な別々のインスタンスと一緒に行くべきですか?
(私たちのアプリケーションではSemVerを使用していますが、バージョン1.0.0。、バージョン1.1.0などのコードを共有していればうれしいでしょう。これも上の次のレイヤーです。 )
編集: もう少し明確にするために。 本質的に、webディレクトリとvarディレクトリはどちらも共有できないと言うことができます。 Webディレクトリにはカスタムスタイルシートが含まれており、主要なエントリポイントです。 varディレクトリには、データベース設定に応じてアプリケーションごとに異なるキャッシュファイルが含まれています。 最後に、データベース資格情報を格納するアプリケーションごとに異なるカスタムパラメータファイルもあります。
私はシンボリックリンクを試みましたが、作曲家はそれに本当に満足していません。また、シンボリックリンクを使用する場合、作業ディレクトリは実際に使用されているディレクトリであり、シンボリックリンクされている実際のディレクトリではありません。 私はまた、アプリケーションのvhostファイルでカスタム設定を試みました。キャッシュディレクトリとカーネルディレクトリをオーバーライドすることは可能ですが、シンボリックリンクを行っている実際のディレクトリもまた緩くなります。
ちょうどアイデア:Opcacheは実パスを使用します。同じ場合は、「親」へのシンボリックリンクでファイルを置き換えることができます。作曲家のインストール後にスクリプトを作成し、おそらくそれから安心することができます... – hakre
ええ、私はそれを試みました。しかし、作曲家は、ベンダーのディレクトリが複数のアプリケーションによってシンボリックリンクされていることをサポートしていません。オートローダのいずれかのどこかにパスを保存します。 –
私はベンダーのフォルダを意味するのではなく、パッケージ内のコードを意味します。パッケージではなく、そのレベルのすべてのファイルは同じです。 Linkeは2つのディレクトリツリーを再帰的に比較し、ファイルが同じ場合はシンボリックリンクで置き換えます。 opcacheはrealpathを使用します。これはスクリプトで行う必要があります。これにより、ベンダーフォルダを消去し、コンポーザーで再インストールしてから、compare&linkスクリプトを再実行してリセットできます。 – hakre