Laravel12 + PHP8.4 ＋ Nginx1.27.5 ＋ MySql8.4で環境構築(Docker)

以前、Laravel8で環境構築をしたため最新版としてLaravel12の環境構築に関して記載する。
今回は自分の学習も兼ねて、前のファイルの配置(Laravel8)など変更している。

本記事は過去のLaravel8の環境構築の手順を参考にしている。
https://qiita.com/pig_buhi555/items/8693a578820444f0da91

また、php.iniの内容も過去に書いた記事の内容を参考にしている。
https://qiita.com/pig_buhi555/items/48da77582b66a2e1b7c0

# 1. ファイルの配置
以下の配置で、ファイルを作成していきます。
```
/Laravel12_study
├─ /docker
| ├─ /db
| ├─ /nginx
|   └─ default.conf 
| └─ /php
|   └─ php.ini 
| └─ /Dockerfile 
├─ /laravel12
└─ docker-compose.yml
```

# 2. php.ini
2025/5/26更新
```php.ini
[Date]
#タイムゾーンの設定
date.timezone = "Asia/Tokyo"

[mbstring]
default_charset=EUC-JP
mbstring.language = "Japanese"

[opcache]
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
# 画面に変更が反映されるまでの時間(開発環境のため0)
; opcache.revalidate_freq=60
opcache.revalidate_freq=0
opcache.fast_shutdown=1
opcache.enable_cli=1

#パフォーマンスチューニング
zend_extension = opcache
opcache.enable_cli = 1
opcache.jit = tracing
opcache.jit_buffer_size = 128M
```

# 3. Dockerfile
```Dockerfile
FROM php:8.4-fpm 
RUN apt-get update && apt-get install -y \
zlib1g-dev \
libzip-dev \
vim \

# コンテナ内でzip・pdo_mysql・opcacheの3つのPHPの拡張モジュールインストール
&& docker-php-ext-install zip pdo_mysql opcache

# カレントディレクトリ(コンテナに入るとここ)
WORKDIR /var/www/laravel12

# コンポーザーインストール
COPY --from=composer /usr/bin/composer /usr/bin/composer

# rootでインストール許可
ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
```

# 4. default.conf
```default.conf
server {
  listen 80;
  # ここを変更
  root /var/www/laravel12/public;
  index index.php;
  
  location / {
    # ここを変更
    root /var/www/laravel12/public;
    index index.php;
    try_files $uri $uri/ /index.php$query_string;
  }
  
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass app:9000; 
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}
```

# 5. docker-compose.yml
```docker-compose.yml
version: "3"
services:
  app:
    container_name: app
    build: ./docker
    volumes:
      - ./laravel12:/var/www/laravel12
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini
  nginx:
    image: nginx:1.27.5
    container_name: nginx
    ports:
      - 8000:80
    volumes:
      - .:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    working_dir: /var/www
    depends_on:
      - app
  db:
    image: mysql:8.4
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: database
      MYSQL_USER: db-user
      MYSQL_PASSWORD: db-pass
      TZ: "Asia/Tokyo"
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/db/data:/var/lib/mysql
    ports:
      - 3306:3306

  # http://localhost:4040/
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db
      - PMA_USER=root
      - PMA_PASSWORD=root
    # dbのサービス名
    links:
      - db
    ports:
      - 4040:80
    volumes:
      - ./phpmyadmin/sessions:/sessions
```

# 6. Laravel12インストール
laravel12フォルダにインストールする
```
composer create-project --prefer-dist laravel/laravel ./ "^12"
```

# 7. 画面
・Laravelの初期画面
http://localhost:8000/
![スクリーンショット 2025-05-23 13.12.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497869/530e09ab-8936-47a7-9844-6faed115925a.png)


・phpMyAdmin
http://localhost:4040/

# 8. コマンド
・起動
```
$ docker-compose up -d
```
・終了
```
$ docker-compose down
```
以下のコマンドでコンテナに入れます。
```
$ docker-compose exec app bash
```