Vagrantで作るLAMP環境

はじめに

この記事では、「vagrant upと一発叩いて、LAMP環境(Apache + MySQL + PHP入りのCentOS)を起動させる」ことを目指します。 まずは、CentOS上にApache + MySQL + PHP(AMP)を導入していきます。 その次に、そのAMP入りの環境をBoxファイルにして保存するという流れです。

LAMPを入れるシェルスクリプトを書く

ここでは、vagrantvirtualboxの導入する部分を一気に省いて(!)、それらが既に導入されているところから始めさしてください。

Vagrantでは、vagrant upと叩けば、現在のディレクトリのVagrantfileの設定を読みます。 Vagrantfileには様々な設定が書けますが、一番下のセクションに起動時に実行するシェルスクリプトを指定できる箇所があります。 それは、

config.vm.provision "shell", :path => "lamp.sh"

の部分です。 例えば、上のように書けば、vagrant upで仮想マシン上のOS起動した時にlamp.shが実行されます。 ですので、lamp.sh内にAMP導入のためのコマンドを書いておけば、vagrant upでAMPを入れてくれるというわけです。 この部分はAnsibleやChefなどの構成管理ツールでもできるそうです。 (早くAnsible覚えたい)

lamp.shをどのように書くかは各自の好みによるでしょう。 パッケージからAMPをとってきてもいいし、ソースコードからビルドしてもよいと思います。 私はこちらのブログを参考にさせていただいて、ソースコードからビルドしました。 そんでもって、lamp.shは以下のような内容になりました。

# basis

yum -y install wget
yum -y groupinstall development base

# Mysql

wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpm -ihv mysql57-community-release-el7-11.noarch.rpm
yum repolist
yum -y install mysql-server mysql-devel

#OpenSSL

yum -y install zlib-devel perl perl-core
cd /usr/local/src/
wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
tar xvzf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f/
./config --prefix=/usr/local/openssl-1.1.0f shared zlib
make depend
make
make test
make install
echo /usr/local/openssl-1.1.0f/lib > /etc/ld.so.conf.d/openssl110f.conf
ldconfig

# Nghttp2
yum -y install libev-devel c-ares-devel
cd /usr/local/src/
wget https://github.com/nghttp2/nghttp2/releases/download/v1.23.1/nghttp2-1.23.1.tar.gz
tar xvzf nghttp2-1.23.1.tar.gz
cd nghttp2-1.23.1/
env OPENSSL_CFLAGS="-I/usr/local/openssl-1.1.0f/include" OPENSSL_LIBS="-L/usr/local/openssl-1.1.0f/lib -lssl -lcrypto" ./configure -enable-app
make
make install
echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
ldconfig

# Apache

## APR

cd /usr/local/src/
wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.6.2.tar.gz
tar xvzf apr-1.6.2.tar.gz
cd apr-1.6.2/
./configure
make
make install 


## ARP-util

yum -y install expat-devel pcre-devel
cd /usr/local/src/
wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.6.0.tar.gz
tar xvzf apr-util-1.6.0.tar.gz
cd apr-util-1.6.0/
./configure --with-apr=/usr/local/apr
make
make install
echo finARP-util

## Apache

cd /usr/local/src/
wget http://ftp.riken.jp/net/apache//httpd/httpd-2.4.26.tar.gz
tar xvzf httpd-2.4.26.tar.gz
cd httpd-2.4.26/
./configure \
    --enable-http2 \
    --enable-ssl \
    --with-ssl=/usr/local/openssl-1.1.0f \
    --enable-so \
    --enable-mods-shared=all \
    --enable-mpms-shared=all
make
make install

#PHP

yum -y install libxml2-devel libjpeg-devel libpng-devel
wget http://jp2.php.net/get/php-7.1.6.tar.gz/from/this/mirror -O php-7.1.6.tar.gz
tar -zxvf php-7.1.6.tar.gz
cd php-7.1.6
./configure --enable-mbstring --with-apxs2=/usr/local/apache2/bin/apxs --enable-pdo --with-gd --with-png-dir=/usr/local --with-jpeg-dir=/usr/local --with-mysql
make
make install

おそらく2017/6月末時点では最新のAMPを導入できたと思います。 ソースコードはその時々で新しいものと変わっていると思うので、適宜lamp.shを書き換えてやってください。

それが書けたら、vagrant upしてみましょう。 恐らく、OSが起動し、その後lamp.shが実行されます。 結構時間がかかるので、コーラをすすって気長に待ちましょう。 それが終わったら、サービスを起動したり、各サービスの設定を行いましょう。

LAMP導入済みのBoxファイルを作る

vagrantでは、Boxファイルさえあれば、いくつでも同じ環境を構築できますし、違うPCにその環境を持ち運びすることもできます。 ですので、ある程度LAMP環境が整ったら、次はBoxファイルを作成していきましょう。 Boxファイルの作成は難しいと思いきや、とても簡単です。

vagrant package default --output lamp.box

lamp.boxというファイルが作成されます。 その後、

vagrant box add lamp lamp.box

とすれば、lamp.boxが使用可能になります。

mkdir lamp && cd lamp
vagrant init lamp

としてlampディレクトリにVagrantfileを作成します。(Vagrantfileの中身を確認して必要ならば書き換えてください) 最後に、

vagrant up

でAMP入りのCentOSを起動します。 これ以降は「vagrant upと一発叩けば、LAMP環境(Apache + MySQL + PHP入りのCentOS)が起動する」ことができます。

終わりに

Vagrantはそれほど学習コストをかけることなく、手軽に環境構築の自動化や持ち運びを可能にしてくれます。 仮想環境構築ツールは色々ありますが、まずはVagrantでお手軽にやってみるというのがいいかもしれません。