概要
ソケット経由でApache2 on Dockerのコンテナとphp-fpm on Dockerのコンテナを一緒に動かす.
前提
-
Apache2 on Dockerを設定
- ~/Docker/www/以下にDockerfile
-
php-fpm on Dockerを設定
- ~/Docker/php-fpm/以下にDockerfile
- SSL/TLS接続の場合: 443ポート使用の場合のみ考慮
- 80使わないので
設定
apache2については,Apache2 on Dockerが出来ているところから開始,差分を説明.
apache2
~/Docker/www/Dockerfile
にてproxy_fcgi
とsetenvif
のモジュールを有効化,またphpモジュールの無効化.
phpモジュールはコンテナの中に入って/etc/apache2/mods-enable
の中を見て名前を確認(自分はphp8.1
だった).
...
/usr/sbin/a2dismod php8.1 && \ # /usr/sbin/a2enconf fqdn && \ の後にでも追加
/usr/sbin/a2enmod proxy_fcgi && \
/usr/sbin/a2enmod setenvif && \
...
~/Docker/www/sites-available/default-ssl.conf
にphp-fpm用の設定を追記.
以下のSetHandler...
の行を追記している.
...
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"
SSLOptions +StdEnvVars
</FilesMatch>
...
docker-compose.ymlの準備
~/Docker/docker-compose.yml
を準備.www
とphp-fpm
の両方を起動するので,それぞれのディレクトリの上に配置している.
version: '3.9'
services:
www:
build: ./www
image: nek/www:latest
container_name: www
hostname: www
ports:
- 443:443
restart: always
depends_on:
- php-fpm
volumes:
- www_data:/var/www
- socket:/var/run/php-fpm
php-fpm:
build: ./php-fpm
image: nek/php-fpm:latest
container_name: php-fpm
hostname: php-fpm
restart: always
volumes:
- www_data:/var/www
- socket:/var/run/php-fpm
- /etc/group:/etc/group:ro
- /etc/passwd:/etc/passwd:ro
volumes:
socket:
www_data:
driver_opts:
type: nfs
o: "port=2049,addr=192.168.0.2,rw,nfsvers=4"
device: ":/apache2/www"
ビルド&起動
docker compose up -d --build
運用
起動
docker compose up -d
を実行するディレクトリに注意.~/Docker/docker-compose.yml
を起動するのでそのディレクトリとなる.
cd ~/Docker
docker compose up -d
DocumentRoot(/var/www/html
)に以下のファイルを置いて,ブラウザでアクセスし ServerAPI
がFastCGIになってたらオッケー.
<?php phpinfo(); ?>