NGINXによりPHPウェブサイトを立ち上げる場合
NGINXによるPHPで構成されたウェブページのレンダリングには、拡張モジュールPHP-FPM(FastCGI Process Manager)が必要となるため、NGINXの設定ファイルもこれに合わせる必要があります。
事前に専用のdockerネットワークnginx-proxyを新たに作成して下さい。
$ docker network create nginx-proxy
NGINXのプロキシ経由で接続する場合は以下のコンテナnginx-proxyを追加します。
LetsencryptによるSSL接続する場合には以下のコンテナを利用して下さい。
-
NGINX FastCGI Configuration Example
PHP FastCGI Example | NGINX -
NGINX
Docker -
PHP
Docker -
Mariadb
Docker
Docker-Composeファイルの作成
docker-compose.yml
version: '3'
services:
mariadb:
container_name: mariadb
image: mariadb
restart: always
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root_password
- MYSQL_DATABASE=database
- MYSQL_USER=user
- MYSQL_PASSWORD=user_password
networks:
proxy-tier:
ipv4_address: 172.18.0.4
nginx:
container_name: nginx
image: nginx:alpine
volumes:
- ./html:/var/www/html
restart: always
networks:
proxy-tier:
ipv4_address: 172.18.0.6
php-fpm:
container_name: php-fpm
image: php:7.2-fpm-alpine
expose:
- "9000"
volumes:
- ./html:/var/www/html
restart: always
networks:
proxy-tier:
ipv4_address: 172.18.0.7
networks:
proxy-tier:
external:
name: nginx-proxy
追加パッケージ
上記nginx, php-fpmのイメージはともに最小構成OSのalpineのため、docker execコマンドによりbash, nanoをインストールします。
$ docker exec nginx apk update
$ docker exec php-fpm apk update
$ docker exec nginx apk add bash nano
$ docker exec php-fpm apk add bash nano
PHP-FPM拡張モジュールのインストール
PHPインフォメーション
$ docker exec php-fpm php -i
PHPモジュール確認
$ docker exec php-fpm php -m
php-fpmについてはmysqli拡張モジュールをインストールします。PHP拡張モジュールのためのスクリプト docker-php-ext-configure
, docker-php-ext-install
, and docker-php-ext-enable
が予め用意されているため、これを利用します。
$ docker exec php-fpm docker-php-ext-install mysqli
NGINX設定
FastCGI設定箇所をアンコメントし、内容を変更します。
$ docker exec -ti nginx nano /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
# Mitigate https://httpoxy.org/ vulnerabilities
fastcgi_param HTTP_PROXY "";
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
# include the fastcgi_param setting
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
最後にnginx,php-fpm各コンテナを再起動します。
$ docker container restart nginx
$ docker container restart php-fpm
phpコードによるアプリは /var/www/html フォルダに格納します。