0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerを使ったLaravelプロジェクトのセットアップとトラブルシューティング

0
Posted at

はじめに

Dockerを利用してLaravelプロジェクトをセットアップする過程で、いくつかの問題に直面しました。この記事では、プロジェクトのセットアップ手順とトラブルシューティングの内容を詳細にまとめ、特に問題の背景要因とエラーの原因について分析します。

環境設定

DockerとDocker Composeのインストール

最初にDockerとDocker Composeをインストールしました。公式ドキュメントに従い、以下のコマンドを実行してインストールを完了しました。

brew install docker docker-compose

Laravelプロジェクトの作成

次に、Laravelプロジェクトを作成しました。プロジェクト名はproductmanagementとし、以下のコマンドでプロジェクトを作成しました。

composer create-project --prefer-dist laravel/laravel productmanagement

Docker Composeの設定

docker-compose.ymlの作成

LaravelプロジェクトをDockerで動かすために、docker-compose.ymlファイルを作成しました。

version: '3.8'
services:
  app:
    image: php:8.0-fpm
    container_name: app
    working_dir: /var/www
    volumes:
      - .:/var/www
      - ./php.ini:/usr/local/etc/php/php.ini
    networks:
      - app-network

  web:
    image: nginx:alpine
    container_name: web
    working_dir: /var/www
    volumes:
      - .:/var/www
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8080:80"
    networks:
      - app-network

  db:
    image: mysql:8.0
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: productdb
      MYSQL_USER: user
      MYSQL_PASSWORD: userpassword
    volumes:
      - clean_productmanagement_db-data:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  clean_productmanagement_db-data:

Nginx設定ファイルの作成

Nginxの設定ファイルnginx.confを作成しました。

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;

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

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

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

トラブルシューティング

ディレクトリ構造の問題

Laravelプロジェクトのディレクトリ構造が混乱していたため、以下の手順で整理。
...

  1. 新しいプロジェクトディレクトリの作成

    mkdir ~/Desktop/portfolio/tehyon/clean_productmanagement
    

...
2. 必要なファイルのコピー

cp -r ~/Desktop/portfolio/tehyon/productmanagement/* ~/Desktop/portfolio/tehyon/clean_productmanagement/

...
3. 元のディレクトリの削除

注意: 重要なファイルがないことを確認してから削除してください。

rm -rf ~/Desktop/portfolio/tehyon/productmanagement

...

背景要因とエラーの原因分析

ディレクトリ構造の混乱

複数の場所に同じ名前のディレクトリが存在していたため、どのディレクトリが正しいプロジェクトディレクトリなのかが不明瞭になりました。ボリュームのマウント設定が正しく機能しなかった可能性があります。ディレクトリを整理することで、どのファイルがどのコンテナにマウントされるべきかが明確になりました。

OCI Runtime Exec Failedエラー

このエラーは、ホストマシンの現在の作業ディレクトリがコンテナのマウントされたファイルシステムの外部にあることが原因で発生します。Dockerコンテナ内での作業ディレクトリが正しく設定されていない場合に発生することが多いです。この問題を回避するために、以下のコマンドを使用してコンテナにアクセスしました。

docker exec -w / -it app /bin/sh

Laravelのログディレクトリが見つからない問題

Laravelのログディレクトリが見つからない場合、マウントされたボリュームの設定に問題があることが多いです。特に、ホストマシンのディレクトリ構造が複雑な場合、正しいパスを指定することが困難になります。この場合、docker-compose.ymlファイルの設定を確認し、適切なディレクトリがマウントされていることを確認しました。

Dockerコンテナの再設定

コンテナを再作成し、ボリュームを正しくマウントするために以下の手順を実行しました。
...

  1. コンテナの停止

    docker compose down
    

...
2. 不要なボリュームの削除

docker volume prune

...
3. 新しい設定でDocker Composeを起動

cd ~/Desktop/portfolio/tehyon/clean_productmanagement
docker compose up -d

...

ディレクトリ構造の確認

コンテナ内でディレクトリ構造を確認し、必要なファイルが正しく配置されていることを確認しました。
...

docker exec -it app /bin/sh
ls -l /var/www

...
ディレクトリ構造の確認時に問題がある場合、以下のコマンドを実行して更に詳細を確認します。

docker exec -it app /bin/sh
find / -name "storage"

...

パーミッションの設定

ストレージとキャッシュディレクトリのパーミッションを設定しました。

docker exec -it app /bin/sh
cd /var/www
chmod -R 775 storage
chmod -R 775 bootstrap/cache

...

ログの確認

NginxとLaravelのログを確認し、問題の原因を特定しました。
...

  1. Nginxエラーログの確認

    docker exec -it web /bin/sh -c "cat /var/log/nginx/error.log"
    

...
2. Laravelログの確認

docker exec -it app /bin/sh -c "cd /var/www/storage/logs && tail -f laravel.log"

...

学んだこと

ホストマシン上のディレクトリとコンテナ内のディレクトリのマウント設定に誤りがあると、ファイルが正しくマウントされず、結果として必要なファイルが見つからない問題が発生しました。この問題を解決するために、docker-compose.ymlファイルのボリューム設定を修正しました。

これらの手順を実行することで、Dockerコンテナが正常に動作し、Laravelプロジェクトが正しくセットアップされました。ブラウザでhttp://localhost:8080にアクセスして、Laravelのデフォルトページが表示されることを確認しました。

まとめ

Dockerを使用してLaravelプロジェクトをセットアップする過程で、ディレクトリ構造やボリュームのマウント、パーミッションの設定など、いくつかのトラブルシューティングを行いました。これらの経験を通じて、DockerとLaravelの設定に関する知識を深めることができました。この記事が、同様の問題に直面している方々の参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?