2021/04/03
M1 Mac miniでDockerを使ってLaravel6 + MySQL開発環境を作った話
M1 Mac miniを購入しました
この度とうとうM1 Mac miniを購入しました。
これまで使っていたのがMBP 15インチ(Mid2015)なので、6年ぶりの買い換えです。
買い換えに至った顛末と開封の儀はこちらから。
こちらの記事では、エンジニアっぽい話をする事にしているので
上記の記事で延々悩んでいた原因の
M1 MacのDockerで果たしてWeb系開発はできるのか!?
と、実際にM1のDockerで動いたLaravel用の開発環境構築を書いていきます。
Dockerで作れた開発環境
私がIntel版で作っていた開発環境は
ほぼそのままで全部動いた
具体的には
- Apache + PHP + MySQL5.7 + Laravel6
- Next.js
- Express (Node.js) + MySQL5.7
この3つは何の問題も無く動きました!
ちなみにMySQLだけ一行設定を描き加える必要がありました。(後述します)
・・ほんと、こんなにあっさり行くならあんなに悩まずさっさと買えば良かったよ・・(´・ω・`)
Laravel用の開発環境を作る
前提
開発機は M1 Mac mini 16GB SSD 1TB です。
上記記事にある通り、MBP Mid2015 MojaveからTimemachineで
アプリ含め全部データ移行をした後、動かないアプリを削除し
M1用のアプリが出ている物は入れ直すという大雑把戦略を取っています。
なのでHomebrewとかすでに入ったまんま。まぁ動いているからよしとした(*´ω`*)
Dockerをインストールする
https://docs.docker.com/docker-for-mac/apple-m1/
このサイトからダウンロードします。
これを書いている4/3段階ではDocker Desktop RC 3が出ていますね。
正式版になる日も近いのかな・・?
フォルダ構造
今回のフォルダ構造はこんな感じです。
説明する順に番号を振ってあります。
取りあえずこの通りフォルダとファイルを作っちゃいましょう。
(新しいフォルダ)
|
|- docker-compose.yml ⑥
|- docker
| |- php
| | |- 000-default.conf ③
| | |- Dockerfile ①
| | |- php.ini ②
| |
| |- mysql
| |- conf
| | |-my.cnf ④
| |
| |- mysql.env ⑤
|
|- (プロジェクトフォルダ: 任意の名前で)
既存のプロジェクトを持ってくる場合は、この段階でプロジェクトフォルダを持ってきましょう。後々の設定でフォルダ名がいります。
新しいプロジェクトを立ち上げるのであれば、Laravelインストール時に付けるプロジェクト名だけこの段階でメモっておいて下さい。まだプロジェクトフォルダは無くても大丈夫です。
設定ファイルを作成する
ここから設定ファイルを作成していきます。
対象のファイルをエディタで開いてさくさく書いて行きましょう。
Dockerfile
FROM php:7.4.15-apache の部分は
利用するPHPバージョンに置き換えて下さい。
# どんなdockerイメージを利用して構築をするか
FROM php:7.4.15-apache
# 設定ファイルをdockerコンテナ内のPHP、Apacheに読み込ませる
ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/
#composerをインストール
COPY --from=composer:1.10 /usr/bin/composer /usr/bin/composer
#npmインストール
COPY --from=node:lts /usr/local/bin /usr/local/bin
COPY --from=node:lts /usr/local/lib /usr/local/lib
# ミドルウェアインストール
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql bcmath
# Laravelで必要になるmodRewriteを有効化する
RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite
#コンテナ内に入った時のディレクトリを指定
WORKDIR /var/www/html
EXPOSE 80
php.ini
PHPの設定ファイルです。タイムゾーンはここで設定します。
余談ですがマレーシアならタイムゾーンは”Asia/Kuala_Lumpur”になります。
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
000-default.conf
Apacheの設定ファイルです。
(プロジェクトフォルダ名)の部分は、先ほどメモったプロジェクトフォルダの名前、もしくは新規Laravelプロジェクトを作成する際のプロジェクト名を入れて下さい。
<VirtualHost *:80>
ServerName localhost
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/(プロジェクトフォルダ名)/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html/(プロジェクトフォルダ名)/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
my.cnf
続いてMySQLの設定です。
これはこのままコピペでOK。
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqldump]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
# Enable access from the host machine.
bind-address=0.0.0.0
mysql.env
データベース設定です。
ここで決めたデータベース名は後でLaravel側で設定するのでメモって置いて下さい。
MYSQL_ROOT_HOST=%
MYSQL_ROOT_PASSWORD= root
MYSQL_USER= (任意のユーザー名)
MYSQL_PASSWORD= (任意のパスワード)
MYSQL_DATABASE= (任意のデータベース名)
docker-compose.yml
docker-composeの設定ファイルを書いていきます。
phpMyAdminに関してはいらない人はいらないと思うんですが
私、黒い画面でDB操作するのが未だにドキドキする人なので躊躇無く入れますw
コンテナー名は、私は
- app: Laravelのプロジェクト名
- mysql: Laravelのプロジェクト名_db
に統一しています。じゃないとすぐ忘れるので(;´Д`)
version: "3"
services:
app:
ports:
- "8000:80"
build: ./docker/php
container_name: (任意のコンテナー名)
volumes:
- .:/var/www/html
depends_on:
- mysql
mysql:
image: mysql:5.7
platform: linux/x86_64
container_name: (任意のコンテナー名)
env_file: ./docker/mysql/mysql.env
environment:
- TZ=Asia/Kuala_Lumpur
ports:
- "3306:3306"
volumes:
- ./mysql/conf:/etc/mysql/conf.d/:ro
- mysqldata:/var/lib/mysql
networks:
- default
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=mysql
- PMA_USER=root
- PMA_PASSWORD=root
ports:
- 8081:80
restart: always
links:
- mysql:mysql
# コンテナが削除されてもデータが消えずに保持される
volumes:
mysqldata:
Intel版 Mac用Dockerから変更になった部分
docker-compose.ymlのmysql設定の部分に
platform: linux/x86_64
を追加しました。
まだM1のプラットフォームに合わせたMySQLが無いらしくて、これを設定しないとエラーが出ちゃいます。
呪文を唱える
ここまで来たら、ターミナルから今回作ったフォルダに移動し、Dockerを立ち上げます。
#Dockerイメージを作る
docker-compose build --no-cache
#Dockerコンテナを作る
docker-compose up -d
#作ったコンテナの中に入る
docker exec -it (appのcontainer_name) bash
#新規プロジェクトの場合はここからLaravelをインストール
#これはlaravel6系のインストールなので、別バージョンの場合は最後の部分を変えてね!
composer create-project --prefer-dist laravel/laravel (プロジェクト名) "6.*"
Laravelの.envファイル設定
URLとDB設定を書き換えます。
APP_URL=http://localhost:8000
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=(さっきメモったDB名)
DB_USERNAME=root
DB_PASSWORD=root
後はいつも通り、必要に応じてmigration,seedingなどを実行して下さい。
ブラウザ表示の確認
Laravelは http://localhost:8000
phpMyAdminは http://localhost:8081
で入る事が出来ます。
おまけ: 近況報告
1年ほど某所の運営業務に携わりつつちょこちょこ開発案件をいただいてましたが、契約満了に伴い2月からは開発案件の受託に専念しています。
ま、フルリモートのフリーランスという意味では何も変わっていませんねw
相変わらずフロントもバックもやる、闇鍋っぷりですw
こないだまでNext.js案件にいたと思ったら、今月はLaravel案件に携わるというね・・
長期で取り組むのも良いですが、助っ人状態で短期決戦しに行くのが性には合ってますねぇ。
エンジニアのお仕事をする前もフリーランスで、やってたことは
「RIEさんならできそうだから」とホントいろんな事(半分以上未経験)を依頼されてましたから・・ある意味何も変わってないっすねw
ちょいちょい修羅場ったり頭抱えたりしつつも、運営業務があまりに濃厚ブラックだったお陰で何やっても平和に感じる日々ですw
今後も体調と相談しつつ、余裕があれば個人開発にも手を出しつつ、のんびりやっていきます(*´ω`*)
参考文献
いつもながらAuthorの皆様ありがとうございました!