0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker ComposeでLaravel開発環境を構築その伍

Last updated at Posted at 2021-02-22

前回、.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を編集する

スクリーンショット 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}
 
  〜 略 〜

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

スクリーンショット 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

※参考
《滅びの呪文》Docker Composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括完全消去する便利コマンド

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?