Laravelの開発環境をDockerで構築

手順

必要な準備

  • Dockerのインストール: Docker Desktopをインストールしておいてください。
  • Docker Compose: Docker DesktopにはDocker Composeが含まれているので、追加インストールは不要です。

ディレクトリ構成

laravel-circulation
├── docker-compose.yml        # Docker Compose設定ファイル
├── nginx
│   └── default.conf          # Nginxの設定ファイル
└── src
    ├── app                   # Laravelのアプリケーションコード
    ├── bootstrap             # Laravelのブートストラップファイル
    ├── config                # 設定ファイル
    ├── database              # データベースマイグレーション等
    ├── public                # Webサーバが公開するディレクトリ (index.phpなど)
    ├── resources             # ビューやフロントエンドリソース
    ├── routes                # ルーティング設定
    ├── storage               # ストレージ関連 (ログなど)
    ├── tests                 # テストファイル
    └── vendor                # Composerでインストールされたパッケージ

docker-compose.yml の作成

Laravelとその関連サービス(Webサーバーやデータベース)の設定を行います。

以下の例は、NginxをWebサーバーに使い、MySQLをデータベースに設定しています。

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: laravel_app
    working_dir: /var/www/html
    volumes:
      - ./src:/var/www/html
    networks:
      - laravel_network

  webserver:
    image: nginx:alpine
    container_name: laravel_webserver
    working_dir: /var/www/html
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8080:80"
    networks:
      - laravel_network

  db:
    image: mysql:8.0
    container_name: laravel_db
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: laravel
      MYSQL_USER: laravel_user
      MYSQL_PASSWORD: laravel_password
    volumes:
      - dbdata:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - laravel_network

networks:
  laravel_network:
    driver: bridge

volumes:
  dbdata:

Nginxの設定ファイル nginx/default.conf の作成

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    root /var/www/html/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Dockerfile

DockerfileでComposerのインストール

# ベースイメージを指定
FROM php:8.1-fpm

# システムの依存関係をインストール
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libzip-dev \
    libicu-dev \
    libonig-dev \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install \
        pdo_mysql \
        zip \
        intl \
        opcache \
        gd

# Composerのインストール
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# 作業ディレクトリを設定
WORKDIR /var/www/html

# アプリケーションファイルの権限を設定
RUN chown -R www-data:www-data /var/www/html

Laravelのインストール

次に、Dockerコンテナ内でLaravelをインストールします。

# Dockerコンテナを起動
docker-compose up -d

# Laravelをインストール
docker-compose exec app composer create-project --prefer-dist laravel/laravel .

参考サイト

UnexpectedValueException PHP 8.1.30 10.48.22 The stream or file “/var/www/html/storage/logs/laravel.log” could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file “/var/www/html/storage/logs/laravel.log” could not be opened in GitHub Copilot このエラーは、Laravelアプリケーションがログファイルに書き込もうとした際に、 ファイルの書き込み権限が不足しているために発生しています。以下の手順で解決できます。 1)Dockerコンテナに入る docker exec -it <コンテナ名> /bin/bash 2)権限を変更する chmod -R 775 /var/www/html/storage chown -R www-data:www-data /var/www/html/storage 【Laravel】 Bladeテンプレートエンジンを使用する場合、 ファイル名の末尾に.blade.phpを付ける必要があります。 php artisan serveは、Laravelアプリケーションのためのビルトイン開発サーバーを起動するコマンドです https://reffect.co.jp/laravel/laravel-breeze-next-js https://www.udemy.com/course/nextjslaravelbreeze/?srsltid=AfmBOop6AB002927qfNnmtNHzLx2oS9NSaeWHsnH8TJoPRcB0iE2DFNa&couponCode=ST6MT103124 Breezeとは Laravel Breezeは、Laravelアプリケーションにシンプルで軽量な認証機能を提供するスターターパッケージです。 ユーザー登録、ログイン、パスワードリセットなどの基本的な認証機能をすぐに利用できるようにします。 Breezeのインストール手順 以下の手順に従って、Laravel Breezeをインストールします。 ComposerでBreezeをインストール docker exec -it laravel_app composer require laravel/breeze –dev Breezeのインストール docker exec -it laravel_app php artisan breeze:install NPMパッケージのインストールとビルド docker exec -it laravel_app npm install docker exec -it laravel_app npm run dev マイグレーションの実行 docker exec -it laravel_app php artisan migrate Dockerに入る docker exec -it laravel_app /bin/bash コンテナ内でLaravelの開発サーバーを起動 root@25a3630a398d:/var/www/html# php artisan serve php artisan serveは不要: Dockerを使用する場合、php artisan serveコマンドは通常必要ありません。 このコマンドは主に、Dockerを使用せずにローカル環境で開発する場合に便利です。