Laravel

【Laravel開発環境構築】Docker PHP7.4 Mysql5.6 apache2.4

Docker環境の構築

最終的なディレクトリ構成

結果としては以下のようなディレクトリ構成となります。

laravel
∟ _html
  ∟laravel ※Laravelのプロジェクト
∟ _httpd
  ∟default.conf
  ∟localhost-key.pem
  ∟localhost.pem
∟ _php
  ∟Dockerfile
  ∟php.ini
∟ _mysql

プロジェクトディレクトリの作成

$ vi mkdir laravel
$ cd laravel
$ mkdir _html && mkdir _httpd && mkdir _php && mkdir mysql

docker-compose.ymlファイルの作成

$ vi docker-compose.yml
version: '3'

services:
  php:
    build: ./_php
    volumes:
      - ./_php/php.ini:/usr/local/etc/php/php.ini
      - ./_httpd/conf:/etc/apache2/sites-enabled
      - ./_html:/var/www/html
    ports:
      - 80:80
      - 443:443
    depends_on:
      - mysql
      - mailcatcher
    links:
      - mysql
  mysql:
    image: mysql:5.6
    ports:
      - 3306:3306
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=todo
      - MYSQL_USER=todo
      - MYSQL_PASSWORD=todo
  mailcatcher:
    image: schickling/mailcatcher
    ports:
      - "1080:1080"
      - "1025:1025"

PHP apacheのDockerfileを作成

$ cd _php
$ vi Dockerfile
FROM php:7.4-apache
COPY php.ini /usr/local/etc/php/

# Composerのインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer

  # ミドルウェアインストール
  RUN apt-get update \
  && apt-get install -y \
  git \
  zip \
  unzip \
  vim \
  libpng-dev \
  libpq-dev \
  && docker-php-ext-install pdo_mysql

# Enable SSL
RUN a2enmod ssl
RUN ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf
EXPOSE 443

ENV COMPOSER_ALLOW_SUPERUSER 1

# Laravelで必要になるmodRewriteを有効化する
RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite

php.iniファイルの作成

$ vi php.ini
date.timezone = "Asia/Tokyo"
memory_limit = 256M

ここには必要なphpの設定を記載しましょう。

Webサーバーの設定ファイルを作成

$ cd _html
$ vi default.conf
<VirtualHost *:80>
  ServerName localhost
  DirectoryIndex index.php index.html
  DocumentRoot /var/www/html/laravel/public
  ErrorLog /var/log/apache2/virtual_error_log
  CustomLog /var/log/apache2/virtual_access_log combined env=!no_log

  <Directory "/var/www/html/laravel/public">
  Require all granted
  AllowOverride All
  Options +FollowSymLinks -Indexes
  </Directory>
</VirtualHost>
<VirtualHost *:443>
  ServerName localhost
  DirectoryIndex index.php index.html
  DocumentRoot /var/www/html/laravel/public

  SSLEngine on
  SSLCertificateFile /etc/apache2/sites-enabled/localhost.pem
  SSLCertificateKeyFile /etc/apache2/sites-enabled/localhost-key.pem
  ErrorLog /var/log/apache2/sslvirtual_error_log
  CustomLog /var/log/apache2/sslvirtual_access_log combined env=!no_log

  <Directory "/var/www/html/laravel/public">
  Require all granted
  AllowOverride All
  Options +FollowSymLinks -Indexes
  </Directory>
</VirtualHost>

ssl証明書の作成

$ mkcert localhost

ルートディレクトリに移動、dockerのビルド、起動

$ cd ..
$ pwd
$ laravel
$ docker compose up -d
[+] Running 3/3
 ⠿ Container laravel_todo_mailcatcher_1  Running
 ⠿ Container laravel_todo_mysql_1        Running
 ⠿ Container laravel_todo_php_1          Started

Laravelのインストール

コンテナにログイン

$ docker compose exec php bash
# composer create-project laravel/laravel laravel

ブラウザで localhostにアクセス

laravelの表示ができていればOKです。

http://localhost or https://localhost

表示されない場合は、一度コンテナを停止、起動してください。

$ docker compose stop
$ docker compose up -d