3
0

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-25

前回、HTTPSやRedisを導入し、段々オールインワンっぽくなって来た。
Docker ComposeでLaravel開発環境を構築その伍

更にオールインワン化を目指しつつ、そろそろPHP8を使いたいし、Xdebug3にしたい。
ついでに、MySQLのレプリケーションも欲しくなったので修正する。

マシンスペック

  • Mac mini 2018
  • macOS Catalina(10.15.x)
  • Intel Core-i7 3.2GHz 6コア
  • メモリ 32GB
  • SSD 512GB

Docker環境

  • Nginx 最新版
  • PHP(PHP-FPM) 8.x
  • Xdebug 3.x
  • MySQL 8.x
  • Composer 2.x
  • Laravel 8.x
  • Redis 最新版
  • MailHog 最新版
  • phpMyAdmin 最新版
  • MongoDB 最新版
  • mongo-express 最新版
  • Redmon 最新版

やること

  • PHP8が欲しい
  • XDebug3が欲しい
  • レプリケーションが欲しい
  • オールインワンを目指す

補足

各環境を行ったり来たりするので、下記のように記載します。

[Mac]$ MacのターミナルでMac内の作業
[PHP]$ MacのターミナルからPHPコンテナに接続して作業
[SQL]# MacのターミナルからMySQLコンテナに接続して作業

追加・変更あれこれ

PHP 8.x

下記に変更する。

php/Dockerfile
FROM php:8-fpm

Xdebug 3.x

3.x にすると設定ファイルが変わるので、2.x に固定してたのを修正する。

php/Dockerfile
RUN pecl install xdebug-2.9.8
↓
RUN pecl install xdebug

下記に変更する。

php/xdebug.ini
xdebug.mode=debug,develop
xdebug.discover_client_host = 1
xdebug.client_host=host.docker.internal
xdebug.client_port=9001
xdebug.idekey=PHPSTORM

※参考
Xdebug3.0.0がリリースされたので、ver2からの雑な設定コンバート
Xdebug 2 から 3 へのアップグレード

phpMyAdmin

いつもPhpStormからDB見てるけど、一応入れておく。

docker-compose.yml
phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: ${PMA_CONTAINER}
    depends_on:
      - mysql
    environment:
      - PMA_ARBITRARY=${PMA_ARBITRARY}
      - PMA_HOSTS=${PMA_HOSTS}
      - PMA_USER=${PMA_USER}
      - PMA_PASSWORD=${PMA_PASSWORD}
    ports:
      - "${PMA_PORT}:80"
    volumes:
      - ./data/phpmyadmin/sessions:/sessions

MongoDB

もしかして使う機会あるかもなので入れておく。

docker-compose.yml
mongo:
  image: mongo
  container_name: ${MONGO_CONTAINER}
  environment:
    MONGO_INITDB_ROOT_USERNAME: ${MONGO_USERNAME}
    MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
  ports:
    - "${MONGO_PORT}:27017"
  volumes:
    - ./data/mongo:/data/db

mongo-express

MongoDBを可視化できるらしいので入れておく。

docker-compose.yml
mongo-express:
  image: mongo-express
  container_name: ${MONGO_EX_CONTAINER}
  ports:
    - "${MONGO_EX_PORT}:8081"
  environment:
    ME_CONFIG_BASICAUTH_USERNAME: ${MONGO_EX_USERNAME}
    ME_CONFIG_BASICAUTH_PASSWORD: ${MONGO_EX_PASSWORD}
    ME_CONFIG_MONGODB_PORT: ${MONGO_PORT}
    ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGO_EX_ADMINUSERNAME}
    ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGO_EX_ADMINPASSWORD}
  depends_on:
    - mongo

Redmon

phpRedisAdminはキーが増えると遅いらしいので、Redmonを導入。

docker-compose.yml
redmon:
  image: vieux/redmon
  container_name: ${REDMON_CONTAINER}
  links:
    - redis:redis
  ports:
    - "${REDMON_PORT}:4567"
  command: -r redis://redis:6379

MySQLのレプリケーション

.env.exampleに追加

.env.example
MYSQL_SLAVE_CONTAINER=mysql-slave
MYSQL_SLAVE_PORT=13306

Master&Slave設定を作成

コチラから必要ファイルを丸パク&編集して配置。

スクリーンショット 2021-02-26 2.06.15.png

docker-compose.ymlを修正

docker-compose.yml
version: '3.8'
〜 略 〜
  mysql:
