0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Winodws Docker環境でnginx+php-fpm環境構築

Last updated at Posted at 2023-05-04
  • できたこと
    nginx経由でphpinfo()の内容を表示
    image.png
  • 大まかな流れ
     Docker for Windowsの環境構築 【参考】WindowsでDocker
     nginxの環境構築 【参考】Dockerでnginx環境を構築
     php-fpmの環境構築 :下記記載

やることは単純だが、様々な設定が絡んでどこがどこに影響しているかわからなくなるので、最小限の構成でエラーメッセージを確認しながら一つ一つ確実に実施する。

参考:bitnami/php-fpm

  • php-fpmイメージ取得
docker pull bitnami/php-fpm:latest
  • 取得確認(イメージIDをコピーしておくと良い)
docker images

docker内でコンテナ同士で通信するためネットワークを構築する
参考:Docker network 概論

  • ネットワーク構成図
    image.png
  • ネットワーク作成
    参考:docker network
docker network create app-tier --driver bridge
  • php-fpmコンテナ起動
docker run -d --network app-tier bitnami/php-fpm --name pfp-fpm
  • nginxコンテナ起動(事前にnginxのイメージを取得していること)
docker run -dp 8080:80 --network app-tier nginx --name nginx

+nginxとphp-fpmの設定を変更する
下記のような通信の流れになるように、nginxとphp-fpmの設定を変更していく。
image.png

  • nginx.confの確認
/etc/nginx/nginx.conf
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

includeされているconf.d配下のdefault.confに設定変更を加える

  • defaul.confの変更
/etc/conf.d/default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
+       root           /app;
+       fastcgi_pass   pfp-fpm:9000;       
+       fastcgi_index  index.php;
+       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
-       #root           html;
-       #fastcgi_pass   127.0.0.1:9000;
-       #fastcgi_index  index.php;
-       #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
  • 変更箇所の説明
root           /app; #php-fpmコンテナ側のドキュメントルート
fastcgi_pass   pfp-fpm:9000; #Proxy先のphp-fpmコンテナ側のホストとポート情報
fastcgi_index  index.php; #$fastcgi_script_nameに格納するインデックスファイル名
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; #php-fpm側コンテナ側へリクエストするパラメータ
  • nginxのconfチェック
nginx -t
  • nginxのconfリロード
service nginx reload
  • nginxの動作確認
    localhost:8080へアクセスし、nginxが稼働していることを確認。
    image.png
  • php-fpmコンテナ側の設定
    ドキュメントルートへindex.phpを配置。
index.php
<?php phpinfo(); ?>
  • php-fpmの動作確認
    localhost:8080/index.phpへアクセスする。
    image.png

参考:
Module ngx_http_fastcgi_module
【docker】php-fpmを使う際のnginxのconfファイルについて
FastCGIに関して
nginx $document_root$fastcgi_script_name と $request_filename の違い

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?