Help us understand the problem. What is going on with this article?

【コピペ】Docker ComposeでLaravel開発環境を構築その伍

前回、.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ファイルを修正する

https://github.com/bobtabo/docker3/blob/master/.env.example

# APP名
APP_NAME=laravel

# XDebugポート
XDEBUG_PORT=9001

# 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=9001

# 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を編集する

スクリーンショット 2021-02-11 14.58.16.png

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}

  〜 略 〜

※参考
https://qiita.com/yujimny/items/7615046be674895f9565
https://qiita.com/edo_m18/items/7e0e4b6d8e1e1d314184
https://gist.github.com/relax-more/5770895

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だと面倒)

スクリーンショット 2021-01-21 23.02.41.png

http://laravel.local:8025/
スクリーンショット 2021-02-11 15.50.36.png

コンテナ削除

[Mac]$ docker-compose down --rmi all --volumes

※参考
https://qiita.com/suin/items/19d65e191b96a0079417

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away