なぜこれが必要なのですか?
長い間、当社のすべてのプロジェクトがPHP5に取り組んでいましたが、今ではPHP7に切り替えて、動作に必要なすべての環境を更新することで、それらを高速化したいという要望がありました。 「異なるバージョンのPHPで異なるプロジェクトを動作させる方法は?」という疑問がすぐに生じました。
思いついたのは:
- 2つの異なるサーバーを含む
- 仮想マシンを使用する
- Dockerを適用する
オプション1は明らかに経済的に実行可能ではありません。 オプション2では、構成が難しく、リソースを大量に消費することがわかりました。 多くの人はおそらくこれに同意しませんが、その軽さとアプリケーション転送の容易さから、Dockerテクノロジーを使用することにしました。 主な選択基準は、Dockerが「私のマシンで動作する」問題を解決することでした。
環境選択
Maria DBはDBMSから選択されました。これは、すべてのプロジェクトでデータをすばやく読み取ることが重要であり、同時にデータを書き込む必要がないためです。
Nginxが静的ファイルを提供し、Apache2がダイナミクスを担当するApache2 + Nginxバンチを使用することにしました。
将来的には、必要に応じて、Redis、Memcachedなどをシステムに簡単に追加できます。
環境構造
すべてのプロジェクトには、リリース前に変更をテストするために使用されるバトルサーバー上のコピーがあります。 したがって、条件付きで環境を2つの部分に分割しました: demoとprod
各パーツには、b / dのある独自のコンテナがあります。 つまり demoデータベースとprodデータベースは分離されています。 デモと製品には、PHP5のコンテナーとPHP7のコンテナーも含まれています。
すべての先頭にあるNginxプロキシは、構成ファイルで指定されたコンテナーに要求を送信します。 これにより、要求を必要なコンテナにリダイレクトするだけで、PHPバージョンを簡単に切り替えることができます。プロジェクトファイルはそれぞれで利用できるためです。 唯一の違いは、実行される環境です。
Nginxプロキシのサイト構成の例:
server { listen 80; server_name example.ru www.example.ru; location / { proxy_pass http://demo_php7_web; } }
図でシステムの構造を明確に見ることができます。
システム最適化
ほとんどのプロジェクトは1C-Bitrixプラットフォームで動作するため、1C-Bitrixが提供するbitrix_server_test スクリプトの要件を考慮してApache2とNginxを構成しました。
必要なすべてのPHP拡張機能は、Webサーバー、 curl、rsyslog、htop、xvfb、libfontconfig、wkhtmltopdf、jpegoptim、optipngを含むコンテナーにインストールされます。 さらに、サーバー側のファイル圧縮が構成されます。
特徴
- クラウンでは、Apache2およびNginxの構成ファイルの変更を1分間隔でチェックしています。 設定を変更した後、リロードを行うためにコンテナに行く必要はありません。
- Webサーバー上のコンテナには、Apache2、Cron、およびNginxを実行する開発者ユーザーがいます
- SSLがサポートされています。構成の説明は、構成ファイルの例に記載されています。
使用する
現在、30以上のプロジェクトが開始されているこのシステムは、サーバー上で正常に動作しています。
プロジェクトはGitHubで入手できます 。 また、プロジェクトのファイル構造のより詳細な説明と、開始方法についても説明しています。