独学エンジニアのメモ帳

得た知識のアウトプットとか日常のメモとか。ゆるくやる。

Laradock+Apache2のDocumentRootの設定でハマった


先日、LaradockでLaravelの開発環境を構築しました。

サーバはapache2にしたのですが、若干エラーにハマったのでメモ書き。

とりあえず普通に構築

最初の設定はこんな感じ

APP_CODE_PATH_HOST=../laravelproject
APP_CODE_PATH_CONTAINER=/var/www/

<中略>

APACHE_HOST_HTTP_PORT=800
APACHE_DOCUMENT_ROOT=/var/www/public
FROM webdevops/apache:centos-7
<VirtualHost *:80>
  ServerName servername.test
  DocumentRoot /var/www
  Options Indexes FollowSymLinks

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

</VirtualHost>

この設定で/var/www/直下にlaravelprojectが展開され、DocumentRootがpublicになると思いました。

エラー

「このサイトにアクセスできません」画面で接続できない。

ログを確認

$ docker logs -f laradock_apache2_1

無限にエラー出てる

2020-07-30 13:08:44,418 INFO spawned: 'apached' with pid 23
-> Executing /opt/docker/bin/service.d/httpd.d//10-init.sh
2020-07-30 13:08:44,507 INFO success: apached entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)  
AH00526: Syntax error on line 119 of /etc/httpd/conf/httpd.conf:
DocumentRoot '/var/www/html' is not a directory, or is not readable
2020-07-30 13:08:44,659 INFO exited: apached (exit status 1; not expected)

DocumentRootの/var/www/htmlがない? 設定が反映されていないのだろうか。

処置

とりあえず動く状態を目指す

APP_CODE_PATH_HOST=../laravelproject
APP_CODE_PATH_CONTAINER=/var/www/project

<中略>

APACHE_HOST_HTTP_PORT=800
APACHE_DOCUMENT_ROOT=/var/www/project/public
<VirtualHost *:80>
  ServerName servername.test
  DocumentRoot /var/www/project/public
  Options Indexes FollowSymLinks

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

</VirtualHost>
$ docker-compose down 
$ docker-compose build apache2
$ docker-compose up -d apache2

http://localhost:800/にアクセスしたら無事いつものLaravel画面が。

まとめ

いろいろ調べたけど、原因がいまいち掴めず。 もっといい方法があれば知りたい。

10/02追記 全然理解足りてなかった。 まあ今も理解できてないんですが、
サーバーにアクセスがあった時に見に行くRootはconfファイルの記述になるので、そっちの修正が必要だったと。

laradockの.envで設定する
APACHE_DOCUMENT_ROOT
は何をしているんだろうか。
Dockerfileに引数として渡されて環境変数として設定されている(?)けど、
その先にどう使われているが全く分からない。