Vagrantで作るLAMP環境
はじめに
この記事では、「vagrant upと一発叩いて、LAMP環境(Apache + MySQL + PHP入りのCentOS)を起動させる」ことを目指します。 まずは、CentOS上にApache + MySQL + PHP(AMP)を導入していきます。 その次に、そのAMP入りの環境をBoxファイルにして保存するという流れです。
LAMPを入れるシェルスクリプトを書く
ここでは、vagrantとvirtualboxの導入する部分を一気に省いて(!)、それらが既に導入されているところから始めさしてください。
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でお手軽にやってみるというのがいいかもしれません。