walkingmask’s development log

IT系の情報などを適当に書いていきます

MENU

Vagrant+CentOS7+シェルスクリプトでちゃちゃっとPHPテスト環境構築

ドットインストールでjQueryの勉強をしていて,phpやら何やら動かせるテスト環境が欲しいなと思ってVagrantを使って構築したのでlog.何となくMacのローカルではやりたくなかった.作業自体は少ないけど,インストールやboxのダウンロードに時間がかかる.

準備

手順とコード

boxのダウンロード

http://www.vagrantbox.es から,適当なboxファイルのURLをコピーしてくる.vagrantboxesは有志が公開しているゆえ利用は自己責任で.今回はCentOS7ということで

vagrant box add centos7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box

と言った感じ.結構時間かかる.

init

boxのダウンロードが終わったら,先ほどダウンロードしたboxを指定して好きなディレクトリでvagrant initする.例えばユーザディレクトリ下のvmというディレクトリであれば

/Users/$USER/vm% vagrant init centos7

と言った感じ.

Vagrantfileとprovition

provision.shというファイル名で,以下のシェルスクリプトをinitしたディレクトリに作成する.

#!/bin/sh

sudo yum -y install httpd

sudo yum install -y php
lineNum=`sudo grep "AddType application/x-gzip .gz .tgz" -n /etc/httpd/conf/httpd.conf | cut -d ":" -f 1`
if [ $lineNum ]; then
  sudo sed -i -e "${lineNum}a \    AddType application/x-httpd-php .php" /etc/httpd/conf/httpd.conf
  lineNum=$((lineNum+1))
  sudo sed -i -e "${lineNum}a \    AddType application/x-httpd-php-source .phps" /etc/httpd/conf/httpd.conf
fi

sudo systemctl start httpd
sudo systemctl enable httpd

sudo systemctl stop firewalld
sudo systemctl disable firewalld

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

欲しいパッケージがあれば適当に追記する.次は,Vagrantfileを次のように書き換える.

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos7"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.provision :shell, :path => "provision.sh"
end

ついでにinitしたディレクトリにinidex.phpというファイル名で次のphpファイルを作っとく.

<?php phpinfo(); ?>

up

initたディレクトリで

vagrant up

とすると,作成したCentOSVMが立ち上がる.Vagrantfileで設定した192.168.33.10にブラウザからアクセスしてphpinfoが表示されれば成功.お手軽!

追記

/var/www/htmlにvagrantの共有フォルダを設定していると,次の記事のような事象が起こる模様.
qiita.com
これを回避するために,provision.shに以下の記述を追加する.

lineNum=`sudo grep "<Directory \"/var/www/html\">" -n /etc/httpd/conf/httpd.conf | cut -d ":" -f 1`
if [ $lineNum ]; then
  sudo sed -i -e "${lineNum}a \    EnableSendfile off" /etc/httpd/conf/httpd.conf
fi