- IT総合
- 2022-12-12 - 更新:2022-12-14
Dockerを使ってLaravel9の開発環境を構築してみたいと思います。
XAMPPやレンタルサーバーを使うよりお手軽に出来るので是非試してみてください。
OS等の環境は以下の通りです。
OS: Windows10
Docker Desktop: v4.14.1
Visual Studio Code: v1.74.0
Dockerで環境構築
予め必要なファイル等を準備します。
Laravelのプロジェクト名は「laravel-app
」と仮定します。
docker/app/000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html/laravel-app/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/html/laravel-app/public> AllowOverride All </Directory> </VirtualHost>
docker/app/Dockerfile
# dockerイメージの選択 # 予めPHPとApacheがインストールされているイメージをDocker Hubからダウンロード FROM php:8.0-apache # 設定ファイルをdockerコンテナ内のPHP、Apacheに読み込ませる # ADD:ローカルのファイルをDockerコンテナ内にコピーする ADD php.ini /usr/local/etc/php/ ADD 000-default.conf /etc/apache2/sites-enabled/ # Composerのインストール # RUN:コンテナ内でコマンド実行する RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer # Node.jsをインストール RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - RUN apt-get install -y nodejs # ミドルウェアのインストール RUN apt-get update \ && apt-get install -y \ git \ zip \ unzip \ vim \ libpng-dev \ libpq-dev \ && docker-php-ext-install pdo_mysql # Laravelで必要になるmodRewriteを有効化する RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled RUN /bin/sh -c a2enmod rewrite
docker/app/php.ini
[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.language = "Japanese"
docker/db/my.cnf
空ファイルでOK
.gitignore
gitでソース管理をするとき、mysql.sock
がエラーを起こす場合があるので設定。不要であれば必要なし。
docker/db/data/mysql.sock
docker-compose.yml
# Compose fileのバージョン指定 version: '3' # どんなコンテナを立ち上げるか services: # --------------------------------- # laravelを動かすコンテナ # --------------------------------- app: # どのポートを開いて繋ぐか。下記はコンテナの80番ポートを開いて、ホストの80番につなぐ ports: - "80:80" # docker/appディレクトリにあるDockerfileを使って、コンテナをビルドするという指定 build: ./docker/app # コンテナの名前を指定 container_name: laravel_app # ローカルのディレクトリとコンテナ上のディレクトリのリンクを設定 # ./src は docker-composer.yml のディレクトリ直下にある src を設定している # コンテナが作成されると src ディレクトリからコンテナの /var/www/html にアクセスすることができる volumes: - ./src:/var/www/html # ---------------------------------- # MySQLを動かすコンテナ # ---------------------------------- db: # Docker HubからMySQL5.7の公式イメージをダウンロードしてくる指定 image: mysql:5.7 container_name: laravel_db # コンテナ内の環境変数を指定 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: laravel_db MYSQL_USER: laravel_user MYSQL_PASSWORD: laravel_pass TZ: 'Asia/Tokyo' # 起動時のコマンド command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci # ディレクトリ同期。設定ファイルとMySQLのデータが保存される場所を同期している。 # コンテナは基本的に起動時に変更されてもコンテナ自体が止まるとデータが消えてしまうため、保存しておきたいものはホストマシンと同期しておく必要がある。 volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf ports: - 3306:3306 # ---------------------------------- # phpMyAdminを動かすコンテナ # ---------------------------------- phpmyadmin: # Docker Hubからイメージをダウンロード image: phpmyadmin/phpmyadmin:5 # コンテナの名前 container_name: laravel_phpmyadmin # コンテナと他のサービスを繋げる links: - db # localhost:8080 で phpmyadmin の管理画面にアクセス ports: - 8080:80 # セッション情報をボリュームに設定して永続化 volumes: - ./docker/phpmyadmin/sessions:/sessions
GitHubにセットを用意しておいたので、そちらをダウンロードして使っていただいても構いません。
https://github.com/ksproducts/myDockerInitialPackage_for_Laravel9
準備が出来たら次のコマンドを実行して環境を構築します。
docker-compose build
構築が完了したら、出来上がったコンテナ達をバックグラウンドで起動します。
docker-compose up -d
プロセスを表示して動作しているか確認するには
docker-compose ps
Laravelのインストール
続いてLaravelのインストール作業に入ります。
まずはコンテナのシェルに入る必要があるので以下のコマンドを実行します。
docker exec -it laravel_app /bin/bash
Laravelのプロジェクトを作成します。
書式は次のようになります。
composer create-project "laravel/laravel=バージョン" プロジェクト名
今回はバージョン9なので次のようになります。
composer create-project "laravel/laravel=9.*" laravel-app
インストールが完了したらプロジェクトのディレクトリに移動します。
cd laravel-app
ログ等を保存するためにstorageディレクトリのパーミッションを変更します。
chmod 777 -R storage
アプリケーションキーを作成します。
php artisan key:generate
src/laravel-app/config/app.php
を修正
timezone
の設定をAsia/Tokyo
に変更
src/laravel-app/.env
ファイルを編集し、接続するデータベース名などを設定
以下*の付いた4カ所を修正
※DB_HOST
は通常localhost
だがDockerの場合、DBコンテナを指定
DB_CONNECTION=mysql DB_HOST=laravel_db * DB_PORT=3306 DB_DATABASE=laravel_db * DB_USERNAME=laravel_user * DB_PASSWORD=laravel_pass *
データベースを初期化
php artisan migrate
5つのテーブルが出来ていればOK
- failed_jobs
- migrations
- password_resets
- personal_access_tokens
- users
コンテナのシェルから出る場合はexit
コマンドを実行します。
バリデーションメッセージの日本語化
コンテナシェルにいるついでに、Laravelのバリデーションメッセージを日本語化しておくと後々便利です。
バリデーションメッセージを日本語化するには以下のコマンドを順に実行します。
php -r "copy('https://readouble.com/laravel/8.x/ja/install-ja-lang-files.php', 'install-ja-lang.php');" php -f install-ja-lang.php php -r "unlink('install-ja-lang.php');"
src/laravel-app/config/app.php
を開き、'locale'
を'ja'
に変更する
これでフォーム入力時のエラーメッセージ等が日本語化されます。
まとめ
これで最低限一通りの環境構築は完了です。
XAMPPやレンタルサーバー上でのLaravel開発環境構築はかなり面倒でしたが、dockerを使うとかなり楽です。
参考になれば幸いです。
おまけ
Laravelでエラーが発生し、次のようなメッセージが表示された場合
The stream or file "/var/www/html/laravel-posting-app/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
これはエラーが出たのでログに書き込もうとしたが、書き込みが出来ないというエラーです。
storage/logs/laravel.logの権限がrootになっている場合に発生します。
apacheユーザーに変更してあげないといけないのですが、単純に該当のログファイルを削除してやると自身のユーザー権限で作成し直してくれるので、そのほうが手っ取り早いと思います。