2.ウェブサーバーの構成01
PhpとApacheのみを考えた場合は既に軽いイメージが色々あると思いますが、色んなプロジェクト(PHP限定ですけど。。。)を実行しないと行けないローカル開発環境ではちゃんとRPMなどインストールする環境じゃないと行けないかと考えました。そのためにOSイメージからのインストールするDockerfileを作成することにしました。
OSは自分が慣れているCentOSでバージョンは8をするか迷いましたが、まだ慣れないところもあったので7にします。
基本的には以下のデモン&ツールを考えております。
- PHPの複数バージョンの利用可能:phpenv(anyenv)のfpmを起動
- ウェブデモン:Apache(virtualhostの設定でプロジェクト毎に利用するPHPバージョンを管理)
- Supervisord:デモンの起動管理&LaravelのスケジュールやJob実装
PHPの複数バージョンの利用
anyenvを利用する理由としては環境作成後に他の言語を使用する可能性がないと言えないのでです。基本はphpenvのみをインストールしますが、javaやnode等の連携が発生した場合拡張性を考えました。
特定ユーザー(Dockerfileなのでroot)の領域にanyenvをインストールしても良いですが、出来ればシステムワイドへインストールしようかと思います。
実際の使用する際にはプロジェクトのフォルダにはShell実行用のためにphpenvのlocal設定して、ウェブの連携のためにfpmのサービスを登録します。
fpm用のサービスファイル
以下のようにfpm用のファイルをバージョン毎に作成します。
[Unit] Description=The PHP FastCGI Process Manager After=syslog.target network.target [Service] Type=simple PIDFile=/var/run/php-fpm7.3.0.pid ExecStart=$PHPENV_ROOT/versions/7.3.0/sbin/php-fpm -F ExecReload=/bin/kill -USR2 $MAINPID [Install] WantedBy=multi-user.target
PHPENV_ROOTはdocker-composeで使用する環境変数でphpenvがインストールされるディレクトです。
Apacheウェブサーバー
プロジェクトをvirtualhostの設定で増やす予定でプロジェクトことに設定ファイルを作成してphpのfpmの設定を行います。
例えばこんな感じです。
<VirtualHost *:80> DocumentRoot /var/www/sample-7.3.0 ServerName 730.$SERVER_NAME ErrorLog /var/log/httpd/730.$SERVER_NAME_error.log CustomLog /var/log/httpd/730.$SERVER_NAME_requests.log common LogLevel rewrite:trace8 <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php-fpm7.3.0.sock|fcgi://localhost" </FilesMatch> <Directory "/var/www/sample-7.3.0"> AllowOverride All Options +FollowSymLinks -Indexes </Directory> </VirtualHost>
SERVER_NAMEはdocker-composeで使用する環境変数でメインドメイン名です。例えばproject1.localのドメインで接続する予定なら「local」になります。
Supervisord
phpのfpmのサービスやapache等の設定が必要ですが、プロジェクトの設定に関係がある物のみファイルを作成します。こちらは使用予定のPhpのバージョン毎に作成します。
[program:php-fpm7.3.0] command=systemctl start php-fpm7.3.0