前回、.envから環境変数を使えるようにして、かなり快適になった。
Docker ComposeでLaravel開発環境を構築その肆
だが、実際にこの環境を使って開発してみると色々と不便だったので修正する。
マシンスペック
- Mac mini 2018
- macOS Catalina(10.15.x)
- Intel Core-i7 3.2GHz 6コア
- メモリ 32GB
- SSD 512GB
Docker環境
- Nginx 最新版
- PHP(PHP-FPM) 7.4.x
- MySQL 8.x
- Composer 2.x
- Laravel 8.x
- Redis 最新版
- MailHog 最新版
やること
- 不便なところを改修
補足
各環境を行ったり来たりするので、下記のように記載します。
[Mac]$ MacのターミナルでMac内の作業
[PHP]$ MacのターミナルからPHPコンテナに接続して作業
不便だった箇所
- アプリ名をサーバー名に流用するのが使い勝手悪い
- コンテナ名も変更できると良い
- ポートも変更できると良い
- HTTPSが欲しい
- Redisも必要かな
- Laravel8のメール送信は、MailTrapじゃなくてMailHogだった
.envファイルを修正する
# APP名
APP_NAME=laravel
# XDebugポート
XDEBUG_PORT=9000
# DB
DATABASE_NAME=hoge
DATABASE_USER=fuga
DATABASE_PASSWORD=docker#DOCKER1234
DATABASE_ROOT_PASSWORD=docker#DOCKER1234
↓下記に変更
# APP名
APP_NAME=laravel
# サーバー名
SERVER_NAME=laravel.local
# Nginx
NGINX_CONTAINER=nginx
NGINX_HTTP_PORT=80
NGINX_HTTPS_PORT=443
NGINX_CERTS_NAME=cert
# PHP
PHP_CONTAINER=php
PHP_XDEBUG_PORT=9000
# MySQL
MYSQL_CONTAINER=mysql
MYSQL_DATABASE=hoge
MYSQL_USER=fuga
MYSQL_PASSWORD=docker#DOCKER1234
MYSQL_ROOT_PASSWORD=docker#DOCKER1234
MYSQL_PORT=3306
# Redis
REDIS_CONTAINER=redis
REDIS_PORT=6379
# MailHog
MAILHOG_CONTAINER=mailhog
MAILHOG_PORT=8025
上記に合わせて、各ファイルを修正した。
(環境変数名のリネームは割愛)
HTTPSの設定
オレオレ証明書を作る。
[Mac]$ openssl req -new -days 365 -x509 -nodes -keyout cert.key -out cert.crt
Generating a 2048 bit RSA private key
...........................+++
...................................+++
writing new private key to 'cert.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:ja
State or Province Name (full name) []:kanagawa
Locality Name (eg, city) []:yokohama
Organization Name (eg, company) []:company
Organizational Unit Name (eg, section) []:section
Common Name (eg, fully qualified host name) []:laravel.local
Email Address []:laravel.local
生成されたファイル達は下記に置き、docker-compose.ymlを編集する
default.conf.templateを編集
server {
listen 80;
〜 略 〜
}
server {
listen 443 ssl;
server_name ${SERVER_NAME};
ssl_certificate /etc/nginx/certs/${NGINX_CERTS_NAME}.crt;
ssl_certificate_key /etc/nginx/certs/${NGINX_CERTS_NAME}.key;
〜 略 (以下、HTTPと同じ) 〜
}
docker-compose.ymlを編集
version: '3.8'
volumes:
phpsocket:
services:
nginx:
container_name: ${NGINX_CONTAINER}
build: ./nginx
ports:
- '${NGINX_HTTP_PORT}:80'
- '${NGINX_HTTPS_PORT}:443'
volumes:
- ./nginx/certs:/etc/nginx/certs
- ./nginx/templates:/etc/nginx/templates
- ./src:/home/docker
- phpsocket:/var/run
depends_on:
- php
environment:
- APP_NAME=${APP_NAME}
- SERVER_NAME=${SERVER_NAME}
- NGINX_CERTS_NAME=${NGINX_CERTS_NAME}
〜 略 〜
※参考
Docker+nginxでHTTPSサーバを簡単に構築
nginxでSSLを立てるまで
[nginx] http と https を両方利用するための設定
Redisコンテナ追加
docker-compose.ymlに追加。
redis:
image: redis:latest
container_name: ${REDIS_CONTAINER}
ports:
- "${REDIS_PORT}:6379"
volumes:
- "./data:/data"
MailHogコンテナ追加
Laravel8のメール送信テストは、MailTrapからMailHogに変わってた。
docker-compose.ymlに追加。
mail:
image: mailhog/mailhog
container_name: ${MAIL_CONTAINER}
ports:
- "${MAIL_PORT}:8025"
完成!!
https://github.com/bobtabo/docker4
使い方
[Mac]$ cd <任意のディレクトリ>
[Mac]$ git clone https://github.com/bobtabo/docker4.git docker
[Mac]$ cd docker
[Mac]$ cp -p .env.example .env
[Mac]$ docker-compose up -d
・・・
Creating mysql ... done
Creating mailhog ... done
Creating redis ... done
Creating php ... done
Creating nginx ... done
[Mac]$ docker-compose exec --user 1000 php bash
[PHP]$ pwd
/home/docker
[PHP]$ cd laravel
[PHP]$ composer install
[PHP]$ chmod -R 777 storage
[PHP]$ chmod -R 777 bootstrap/cache
[PHP]$ cp -p .env.example .env
[PHP]$ php artisan key:generate
[PHP]$ chmod 755 bin/clear-laravel.sh
[PHP]$ bin/clear-laravel.sh
[PHP]$ php artisan migrate:refresh --seed
動作確認(Macのhosts編集)
[Mac]$ sudo vi /private/etc/hosts
★下記を点線内を追記
---
127.0.0.1 laravel.local
---
:wq
ブラウザで動作確認
http://laravel.local/
https://laravel.local/
※httpsはSafariだと簡単に見れる(Chromeだと面倒)
コンテナ削除
[Mac]$ docker-compose down --rmi all --volumes
※参考
《滅びの呪文》Docker Composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括完全消去する便利コマンド