Skip to content

VagrantのApache設定メモ

Posted on:May 8, 2017 at 12:08 AM

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

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

sshでvagrantにアクセスする

vagrant ssh

Apacheのインストール

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

sudo yum -y install httpd
sudo service httpd start
sudo chkconfig httpd on
sudo service iptables stop
sudo chkconfig iptables off
exit
config.vm.network :private_network, ip: "192.168.33.10"

Vagrantの再起動

vagrant reload

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

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

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

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

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

Apacheの設定部分

元ネタ

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

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

原因

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

対策

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

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

以下のスクリプトを作成

#!/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
}

起動スクリプトを編集

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