👏

M1MacでLaradockを使ったApache2+MySQL8+phpMyAdminの環境構築

2022/01/28に公開

はじめに

Laravelの勉強のためにHomesteadを使おうとしたのですが、調べてみるとM1MacではVirtualBoxが動かないのでHomesteadが使えない事がわかりました。

そこで他の方法を調べたところ、Dockerベースで動くLaradockが使いやすそうだったため、こちらを使って環境構築することにしました。

ただLaradockのApache2やMySQLもM1Macで動かすにはコツが必要だったため、その記録のためこちらに情報をまとめました。

1. プロジェクト管理ディレクトリ内でLaradockをcloneする

ターミナルを開いてから、任意のディレクトリで以下コマンドを実行します。

$ git clone https://github.com/Laradock/laradock.git

2. laradockディレクトリ内に移動して.envファイルを作成する

.envのサンプルファイルから.envファイルをコピーして、.envファイルを作成します。

$ cd laradock
$ cp .env.example .env

3. 必要に応じて.envファイルを修正する

MySQLやPHPのバージョンをはじめ、.env.sampleに書かれた初期設定を変更したい場合は.envファイルを修正します。

$ vim .env

4. MySQLの設定変更

4.1 Dockerfileを修正する

M1MacでMySQLが動くように、Dockerfileを修正して明示的にx86_64を指定します。

$ cd mysql
$ vim Dockerfile
変更前
FROM mysql:${MYSQL_VERSION}
変更後
FROM --platform=linux/x86_64 mysql:${MYSQL_VERSION}

4.2 初期データベース構築用ファイルを作成する

MySQLで初期データベース構築用ファイルcreatedb.sqlを作成します。

$ cd docker-entrypoint-initdb.d/
$ cp -p createdb.sql.sample createdb.sql
$ vim createdb.sql
変更前
#CREATE DATABASE IF NOT EXISTS `dev_db_1` COLLATE 'utf8_general_ci' ;
#GRANT ALL ON `dev_db_1`.* TO 'default'@'%' ;
変更後(コメントアウトを外す)
CREATE DATABASE IF NOT EXISTS `dev_db_1` COLLATE 'utf8_general_ci' ;
GRANT ALL ON `dev_db_1`.* TO 'default'@'%' ;

5. Apacheの設定変更

5.1 Dockerfile修正

M1Macでapacheが動くように、Dockerfileを修正して明示的にx86_64にすることと、arm64版のgo-replaceコマンドを導入するように指定します。

$ cd apache
$ vim Dockerfile
変更前
FROM webdevops/apache:ubuntu-18.04
(省略)
CMD ["/bin/bash", "/opt/startup.sh"]

EXPOSE 80 443
変更後
FROM --platform=linux/x86_64 webdevops/apache:ubuntu-18.04     # --platform=linux/x86_64を追加
(省略)
CMD ["/bin/bash", "/opt/startup.sh"]

EXPOSE 80 443

# 以下を追加する
RUN wget -O "/usr/local/bin/go-replace"
"https://github.com/webdevops/goreplace/releases/download/1.1.2/gr-arm64-linux" \
  && chmod +x "/usr/local/bin/go-replace" \
  && "/usr/local/bin/go-replace" --version

5.2 sites以下に設定ファイルを置く

バーチャルホストの設定とそのディレクトリに関する設定をします。

$ cd sites
$ cp sample.conf.example laravel.conf
$ vim laravel.conf
変更前
<VirtualHost *:80>
  ServerName sample.test
  DocumentRoot /var/www/sample/public/
  Options Indexes FollowSymLinks

  <Directory "/var/www/sample/public/">
    AllowOverride All
    <IfVersion < 2.4>
      Allow from all
    </IfVersion>
    <IfVersion >= 2.4>
      Require all granted
    </IfVersion>
  </Directory>

</VirtualHost>
変更後
<VirtualHost *:80>
  ServerName laravel.test
  DocumentRoot /var/www/myapp/public/
  Options Indexes FollowSymLinks

  <Directory "/var/www/myapp/public/">
    AllowOverride All
    <IfVersion < 2.4>
      Allow from all
    </IfVersion>
    <IfVersion >= 2.4>
      Require all granted
    </IfVersion>
  </Directory>

</VirtualHost>

6. コンテナを走らせる

docker-compose.ymlファイルがあるディレクトリでコンテナを走らせます。なお初回はビルドが動くため時間がかかります。

$ cd ../../
$ docker-compose up -d apache2 mysql phpmyadmin

7. DB作成

DBを作成するには、mysqlのコンテナに入りcreatedb.sqlを実行します。以降、DBを追加する場合はcreatedb.sqlに追記し、下記のコマンドを実行すれば作成できます。

$ docker-compose exec mysql bash   # MySQLのコンテナに入る
root@????????????:/ mysql -u root -p < /docker-entrypoint-initdb.d/createdb.sql
root@????????????:/ exit

8. workspaceコンテナに入り、プロジェクトを作成する

$ docker-compose exec workspace bash
root@????????????:/var/www# ls
laradock    # 他のディレクトリもある場合あり(laradockと同じ場所に作られたディレクトリがある)
root@????????????:/var/www# composer create-project --prefer-dist laravel/laravel myapp     # myappという名前のプロジェクト作成

9. 上記で作成したプロジェクトの.envファイルをホスト側で編集する

$ cd myapp       # myappという名前のプロジェクトを作成しているのでそのディレクトリに入る
$ vim .env
変更前
DB_HOST=127.0.0.1
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
変更後
DB_HOST=mysql             # docker-compose.ymlに設定されたホスト名に合わせる
DB_DATABASE=dev_db_1      # create.sqlで作成したDB名と合わせる
DB_USERNAME=default       # .envの"MYSQL_USER"で設定した値に合わせる
DB_PASSWORD=secret        # .envの"MYSQL_PASSWORD"で設定した値に合わせる

10. workspaceコンテナ内でDB接続の確認とマイグレーションを行う

root@????????????:/var/www/myapp$ php artisan migrate

11. ホスト側でhostsファイルを変更する

$ sudo vim /private/etc/hosts     # 以下を追加する
127.0.0.1     http://laravel.test/

12. ホスト側でLaravelの初期画面に接続する

Webブラウザ(Chromeなど)で http://laravel.test に接続します。すると、以下のような画面が表示されるので、Laravelが動いていることを確認できます。

13. phpMyAdminに接続する方法

Webブラウザ(Chromeなど)で http://laravel.test:8081 に接続します。すると、以下のような画面が表示されるので、phpMyAdminが動いていることを確認できます。

この画像の通り、サーバは"DB_HOST"で指定した値を、ユーザ名・パスワードはDB_USERNAMEとDB_PASSWORDの設定値を入力して接続します。

参考資料

Discussion