Docker-ApacheでDocumentRouteが変わらずLaravelが動かなかった理由

Docker-ApacheでDocumentRouteが変わらずLaravelが動かなかった理由

マジで疲れました...。
Dockerの無い通常の仕様では苦も無くDocumentRoute変えてるので「何で出来ないんだ!」と...もう泣いてました。

CentOSでそのまま動かしている場合はOS内のhttpd.confのドキュメントルート変えるだけで簡単に変更できます。
なので、Dockerでも同じだろうと読み込ませるファイルのドキュメントルートを変えました。
でもLaravelが出てこない。何やってもうまくいかないのでindex.phpをProjectトップに置いたらこいつが出てきやがるわけです。

先に判明した理由を書いてしまいます。

Dockerfile 内のRUNでDocumentRouteを読込ませてもファイル名によっては採用されません。

今回作っていた構成

作成していたファイル構成はこんな感じです。

Laravel-Docker
├── docker/
│ ├── php/
│ │ └── php.ini
│ ├── mysql/
│ └── web/
│   ├── Dockerfile
│   ├── httpd-base.conf
│   └── supervisord.conf

├── docker-compose.yml
└── Laravel-Project/

ちゃんと参考サイトを見て、最初に見た参考サイトで書いてあったファイル名にしたのですが、これが落とし穴でした。

読込ファイル名にhttpd-base.confを記載しても書き換えが起こらない

今回発覚した問題がココ。

同じ内容を記載しているにもかかわらず、ファイル名を 000-default.conf に変えただけで意図した動きになりました。

まさかこんな所に原因があると思ってなかったので、Dockerfile書き換えて、httpd-base.confの書き方変えてみて、利用イメージをApacheからCentOSに切り替えてみたり3日にわたり試行錯誤。

結果、こんな感じでまとまりました。

ApacheのDockerfile

FROM php:7.2-apache

RUN     usermod -u 1000 www-data        \
    &&  groupmod -g 1000 www-data       \
    &&  a2enmod rewrite                 \
    &&  pecl install xdebug-2.6.0       \
    &&  apt-get update -y               \
    &&  apt-get install -y zlib1g-dev   \
    &&  docker-php-ext-enable xdebug    \
    &&  docker-php-ext-install pdo_mysql mysqli mbstring zip \
    &&  apt-get clean
COPY    000-default.conf /etc/apache2/sites-available/

000-defuault.conf ※httpd-base.confというファイル名だと動かない

<VirtualHost *:80>

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    EnableSendfile off
</VirtualHost>

docker-compose.yml

version: '3'
services:
  web:
    container_name: Apache
    build: ./docker/web
    depends_on:
      - mysql
    ports:
      - "8000:80"
    privileged: true
    volumes:
      - ./docker/app/php.ini:/usr/local/etc/php/php.ini
      - ./WebShopCreator:/var/www/html/
    restart: always

  mysql:
    image: mysql:5.7
    container_name: MSQL
    volumes:
      - ./docker/mysql/data:/var/lib/mysql
      - ./logs:/var/log/mysql
      - ./entrypoint/initdb.d/:/docker-entrypoint-initdb.d
    restart: always
    env_file: ./docker/mysql/.env.dev
    command: mysqld --character-set-server=utf8 --colliation-server=utf8_unicode_ci
    ports:
      - "3306:3306"
    restart: always

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: PMA
    links:
      - mysql
    environment:
      PMA_ARBITRARY: 1
      PMA_HOSTS: mysql
    ports:
      - "3000:80"
    restart: always

残す所はDBのコピーとSSL設定

今のところはDockerテスト用のサーバーで実験している状態なので、ここにのDBにレコード入れて動き確認して本番サーバーで稼働実験して、Docker-Laravelの正式採用という感じですね。

SSLはラストかな。

まとめ

いやぁ~解決できてよかった。

頭疲れすぎて今日は一日終わったような感覚です。
疲れたぁ~。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください