3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vagrant+ApacheでDocumentRootを共有フォルダへのシンボリックリンクにするとupでコケる

Last updated at Posted at 2016-11-19

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...を延々と見ていたので原因の特定にかなり手こずった・・・。

3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?