LEMP環境をDockerで構築

今までPHPを動かすときは、DockerHubからPHPApacheが一体になったImageを使用していたのだけど、nginxも使ってみたかったのでphp-fpm+nginx環境をDockerで立ち上げてLaravelを動かしてみた。

今まではApacheが同梱されていてコンテナを立ち上げてlocalhostにアクセスしたらすぐ動いたのだけどnginxの設定を初めてした。

fastcgiの設定あたりがよくわかっていないので、HTTPサーバが動く仕組みを理解していないのだと思う。

server {
    listen 80 default;
    server_name _;
    root /var/www/html/;
    index index.php index.html index.htm;
    charset utf-8;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass ${PHP_APP_HOST}:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

/var/www/htmlにボリュームをマウントしていてLaravelを動かしてみたのだけれど、困ったのは$ php artisan make:xxxコマンドを使用して作成したファイルがホスト側から読み取り専用ファイルになってしまったこと。

rootユーザではなくwww-dataユーザとしてartisanコマンドを実行したら解決した。

docker exec -u www-data -it php-fpm bash

github.com