9
2

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でLaravel6系環境構築

Last updated at Posted at 2021-11-09

執筆の経緯

  • 前回の記事が結構見てもらえて、Qiita執筆の味を占めたから。
  • 自分がハマりまくったので、これはハマり回避できる環境構築記事を書かねばという使命感を感じたから。

想定読者

  • 前回の記事を理解している方。
    • 前回の記事の構成をLaravel用に編集する形で環境構築します。

今回のゴール

  • DockerでLaravelの環境構築を行い、welcomeページを拝む。

実行環境と筆者のレベル感

実行環境

  • PC : MacBookAir(M1, 2020)
  • OS : macOS Big Sur11.4
  • チップ : Apple M1
  • メモリ : 16GB
  • DockerDesktop : 3.5.2
  • Docker : 20.10.7

筆者のレベル感

  • 2021年10月から勤務開始した新米エンジニア。
    フロント担当なので、バックエンドは疎いです。
    ともに育ちましょう。

ファイル構成

.
├── docker
│   ├── mysql
│   │   ├── Dockerfile
│   │   ├── my.cnf
│   │   └── data
│   └── php
│       ├── 000-default.conf
│       └── Dockerfile
├── docker-compose.yml
└── src
    ├── backend
    └── frontend

ステップ1 PHPのDockerfileを修正&apacheの設定ファイルを作成する

Dockerfile
FROM php:7.3-apache

COPY ./000-default.conf /etc/apache2/sites-available/000-default.conf

COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer

RUN apt-get update  \
    && apt-get -y install \
    git \
    zip \
    unzip \
    vim \
    && docker-php-ext-install pdo_mysql bcmath mbstring \
    && a2enmod rewrite
    
WORKDIR /var/www/html

EXPOSE 80
000-default.conf
<VirtualHost *:80>
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
	<Directory /var/www/html>
		AllowOverride All
		Options Indexes FollowSymLinks
		Require all granted
	</Directory>

</VirtualHost>

3行目 ※以下全てPHPのDockerfileの行数です。

5行目

9〜12行目

  • 以前はインストールしていなかったパッケージたちです。
    何故インストールしたかはとても簡単で、composerでLaravelプロジェクトを作成しようとしたところ、「こいつらをインストールしろ」とcomposerに怒られたからです笑
    • gitとvimはいいとして、zipとunzipはファイルの圧縮・解凍を行うライブラリのようです。名前のまんまですね。

14行目

ステップ2 MySQLのDockerfileを修正する

Dockerfile
FROM --platform=linux/x86_64 mysql:8.0

COPY ./my.cnf /etc/mysql/conf.d/my.cnf

EXPOSE 3306
my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
explicit-defaults-for-timestamp=1
general-log=1
general-log-file=/var/log/mysql/mysqld.log

[client]
default-character-set=utf8mb4

1行目 ※以下全てMySQLのDockerfileの行数です。

3行目

  • データベース内での文字化けを防ぐため、charasetを設定。
    • この辺り正直詳しくは分かっていない。参考文献『Dockerの公式MySQLの文字コードをutf8mb4に設定する』のコピペで済ませてしまっている。

ステップ3 docker-compose.ymlを修正する

docker-compose.yml
version: '3'
services:
  backend:
    build:
      context: ./docker/php
      dockerfile: Dockerfile
    ports:
      - "80:80"
    volumes:
      - ./src/backend:/var/www/html
    depends_on:
      - db

  db:
    build:
      context: ./docker/mysql
      dockerfile: Dockerfile
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - "3306:3306"
    volumes:
      - ./docker/mysql/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=pass

18行目

  • MySQLのパスワードの認証方法を「mysql_native_password」に変更しています。
    • 今回はMySQLを用いた動作検証しませんが、どうせつまるポイントなので書いておきます。
    • Mysql8系から「caching_sha2_password」というセキュリティ性の高い認証方法が導入されましたが、各種ライブラリやソフトが対応していないケースがあるため、変更しています。
    • ちなみにPHPは7.2.4からcaching_sha2_password」に対応しているようですが、今回PHP7.3を使用していますが、何故かここを変更しないとLaravelからdbへ接続できませんでした。

動作確認

Laravelのwelcomeページを拝む。

  • まずはイメージのbuildとコンテナの立ち上げ。2〜3分かかります。
    • Dockerfileの設定を変えた場合はその都度buildが必要です。
$ docker compose build
$ docker compose up -d
  • 念の為インストールされているかどうかPHPとcomposerのバージョン確認をしておきましょう。
$ docker compose exec backend bash
root@123456789123:/var/www/html# php -v

PHP 7.3.32 (cli) (built: Oct 28 2021 17:01:17) ( NTS )
// 省略

root@123456789123:/var/www/html# composer -V

Composer version 2.0.14 2021-05-21 17:03:37
  • いよいよLaravelをインストールします。
    • コマンドの意味はカレントディレクトリにlaravel6系をインストールしてねという意味です。
      src/backend内にファイルが作成されていくはずです。
    • 最後の「.」を何か単語に変えればその名前のディレクトリにプロジェクトが作成されます。
      src/backend配下に指定したディレクトリが作成されます。
root@123456789123:/var/www/html# composer create-project --prefer-dist "laravel/laravel=6.*" .
  • http://localhost/public/にアクセス。以下の画面になれば無事成功。
    • LaravelはpublicがルートのURL。
      スクリーンショット 2021-11-06 23.39.50.png

次回予告

  • Laravelで実際にCRUD処理をやってみたいと思います。

参考文献

今回も多くのサイトおよび記事を参考にさせていただきました。
ありがとうございます!
・(Docker-Laravel-apache) ルーティングができない原因と対処法
・Apacheのmod_rewrite設定メモ
・M1 MacでDockerを使った開発環境構築にハマった
・MySQL8.0 認証方式を変更する(Laravel5)
・Docker に Composer をインストールするベストプラクティス(と解説)
・【後編】絶対に失敗しないDockerでLaravel + Vue.jsの開発環境(LEMP環境)を構築する方法〜MacOS Intel Chip対応〜
・Laravelをcomposerでインストールする方法
・composer の–prefer-distってよく使うけど何してる?
・【初心者向け】Laravelで419エラーが発生してPOSTできないとき
・Dockerの公式MySQLの文字コードをutf8mb4に設定する

9
2
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
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?