クリエイター:メタボ兔

ウェブやアプリの開発者で利用する色な技術やサーバーや開発環境の設定について共有する場

2.ウェブサーバーの構成01

PhpApacheのみを考えた場合は既に軽いイメージが色々あると思いますが、色んなプロジェクト(PHP限定ですけど。。。)を実行しないと行けないローカル開発環境ではちゃんとRPMなどインストールする環境じゃないと行けないかと考えました。そのためにOSイメージからのインストールするDockerfileを作成することにしました。

OSは自分が慣れているCentOSでバージョンは8をするか迷いましたが、まだ慣れないところもあったので7にします。

f:id:FattyRabbit:20201229183311p:plain

基本的には以下のデモン&ツールを考えております。

  • 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