M1MacでLaradockを使ったApache2+MySQL8+phpMyAdminの環境構築
はじめに
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