LaradockでPHP+Apache+mariadbな環境構築をする手順


Laradockで環境構築するとnginxがデフォルトになっている。
本番環境とミドルウェアを揃えるため、apacheを利用するのにハマったので手順を残しておきます。

要件

  • Git
  • Docker >= 17.12
  • Laradock v8.0

ディレクトリ構成

~/project/                 ... プロジェクトルート
~/project/laradock         ... Laradock
~/project/laravel          ... Laravel app project
~/project/laravel/public   ... 公開ディレクトリ(Document Root)

Laradockのset up

プロジェクトルートへ移動

cd ~/project/

Laradockをclone

git clone --branch v8.0 https://github.com/laradock/laradock.git

Laradockへ移動

cd ~/project/laradock

.envを作成

cp env-example .env

.envを編集

vim .env
---
- PHP_VERSION=7.3
+ PHP_VERSION=任意のバージョン

- WORKSPACE_INSTALL_NODE=true
+ WORKSPACE_INSTALL_NODE=false

- WORKSPACE_INSTALL_YARN=false
+ WORKSPACE_INSTALL_YARN=false

- WORKSPACE_INSTALL_NPM_GULP=true
+ WORKSPACE_INSTALL_NPM_GULP=false

- WORKSPACE_INSTALL_NPM_VUE_CLI=true
+ WORKSPACE_INSTALL_NPM_VUE_CLI=false

- WORKSPACE_INSTALL_XDEBUG=false
+ WORKSPACE_INSTALL_XDEBUG=true

- PHP_FPM_INSTALL_XDEBUG=false
+ PHP_FPM_INSTALL_XDEBUG=true

+ LARAVEL_HORIZON_INSTALL_PHPREDIS=true

- MARIADB_VERSION=latest
+ MARIADB_VERSION=任意のバージョン

- MARIADB_DATABASE=default
+ MARIADB_DATABASE=任意のDB Name

- MARIADB_USER=default
+ MARIADB_USER=任意のUser Name

- MARIADB_PASSWORD=secret
+ MARIADB_PASSWORD=任意のUser Password
---

docker-compose.ymlを編集

vim docker-compose.yml
---
    laravel-horizon:
      build:
        context: ./laravel-horizon
        args:
          - PHP_VERSION=${PHP_VERSION}
          - INSTALL_PGSQL=${PHP_FPM_INSTALL_PGSQL}
          - INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH}
          - INSTALL_MEMCACHED=${PHP_FPM_INSTALL_MEMCACHED}
          - INSTALL_SOCKETS=${LARAVEL_HORIZON_INSTALL_SOCKETS}
          - INSTALL_CASSANDRA=${PHP_FPM_INSTALL_CASSANDRA}
+         - INSTALL_PHPREDIS=${LARAVEL_HORIZON_INSTALL_PHPREDIS}
      volumes:
        - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}
        - ./laravel-horizon/supervisord.d:/etc/supervisord.d
      depends_on:
        - workspace
      extra_hosts:
        - "dockerhost:${DOCKER_HOST_IP}"
      networks:
        - backend
---

apacheのvirtual hostsを追加

cp apache2/sites/default.apache.conf apache2/sites/sample.apache.conf

apacheのvirtual hostsを編集

vim apache2/sites/sample.apache.conf
---
<VirtualHost *:80>
-  ServerName laradock.test
+  ServerName sample.test
-  DocumentRoot /var/www/
+  DocumentRoot /var/www/laravel/public/
  Options Indexes FollowSymLinks

-  <Directory "/var/www/">
+  <Directory "/var/www/laravel/public/">
    AllowOverride All
    <IfVersion < 2.4>
      Allow from all
    </IfVersion>
    <IfVersion >= 2.4>
      Require all granted
    </IfVersion>
  </Directory>

</VirtualHost>
---

hostsの設定

vim /etc/hosts
---
+ 127.0.0.1       sample.test
---

laravel project のインストール

composer create-project --prefer-dist laravel/laravel laravel "5.8.*"
cd ~/project/laravel
vim .env
---
DB_CONNECTION=mysql
- DB_HOST=127.0.0.1
+ DB_HOST=mariadb
DB_PORT=3306
- DB_DATABASE=laravel
+ DB_DATABASE=default
- DB_USERNAME=root
+ DB_USERNAME=default
- DB_PASSWORD=
+ DB_PASSWORD=secret

- REDIS_HOST=127.0.0.1
+ REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
---
php artisan optimize:clear
php artisan key:generate

composer install

chmod 777 storage/logs
chmod 777 bootstrap/cache
chmod 777 storage/framework
chmod 755 public/index.php

laradock 起動

cd ~/project/laradock

docker 起動

docker-compose up -d workspace mariadb apache2 redis php-fpm

Dockerの設定ファイル(apacheなど)変更した場合

docker-compose up -d --build workspace mariadb apache2 redis php-fpm
or 
docker-compose build --no-cache workspace mariadb apache2 redis php-fpm

Laradock(docker) 操作

dockerのworkspaceにログイン

docker-compose exec workspace bash

docker コンテナ 停止

docker-compose down

docker コンテナ 削除

docker-compose down --rmi all

docker コンテナ ボリューム削除

docker-compose down -v

トラブルシューティング

(1)Laradock 起動時にエラー発生

エラー内容

apache2_1              | AH00526: Syntax error on line 119 of /etc/httpd/conf/httpd.conf:
apache2_1              | DocumentRoot '/var/www/html' is not a directory, or is not readable

対処方法

vi /etc/httpd/conf/httpd.conf
---
- DocumentRoot "/var/www/html"
+ DocumentRoot "/var/www/laravel/public"
---

service httpd restart