〜 略 〜
    volumes:
      - ./mysql/master/my.cnf:/etc/mysql/my.cnf
      - ./data/mysql:/var/lib/mysql
      - ./mysql/master/init.sql:/docker-entrypoint-initdb.d/init.sql

  mysql-slave:
    image: mysql:8
    container_name: ${MYSQL_SLAVE_CONTAINER}
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_ALLOW_EMPTY_PASSWORD: 1
      TZ: "Asia/Tokyo"
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    ports:
      - "${MYSQL_SLAVE_PORT}:3306"
    depends_on:
      - mysql
    tmpfs:
      - /var/lib/mysql
    volumes:
      - ./mysql/slave/my.cnf:/etc/mysql/my.cnf
      - ./mysql/slave/init.sql:/docker-entrypoint-initdb.d/init.sql
〜 略 〜

※参考
docker-composeでMaster/Slave構成のMySQLを手に入れる
docker-composeでお手軽mysqlのmaster-slave構成
docker-mysql-master-slave/docker-compose.yml at master · raahii/docker-mysql-master-slave

Laravelのデータベース設定を変更

接続設定を変更する。

src/laravel/.env.example
DB_CONNECTION=mysql
DB_MASTER_HOST=mysql
DB_MASTER_PORT=3306
DB_SLAVE_HOST=mysql
DB_SLAVE_PORT=3306
DB_DATABASE=hoge
DB_USERNAME=fuga
DB_PASSWORD="docker#DOCKER1234"

データベース設定を変更する。

src/laravel/config/database.php
<?php

return [
〜 略 〜
        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'read' => [
                'host' => env('DB_SLAVE_HOST', '127.0.0.1'),
                'port' => env('DB_SLAVE_PORT', '3306'),
            ],
            'write' => [
                'host' => env('DB_MASTER_HOST', '127.0.0.1'),
                'port' => env('DB_MASTER_PORT', '3306'),
            ],
            'sticky' => true,
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
〜 略 〜
];

完成!!
https://github.com/bobtabo/docker5

使い方

コンテナ定義をクローンして起動する。

[Mac]$ cd <任意のディレクトリ>
[Mac]$ git clone https://github.com/bobtabo/docker5.git docker
[Mac]$ cd docker
[Mac]$ cp -p .env.example .env
[Mac]$ docker-compose up -d
・・・
Creating redis         ... done
Creating mailhog       ... done
Creating mysql-slave   ... done
Creating mysql         ... done
Creating mongo         ... done
Creating redmon        ... done
Creating mongo-express ... done
Creating php           ... done
Creating phpMyAdmin    ... done
Creating nginx         ... done

コンテナ起動を確認する。

[Mac]$ docker-compose ps

    Name                   Command               State                    Ports                  
-------------------------------------------------------------------------------------------------
mailhog         MailHog                          Up      1025/tcp, 0.0.0.0:8025->8025/tcp        
mongo           docker-entrypoint.sh mongod      Up      0.0.0.0:27017->27017/tcp                
mongo-express   tini -- /docker-entrypoint ...   Up      0.0.0.0:8081->8081/tcp                  
mysql           docker-entrypoint.sh mysql ...   Up      0.0.0.0:3306->3306/tcp, 33060/tcp       
mysql-slave     docker-entrypoint.sh mysql ...   Up      0.0.0.0:13306->3306/tcp, 33060/tcp      
nginx           /docker-entrypoint.sh ngin ...   Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
php             docker-php-entrypoint php-fpm    Up      0.0.0.0:9001->9000/tcp                  
phpMyAdmin      /docker-entrypoint.sh apac ...   Up      0.0.0.0:8080->80/tcp                    
redis           docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp                  
redmon          redmon -r redis://redis:6379     Up      0.0.0.0:4567->4567/tcp

Stateが全てUpならOK、Exit 1だとエラー。
エラー時は下記コマンドでログを見る。

[Mac]$ docker-compose logs

MySQLコンテナに入り、レプリケーション状態を確認する。

[Mac]$ docker-compose exec mysql-slave bash
[SQL]# mysql -u root -p
Enter password:docker#DOCKER1234
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
〜 略 〜
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
〜 略 〜
mysql> quit
[SQL]# exit

PHPコンテナに入り、Laravelを設定する。

[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:fresh --seed

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

http://laravel.local:8080/
スクリーンショット 2021-02-26 2.04.21.png

http://laravel.local:8081/
スクリーンショット 2021-02-26 0.34.19.png

http://laravel.local:4567/
スクリーンショット 2021-02-26 0.35.46.png

コンテナ削除

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

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

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?