Laravelの動く環境をdocker-compose(PHP 7.2 + nginx + MySQL)でいい感じにする
はじめに
Laravelを
$ php artisan serve
で動かすのにすごくモヤモヤしていたのでdocker-compose をつかってLaravelのプロジェクトが動くインフラ(PHP 7.2 + nginx + MySQL)を構築してみたからまとめる。
ディレクトリ構成は以下の感じになった。
$ tree -L 1 . ├── LICENSE ├── README.md ├── app ├── artisan ├── bootstrap ├── composer.json ├── composer.lock ├── config ├── database ├── docker ├── docker-compose.yml ├── package.json ├── phpunit.xml ├── public ├── readme.md ├── resources ├── routes ├── server.php ├── storage ├── tests └── webpack.mix.js
完全に好みである。
docker-compose
例のファイル(docker-compose.yml)を書く。
version: '3' services: nginx: build: context: ./docker/nginx depends_on: - php ports: - 80:80 volumes: - ./:/src php: build: context: ./docker/php environment: DB_HOST: mysql volumes: - ./:/src mysql: image: mysql:5.7 volumes: - ./docker/mysql:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_USER=sample - MYSQL_PASSWORD=sample - MYSQL_DATABASE=sample ports: - 3306:3306
見ればわかるようにプロジェクトルートを/srcとして設定している。
コンテナ側では基本的に/srcに入るようになっていてそれを公開する形になっている。
またこの設定ファイルにあるように、docker-composeで使用するコンテナの設定ファイル群は./dockerディレクトリ以下にある。
PHPのDockerfileは以下の通り
FROM php:7.2.8-fpm RUN docker-php-ext-install pdo_mysql mysqli mbstring WORKDIR /src
PHP 7.2を持ってきている。
そしてこれがnginxのDockerfile (./docker/nginx/Dockerfile)
FROM nginx:latest COPY ./default.conf /etc/nginx/conf.d/default.conf
こっちが一番重要なnginxの設定ファイル (./docker/nginx/default.conf)。
今回は、https化まではしていないから結構シンプルになっている。
server { listen 80; server_name _; root /src/public; index index.php; access_log /src/docker/nginx/logs/access.log; error_log /src/docker/nginx/logs/error.log; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
諸々のパスはコンテナ側に準拠している。
そして一番重要なのがrootを設定すること。
環境を立ち上げる
ログファイルを格納するディレクトリを作る $ mkdir ./docker/nginx/logs MySQLで使用するディレクトリを作る、このディレクトリはignoreしないとgit add できなくなる $ mkdir ./docker/mysql githubで管理した時にignoreされたファイルをなかったら作る $ echo '' >> ./storage/logs/laravel.log 権限を与える $ sudo chmod 777 -R ./storage/ ./bootstrap/ $ composer install Laravelのおまじない $ cp .env.example .env $ php artisan key:generate $ docker-compose up -d
これでLaravelが動く最低限の環境ができた