アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

DockerでLaravel 11の開発環境を構築する手順

Featured image of the post

Laravelは、PHPで構築された強力なフレームワークで、モダンなウェブアプリケーション開発に非常に適しています。特に、バージョン11では多くの新機能とパフォーマンス向上が施されています。このブログ記事では、Dockerを使ってLaravel 11の開発環境を手軽にセットアップする方法を説明します。

1. 必要なツールの準備

Laravel開発環境をDockerで構築するために、以下のツールが必要です。

未だ導入していない方は以下の記事を参考にDockerの導入から進めてみてください。

📄Arrow icon of a page linkDockerインストール方法:OS別ガイド

2. プロジェクトのディレクトリ構成

まず、プロジェクト用のディレクトリを作成し、その中でDockerの設定を行います。

mkdir laravel11-docker
cd laravel11-docker

3. Dockerfileの作成

プロジェクトのルートディレクトリにDockerfileを作成し、Laravel 11を実行するためのPHP環境を定義します。

FROM php:8.2-fpm

# システム更新と必要な拡張機能のインストール
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libpq-dev \
    && docker-php-ext-install pdo pdo_mysql

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

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

# 必要に応じてNode.jsやnpmをインストールする場合
RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - && apt-get install -y nodejs

4. Docker Composeの設定

次に、docker-compose.ymlファイルを作成し、PHP、MySQL、Nginxなど必要なコンテナを定義します。

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: laravel_app
    volumes:
      - .:/var/www
    ports:
      - "9000:9000"
    networks:
      - laravel

  web:
    image: nginx:alpine
    container_name: nginx_web
    volumes:
      - ./laravel11:/var/www
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8080:80"
    depends_on:
      - app
    networks:
      - laravel

  db:
    image: mysql:8.0
    container_name: mysql_db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: laravel
      MYSQL_USER: laravel
      MYSQL_PASSWORD: secret
    volumes:
      - dbdata:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - laravel

networks:
  laravel:

volumes:
  dbdata:

5. Nginxの設定ファイル

nginx.confファイルを作成し、Nginxの設定を定義します。このファイルは、LaravelプロジェクトのエントリーポイントをNginxに認識させるために必要です。

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    root /var/www/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;
    }

    location ~ /\.ht {
        deny all;
    }
}

6. Laravel 11のインストール

docker-compose.ymlの設定が終わったら、次にLaravel 11をインストールします。

docker-compose run --rm app composer create-project --prefer-dist laravel/laravel .

このコマンドは、Dockerのappサービスを利用してLaravel 11をプロジェクトにインストールします。

7. .envファイルの設定

Laravelの.envファイルを編集して、データベース設定をコンテナに合わせて変更します。

# APP_URLは、NginxやDockerのポート設定に合わせて変更する必要があります
APP_URL=http://localhost:8080

# DBの設定を定義します
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret

Dockerコンテナ内で書き込み権限を付与する

storageディレクトリとそのサブディレクトリに対して正しい書き込み権限を設定します。次のコマンドを使って、コンテナ内で書き込み権限を設定できます。

docker-compose exec app chmod -R 775 /var/www/storage
docker-compose exec app chown -R www-data:www-data /var/www/storage

# シンボリックリンクを作成
docker-compose exec app php artisan storage:link
シンボリックリンクの役割

Laravelでは、ユーザーがアップロードしたファイルやその他の公開ファイルを保存するために、storage/app/publicディレクトリを使いますが、これらのファイルをブラウザからアクセスできるようにするために、public/storageディレクトリにシンボリックリンクを作成します。これにより、アプリケーションはpublic/storageディレクトリ経由でアップロードされたファイルにアクセスできるようになります。

正常に動作しているか確認する方法
  1. ファイルアップロードの確認:
    アプリケーションが正常にファイルをアップロードし、そのファイルがpublic/storage経由でアクセスできるか確認します。
  2. リンクの確認:
    端末で次のコマンドを実行して、シンボリックリンクが正しく作成されているか確認します。
    ls -l public/storage

    これにより、public/storagestorage/app/publicへのリンクとして表示されていることを確認できます。

  3. ファイルのアクセス:
    アップロードしたファイルがhttp://localhost/storage/filename.extの形式でブラウザからアクセスできるか確認します。
シンボリックリンクのトラブルシューティング

もしブラウザからファイルにアクセスできない場合、以下を確認します。

  1. ファイルパーミッション:
    アップロードされたファイルやディレクトリの権限が正しく設定されているか確認します。storageディレクトリには書き込み権限が必要です。
    docker-compose exec app chmod -R 775 storage
  2. Nginxの設定:
    Nginxを使用している場合、public/storageへのアクセスが許可されているか確認します。通常、Nginxの設定ファイルにはpublicディレクトリをルートとして設定する必要があります。

8. Dockerコンテナの起動

すべての設定が完了したら、以下のコマンドでDockerコンテナを起動します。

docker-compose up -d

これで、Nginx、PHP-FPM、MySQLのコンテナが立ち上がり、Laravel 11の開発環境が整います。ブラウザでhttp://localhost:8080にアクセスすると、Laravelのウェルカムページが表示されるはずです。

Image in a image block

9. 開発環境の確認と調整

  • ログインシステムなどを使う場合、Laravelのマイグレーションを実行します。
    docker-compose exec app php artisan migrate
  • 開発時にはキャッシュをクリアすることも重要です。
    docker-compose exec app php artisan cache:clear

まとめ

Dockerを使用することで、Laravel 11の開発環境を素早く、かつ再現性高く構築することができます。開発者間での環境の違いによる問題を回避できるため、チーム開発にも最適です。今回の手順を使って、ぜひLaravel 11の新機能を活用したプロジェクト開発を始めてみてください。

あなたを爆速で成長させるメンタリングプログラムはこちらから↓↓

RUNTEQ(ランテック) - 実践型Webエンジニア養成プログラミングスクールの入会