VagrantのApache設定メモ

Posted on:2017-05-08

Vagrantでapacheをインストールして自動起動されなかったのでメモになります

通常のインストールは以下からセットアップ

sshでvagrantにアクセスする

bash
vagrant ssh

Apacheのインストール

再起動しても立ち上がるように設定

bash
sudo yum -y install httpd
sudo service httpd start
sudo chkconfig httpd on
sudo service iptables stop
sudo chkconfig iptables off
exit
  • サーバからログアウト後にVagrantファイルを編集する(※プライベートIPは自由に変更して良い)
  • Vagrantfileの編集
bash
config.vm.network :private_network, ip: "192.168.33.10"

Vagrantの再起動

bash
vagrant reload

共有フォルダの設定(シンボリックリンク)

Vagrantには共有フォルダ設定されている。
ローカルのディレクトリと仮想のサーバとリンクされているため、シンボリックしているとサーバにアップロードしなくても即座に変更することができる

bash
vagrant ssh
ls /vagrant // サーバのRootのvagrantディレクトリとローカルのディレクトリはリンクしている

共有ディレクトリを/var/www/htmlの公開ディレクトリにシンボリックリンクをはる

bash
sudo ln -fs /vagrant /var/www/html

Apacheの設定部分

元ネタ

これはApacheに関わらず、Vagrant共有ディレクトリにサービス起動に必要なファイルを配置している場合に発生する現象です。

シンボリックにしてしまうとVagrant再起動時に、Apacheが自動再起動できなくなる

原因

これは、/etc/init.dの起動スクリプトが実行されるタイミングで/vagrantディレクトリがマウントされていないことが原因です。 その時点で必要なファイルが存在しないため、起動でエラーになってしまっています。

対策

起動スクリプトを作成してマウント状態をチェックするスクリプトを実行する

bash
vagrant ssh // sshでログイン
sudo vi /usr/local/bin/vagrant-mount-checker   // サーバ上にスクリプトを作成

以下のスクリプトを作成

bash
#!/bin/sh
check_vagrant_mount() {
  local prog=$1;
  for ((i = 1; i <= 6; i++))
  do
      [ -f /vagrant/Vagrantfile ] && return 0
      sleep 5
  done

  /usr/bin/logger -t vagrant-mount-checker "$prog couldn't start, because the vagrant shared directory didn't mount."
  return 1
}

起動スクリプトを編集

bash
sudo vi /etc/init.d/httpd

以下を処理の最初に追加する

. /usr/local/bin/vagrant-mount-checker
check_vagrant_mount `basename $0`|| exit 1

VagrantでCSSの更新が反映されない場合の対処法

Vagrant上で作成したファイルでCSSなどが反映されない現状になります。
これは静的なファイルのようにRequestの処理にデータのアクセスを必要としない時には、ファイルを読み込むことなくカーネルのsendfileを使ってファイルを送るようになっているため

vagrant ssh
sudo vi /etc/httpd/conf/httpd.conf

httpd.confファイルのEnableSendfile onをoffに設定する

EnableSendfile off

※Nginxの場合

sendfile off;

最後にWEBサーバの再起動

sudo service httpd restart