2ファイルでLAMP開発環境構築

2019/01/27PHP

LAMPでの開発を行う際、まず必要となるのがローカル開発環境の用意でしょう。
ローカル環境で開発を行い、
開発環境 => ステージング環境 => 本番環境
へと順々にソースコードを反映していくのが一般的なフローかと思います。

今回、一番手元である「LAMPローカル環境」の簡単な構築方法について初心者向けに紹介したいと思います。
タイトル通り「Vagrant + シェルスクリプト」で構築を行っていきますが、各バージョンは以下となります。


vagrant 2.2.3
virtualBox 6.0
centos 7.2
php 7.3
mysql 8.0

※執筆時点、極力最新版のもので統一させていただいております。


「Vagrant + シェルスクリプト」ということで、必要となるのは
Vagrantfile と シェルスクリプトの2つのみです。
ファイルのみの構成となるので、共有が非常に楽という利点があります。
イメージファイルではないので、サイズを気にすることもありません。

もちろん、Vagrantfileにシェルスクリプトを記述することもできますが、
別ファイルで定義したほうが見やすかったり再利用できたりもするので、別々に記述する手法を私はよく取ります。
(個人的にはこのほうが分かりやすいのかなと思っています)

それでは、順々に見ていきましょう。

1. 設定準備をしよう

まずは、以下からvagrantとVirtualBoxをインストールします。

[vagrant]

https://www.vagrantup.com/downloads.html

[virtualbox]

https://www.virtualbox.org/wiki/Downloads

インストールが完了したら Vagrantfile を設定していきます
適当なディレクトリで(執筆サンプルでは「dev」とします)

$ vagrant init

を実行し、Vagrantfileを作成します。
(あるいは、Vagrantfileを自分で作成します)
加え、「provision.sh」シェルスクリプトファイルを作成しておき、
構築確認用に「source」のディレクトリを作成、php_info.phpというファイルを作っておきましょう。中身は以下となります。

--php_info.php--

<?php
    phpinfo();
?>

ディレクトリ構成はこのような形になるでしょう
    dev(適当なディレクトリ)
      |----Vagrantfile
      |----provision.sh
      |----source(確認用ファイル設置ディレクトリ)
                |----php_info.php

2. Vagrantfileを設定しよう

Vagrantfileのの中身を以下のように記述します。


--Vagrantfile--

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define "centos7-web" do |web|
    web.vm.box = "centos7.2"
    web.vm.box_url = "https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box"
    web.vm.hostname = "centos7-web"
    web.vm.network :private_network, ip: "192.168.33.10"
    web.vm.provision :shell, :path => "provision.sh",:privileged => true
    web.vm.synced_folder "./source" , "/var/www/html/source"
  end
end

------------------------------------------------------------------------------------------------------------

順にみていきましょう

1. VAGRANTFILE_API_VERSION = "2"
  設定構文のバージョン番号を定義します。
  現状(2019年1月執筆時点)vagrantのバージョン1.1以降は"2"を設定するようにします。

2. Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  構文についてはインデントでブロックを表しています。endで終了です。
  サンプルでは、configブロックとwebブロックがあります。webブロックを順に追っていきましょう。

3. web.vm.box = "centos7.2"
  vagrant box add を意味します。centos7.2の名前で追加をします(名前は自由につけて大丈夫です)

4. web.vm.box_url = "https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.b
  追加するボックス(サンプルではcentos7.2)がなかった場合、指定したURLから取得しにいきます

5. web.vm.hostname = "centos7-web"
  ホスト名を指定します。未指定ですと、どんな仮想マシンに接続しているのか分かり難いので指定しましょう。

6. web.vm.network :private_network, ip: "192.168.33.10"
  IPアドレスを指定します。空きのあるアドレスを指定しましょう。


7. web.vm.provision :shell, :path => "./provision.sh",:privileged => true
  vagrant起動時にシェルスクリプトを実行させます(サンプルでは、同階層の「provision.sh」を実行します)。
  本記事のキモとなる箇所です。root権限で実行させるためにも「:privileged => true」を記述しておきます

web.vm.synced_folder "./source" , "/var/www/html/source"
  第1引数:同期をとりたいディレクトリを指定します。(サンプル同階層の「source」ディレクトリと同期をとります)
  第2引数:仮想マシン内に設置するパスを指定します。
  

3. シェルスクリプトを設定しよう

vagrant起動時に実行するシェルスクリプトの内容を記述します。
シェルスクリプトについては、必要に応じてインストールしたいものを追加していきましょう。
今回の場合は、Apache、MySQL、PHPをインストールしていきます。サンプルは以下となります。
--provision.sh--

#!/bin/sh

# epalとremiをそれぞれをインストール
yum -y install epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# apacheインストール
yum -y --enablerepo=remi install httpd

# php7.3インストール
yum -y install --enablerepo=remi,remi-php73 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt

# phpのタイムゾーンをUTCにする
sed -i -e "/;date\.timezone /a date\.timezone = 'UTC'" /etc/php.ini

# phpのerror_logを出力させる
sed -i -e "s/;display_errors\ =\ Off/display_errors = On/g" /etc/php.ini
sed -i -e "s/;error_log\ =\ php_errors.log/error_log\ =\ '\/var\/log\/php\/error.log'/g" /etc/php.ini
mkdir /var/log/php/
touch /var/log/php/error.log
chown apache:apache /var/log/php/error.log

# mysql8インストール
yum -y remove mariadb-libs
yum -y remove mysql*
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
yum -y install mysql-community-server

# mysqlの文字セットをUTF8にする
sed -i -e "/\[mysqld\]/a character-set-server=utf8" /etc/my.cnf
sed -i -e "/\[mysqld_safe\]/i \[mysql\]\ndefault-character-set = utf8" /etc/my.cnf

# 利用するサービスを開始する
systemctl enable httpd.service
systemctl enable mysqld.service
systemctl restart httpd
systemctl restart mysqld.service

# セットアップ終了
echo "COMPLETE!"


------------------------------------------------------------------------------------------------------------

4. vagrantを起動しよう

設定が完了したら、
$ vagrant up
を実行し、しばらく待ちましょう。

完了後(上記のように「COMPLETE!」表示で完了です。シェルで記述したmysqlインストール→「COMPLETE!」が動いています)
http://192.168.33.10/source/php_info.php
にアクセスし、php情報が表示されていればOKです

5. おわりに

如何でしたでしょうか。
2ファイルで容易に「ローカル環境」が作成できたかと思います。
この2つを用いることで手軽に環境構築/破壊が気軽に行えます。
試行錯誤を手軽さに行えるので非常に便利です。
この手軽さは、これからphpを始めてみようと思う方に特におすすめなのではと。

以上、phpエンジニアの簡単な紹介でした。乱文長文、失礼しました。