Vagrantの共有フォルダ機能を使い、ApacheのDocumentRootを /var/www/html とし、htmlを /vagrant/html へのシンボリックリンクとして、ホストPCから編集しながら勝手に同期されるようにしたかった。環境は以下。
- Windows 7
- Vagrant 1.8.7
- CentOS 7.2
- Apache 2.4.6
このような使い方をしている人はググると実際いるっぽいのだが、環境の相性なのか、この設定で vagrant up するとhttpdのサービスが立ち上がりに失敗し、
$ sudo systemctl status -l httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 日 2016-11-20 01:50:20 JST; 1min 9s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 1646 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
Process: 1368 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 1368 (code=exited, status=1/FAILURE)
11月 20 01:50:20 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
11月 20 01:50:20 localhost.localdomain httpd[1368]: AH00526: Syntax error on line 119 of /etc/httpd/conf/httpd.conf:
11月 20 01:50:20 localhost.localdomain httpd[1368]: DocumentRoot '/var/www/html' is not a directory, or is not readable
11月 20 01:50:20 localhost.localdomain systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
11月 20 01:50:20 localhost.localdomain kill[1646]: kill: cannot find process ""
11月 20 01:50:20 localhost.localdomain systemd[1]: httpd.service: control process exited, code=exited status=1
11月 20 01:50:20 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server.
11月 20 01:50:20 localhost.localdomain systemd[1]: Unit httpd.service entered failed state.
11月 20 01:50:20 localhost.localdomain systemd[1]: httpd.service failed.
こうなっている。
この後、systemctl restart httpd
すると問題なく立ち上がる。
vagrantの共有フォルダが読めるようになるタイミングがhttpdの立ち上がりよりも後なので、DocumentRootが存在しないため失敗している?
どうにもならないので、DocumentRootをシンボリックリンクで丸ごと共有するのは諦め、 /var/www/html は通常のディレクトリにして、その下にシンボリックリンクを貼ることで一応解決。
ホストPCのブラウザからアクセスするURLが少し長くなるがしょうがない。
(追記)コメントで対処法をご紹介いただきました。
Vagrantfileの設定で毎回up後にhttpdをrestartするprovisionを走らせてあげればよいようです。
Vagrantの共有フォルダをDocumentrootに設定する時に気をつけること
現環境に合わせて、以下のように設定して解決。
config.vm.provision "shell", run: "always", inline: <<-SHELL
systemctl restart httpd.service
SHELL
ホストPCのブラウザから開けたり開けなかったりで、ネットワーク周りを疑ってNATのポートフォワーディング、プライベートネットワーク、ファイアウォール、etc...を延々と見ていたので原因の特定にかなり手こずった・・・。