Laravel環境構築(最低限のみ)
今日はタイトルにある通り、Laravelの環境構築について書いてみたいと思います。
普段の業務でもLaravelを使用していますが、新しくプロダクトを作るとかでもない限り開発環境を一から作ることってなかなか無いと思います。
実際入社した際にもDockerによってそこまで詰まることなく環境構築できました。
なので、改めて自分でやってみようということで書いていきたいと思います。
今回のゴール
- LaravelとMySQLによるローカル環境を構築する
Docker
今回はDockerを使って構築していきます。
Dockerはコンテナ型の仮想化技術であり、ホストOS上で動作しているDocker Engineの上にコンテナと呼ばれるアプリケーションの実行環境を構築するものです。
同じ環境を速やかに構築・共有できるという点でチームでの開発においては今や不可欠な技術の一つではないかと思います。
Docker とは開発者やシステム管理者が、コンテナでアプリケーションを 構築(build)、実行(run)、共有(share)するためのプラットフォームです。アプリケーションをデプロイするために、コンテナを利用する事をコンテナ化( containerization )と呼びます。コンテナは新しくありませんが、コンテナを使えばアプリケーションのデプロイがより簡単になります。
引用元:Docker ドキュメント日本語化プロジェクト | Dockerの概念
今回はDocker HubにあるPHP公式のDockerイメージを使用します。
PHP公式だけでもいくつか種類がありますが、その中でもPHPとApacheが一緒になったイメージを使ってDockerfileを書いていきます。
FROM php:8.0-apache COPY --from=composer:latest /usr/bin/composer /usr/bin/composer RUN apt-get update && apt-get install -y \ git zip unzip \ && docker-php-ext-install pdo_mysql ENV APACHE_DOCUMENT_ROOT /var/www/html/public RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
1行ずつ解説していきます。
FROM php:8.0-apache
PHP8.0とApacheが一緒になったイメージを指定しています。
バージョンは各自お好みで指定してください。
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
マルチステージビルドを使ってcomposerをインストールしています。
マルチステージビルドとは1つのDockerfileの中で複数のビルドを行うことができるというものです。ビルドされたステージから他のステージにコピーすることができ、不要な部分はそのまま破棄されます。 そうすることで最終的なファイルサイズを小さくすることができます。
ここでは--from=composer:latest
でイメージを指定しています。そしてcomposerイメージの/usr/bin/composer
の中身をビルドされたPHP-Apacheの/usr/bin/composer
にコピーしている、ということです。
RUN apt-get update && apt-get install -y \ git zip unzip \ && docker-php-ext-install pdo_mysql
必要なパッケージをインストールしています。
apt-get update
でパッケージリストの更新を行い、apt-get install
でインストールを実行しています。-y
はすべてYes
と回答するオプションです。
docker-php-ext-install
はPHP拡張機能を入れるためにPHP公式が提供しているコマンドです。
ENV APACHE_DOCUMENT_ROOT /var/www/html/public RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
デフォルトではApacheのDocumentRootは/var/www/html
になっています。それをvar/www/html/public
に変更する為の処理になります。
こちらもPHP公式がDocker Hubに書いています。
docker-compose.yml
続いてdocker-compose.ymlを書いていきます。
version: "3.9" services: app: build: context: . dockerfile: ./docker/php/Dockerfile volumes: - ./src/:/var/www/html/ ports: - 8080:80 db: image: mysql:5.7 ports: - 3306:3306 volumes: - db_data:/var/lib/mysql environment: - MYSQL_DATABASE=mysql - MYSQL_USER=user - MYSQL_PASSWORD=password - MYSQL_ROOT_PASSWORD=root volumes: db_data:
先程作成したDockerfileをapp
のbuild.dockerfile
に指定しています。
また、ホストの8080番ポートとコンテナの80番ポートを紐付けています。こうすることでブラウザでlocalhost:8080
にアクセスしたときにコンテナの80番ポートに繋がるように設定できます。
volumes
でホストの/src
ディレクトリとコンテナの/var/www/html
ディレクトリをリンクさせています。
また、db
についてはDockerfileではなくMySQL5.7の公式イメージを使用しています。db.environment
で初期ユーザーの設定をしている他、volumes
で指定したボリュームをdb.volumes
でコンテナと紐付けています。こうすることでdocker compose down
でコンテナを破棄しても再度立ち上げた時にデータを永続化することができます。
ここまでできたら、
docker-compose build --no-cache docker compose up -d
でコンテナを起動します。
Laravelのインストール
あとはLaravelをインストールするだけです。
docker compose exec app composer create-project --prefer-dist laravel/laravel .
app
コンテナの中でLaravelをインストールします。
しばらく待つとインストールが完了するのでlocalhost:8080
にアクセスしてみると、
無事にLaravelの初期画面が表示されました。
まとめ
以上、Laravelの環境構築についてまとめてみました。
ただ、タイトルにあるように本当に必要最低限なので実際にはもっと設定が必要になると思います。
パッケージや拡張機能も入れるでしょうし、NginxをWebサーバーとして立てる構成もあります。
この記事ではとりあえず最低限の環境構築というところを目指したので、上記のような追加の構成については追々記事にできればと思います。