VirtualBoxとVagrantを使ったLAMP環境の構築方法をご紹介します。開発環境は一度構築してしまえば便利なものですが、構築するまでが一苦労ですよね。前回はうまくいったのに、Vagrant、VirtualBox、ミドルウェアのバージョンを変更したら動かなくなってしまったなんてことはよくあります。ほんと、失敗の連続ですね。何度も失敗して覚えていくしかないですね^^;
VirtualBoxとVagrantについて
VirtualBoxを使うとPCの中に仮想環境を構築してPCとは別のOSをインストールできます。VagrantはコマンドラインでVirtualBoxの操作や自動化ができる便利なツールです。
目次
VirtualBoxとVagrantをインストールする
僕は「Virtualbox 5.2.34」と「Vagrant 2.0.3」をインストールしました。VirtualBoxはこちらからダウンロードできます。Vagrantはこちらからダウンロードできます。
サーバを構築する
Vagrantを使うと簡単にサーバを構築することができます。こちらからBoxファイルを選択して、いくつかのコマンドを実行するだけでサーバが構築できてしまいます!
まずは上記URLにアクセスしてみてください。UbuntuやCentOSなどの一覧が表示されます。これらがBoxファイルです。この中から希望するサーバOSを選びます。次の画像では「bento/centos-7」を選んでいます。

希望するBoxファイルをクリックすると下記の画面になります。Newタブに表示されているものがコマンドです。こちらのコマンドを実行することで、Vagrantが自動でサーバの構築をしてくれます。

ターミナルを起動して、仮想環境を構築したいディレクトリを作成して、ディレクトリに移動後に下記コマンドを実行します。bento/centos-7の部分は希望するものに置き換えてください。vagrant upコマンドを実行〜完了まではかなり時間がかかります。固まったと思うかもしれませんが、とりあえず待ってみましょう。パソコンのスペックやインターネットの状況にもよると思いますが、30分〜1時間程度で完了するのではないかと思います。
1 2 3 4 5 | $ cd ~ $ mkdir centos7 $ cd centos7 $ vagrant init bento/centos-7 $ vagrant up |
vagrant upが完了すると仮想マシンが起動しているのですが、一旦仮想マシンを停止してみましょう。
1 | $ vagrant halt |
仮想マシンが停止したらサーバの設定をします。
vagrant initコマンドを実行したディレクトリにVagrantfileが作成されているので、viエディタなどで開きます。viエディタを使うのが初めての方は「viエディタ 使い方」などで検索をしてみてください。
1 | $ vi Vagrantfile |
サーバのIPアドレスを設定します。おそらくサーバのIPアドレスはつぎのように書かれています。先頭に#がついていたらコメントアウトになっているので外します。最後のIPアドレスは任意のもの(プライベートIPアドレス)に変更できます。こちらのIPアドレスのサーバにあとでSSH接続します。
1 | # config.vm.network "private_network", ip: "192.168.33.10" |
Vagrantのプラグインをインストールする
Vagrantにはプラグインをインストールすることができます。「vagrant-vbguest」というプラグインがとても便利です。vagrant-vbguestを使うと、仮想サーバ内のディレクトリとローカル環境内のディレクトリを同期することができます。つまり、ローカル環境で対象のディレクトリにファイルを保存すると、仮想サーバの対象のディレクトリにも反映されるということです。仮想サーバのドキュメントルートと同期しておけば、ブラウザをリロードするだけでソースコードの変更を確認することができます。LAMP環境で開発を行う場合は入れておくと良いと思います。つぎのコマンドでインストールできます。
1 | $ vagrant plugin install vagrant-vbguest |
インストールされたか確認する場合は「vagrant plugin list」と入力します。「vagrant-vbguest (0.23.0)」のように表示されればインストールされています。さらに、vagrant-vbguestを使うにはVagrantfileに設定を追加する必要があります。Vagrantfileを開いて編集しましょう。お好きなエディタで編集して問題ありませんが、以下ではviエディタを使用します。
1 | $ vi Vagrantfile |
Vagrantfileに以下の設定を追加します。「./html」部分には同期したいローカルのディレクトリのパスを設定します。 あらかじめローカルにはVagrantfileに設定するディレクトリを作成しておきましょう。「/var/www/html」部分には同期したいサーバのディレクトリのパスを設定します。「/var/www/html」はApacheをインストールした後に設定する方がいいと思いますが、ここでは先に設定してしまいます。
1 | config.vm.synced_folder “./html”, “/var/www/html”, type: “virtualbox” |
hostsファイルを設定する
hostsファイルで名前解決をするために設定をしていきましょう。hostsとは、ドメインとIPアドレスの紐付けを行うためのファイルです。たとえば、ブラウザからhttp://hogefoobar.comにリクエストした際にWebサーバのIPアドレスは192.168.33.10ですよと名前解決をしてくれます。インターネットを使ってWebサイトを閲覧する場合はDNSサーバが同じ役目をしてくれていますが、今回はローカルとPC内の仮想サーバとの通信になりますので、hostsファイルに設定をする必要があります。
hostsファイルはOSによって異なりますので、「windows hosts 場所」のように検索して確認してみてください。僕の場合(Ubuntu 18.04)は、「/etc/hosts」にありました。hostsファイルを開いて一番下につぎのように追加します。hostsファイルの編集にはルート(管理者)権限が必要です。
1 | 192.168.33.10 hogefoobar.com |
これで、http://hogefoobar.comにアクセスすると、IPアドレス192.168.33.10のサーバと通信することができます。
仮想サーバにSSHプロトコルで接続する
SSHプロトコルで仮想サーバに接続します。SSHを使うと仮想サーバに安全に接続(暗号化通信)して、仮想サーバを操作することができます。SSHで接続して、Apache、MySQL、PHPのインストールや設定していきます。つぎのコマンドでSSHでサーバに接続します。
まずは、先ほど停止した仮想サーバを起動します。
1 | $ vagrant up |
192.168.33.10のところはVagrantfileに設定したIPアドレスを入力します。vagrantのところはユーザー名を入力します。初期設定としてvagrantユーザーが設定されています。Passwordのところも「vagrant」と入力してエンターキーでOKです。
1 2 | $ ssh vagrant@192.168.33.10 Password |
「[vagrant@localhost ~]$」のように表示されれば、仮想サーバに接続できています。
Apacheをインストールする
Apacheをインストールしてhttpサーバを構築します。
sudoを使ってroot権限でhttpdをインストールします。Passwordを聞かれるので「vagrant」(初期設定)と入力してエンターキーを押します。
1 2 | $ sudo yum -y install httpd Password |
インストールの最後にComplete!と表示されればOKです。
httpdを起動します。
1 | $ sudo systemctl start httpd |
仮想サーバを停止→起動した際に、httpも起動するように設定を変更します。
1 | $ sudo systemctl enable httpd |
設定追加後に、正しく設定されたかを確認してみます。
1 | $ sudo systemctl list-unit-files -t service |
「httpd.service enable」と表示されていればOKです。
以上で、Apacheの基本的な設定は完了です。ブラウザからhtmlファイルが表示できるか確かめてみましょう。4で設定したローカルのディレクトリの直下にindex.htmlを作成します。
1 2 3 4 5 6 7 8 9 10 11 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Apacheテスト</title> </head> <body> <p>Hello world!</p> </body> </html> |
index.htmlをローカルのhtmlディレクトリに保存したら、ブラウザからhttp://hogefoobar.com/index.htmlにアクセスしてみます。画面に「Hello world!」と表示されればApacheは正常に設定できました。また、Vagrantfile、vagrantプラグイン(vagrant-vbguest)、hostsの設定も問題ないでしょう。
Memo
場合によっては、ファイアウォールでhttpとhttps通信を許可しないとブラウザからアクセウできないかもしれませんファイアウォールの許可設定はつぎのとおりです。
1 2 3 | $ sudo firewall-cmd --add-service=http --zone=public --permanent $ sudo firewall-cmd --add-service=https --zone=public --permanent $ sudo systemctl restart firewalld |
これでブラウザからhostsで設定したURL(hostsで設定したもの)にアクセスできるようになっています。
Memo2
.htaccessを有効にする場合は、「/etc/httpd/conf/httpd.conf」のAllowOverrideの値を書き換えます。
1 2 3 4 5 | # コメントアウト # AllowOverride None # 追加 AllowOverride All |
PHPをインストールする
PHP 7をインストールしていきます。まずは、EPELリポジトリとRemiリポジトリをインストールします。
1 2 | $ sudo yum install -y epel-release $ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm |
PHP 7をインストールします。
1 | $ sudo yum install -y --enablerepo=remi,remi-php71 php php-devel php-mbstring php-mysqlnd php-pdo php-gd |
問題なくインストールできていればComplete!と表示されます。
Apacheを再起動して、PHPを有効にします。
1 | $ sudo systemctl restart httpd |
PHPファイルが動作するか確認してみましょう。4で設定したローカルのディレクトリの直下にtest.phpを作成します。test.phpには以下のように書きます。
1 | <?php phpinfo(); ?> |
ブラウザからhttp://hogefoobar.com/test.phpにアクセスしてみます。PHPの設定内容が表示されればphpは動作しています。もし、ブラウザに「<?php phpinfo ?>」とそのままの文字が表示されてしまったらPHPが動作していないので、今までの内容を見直してみましょう。
Memo
phpの設定は「/etc/php.ini」で行います。以下ではファイルのアップロードの上限を変更できます。8Mのところを変更することで上限のサイズを大きくしたり小さくしたりします。
1 2 | post_max_size = 8M upload_max_filesize = 8M |
MySQLをインストールする
RPMファイルをインストールします。
1 | $ sudo yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm |
Memo
こちらのURLから任意のRPMパッケージを選択することができます。
インストールできるMySQLのバージョンを確認します。
1 | $ yum info mysql-community-server |
MySQLをインストールします。
1 | $ sudo yum install -y mysql-community-server |
MySQLがインストールされたか確認します。
1 | $ mysql -V |
MySQLを起動します。
1 | $ sudo systemctl start mysqld |
サーバ起動時にMySQLが自動で起動するようにします。
1 | $ sudo systemctl enable mysqld |
MySQLに接続してみます。
ユーザーはrootで、パスワードはMySQL5.7以降では「/var/log/mysqld.log」に書いてあります。パスワードの確認方法はつぎのとおりです。
1 | $ sudo cat /var/log/mysqld.log | grep root |
「[Note] A temporary password is generated for root@localhost: PiW9_KT=r5j#」のような行があると思います。この中の「PiW9_KT=r5j#」がパスワードです。
MySQLに接続します。
1 2 | $ mysql -u root -p PiW9_KT=r5j# |
mysql>と表示されればMySQLに接続できています。
rootのパスワードを変更しておきましょう。変更しないと、「ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.(rootのパスワードを変更してね)」と怒られてしまいます。パスワードの変更は次のとおりです。「password」(小文字)のところに、任意のパスワードを入力してください。
1 | mysql> SET PASSWORD FOR root@localhost=PASSWORD('password'); |
phpMyAdminをインストールする
MySQLをインストールした時点で、LAMP環境の構築は完了していますが、せっかくなのでphpMyAdminもインストールしてみます。phpMyAdminが不要な方は無視してください。
1 | $ sudo yum install -y --enablerepo=remi,remi-php71 phpMyAdmin |
phpMyAdminの設定を変更します。
1 | $ sudo vi /etc/httpd/conf.d/phpMyAdmin.conf |
16行目付近の「Require local」をコメントアウトして、「Require all granted」を追加します。
1 2 3 4 5 6 | <Directory /usr/share/phpMyAdmin/> AddDefaultCharset UTF-8 # Require local Require all granted </Directory> |
このようにすることで、サーバからのみではなく、どこからでもphpMyAdminにアクセスできるようになります。
セキュリティのために、Apacheのモジュールmod_sslもインストールします。mod_sslをインストールすることで、httpsでアクセスできるようになります。
1 | $ sudo yum install -y mod_ssl |
Apacheを再起動して、設定を適用します。
1 | $ sudo systemctl restart httpd |
以下URLでブラウザからphpMyAdminにアクセスができます。
https://hogefoobar.com/phpmyadmin
当記事で作成した環境を複製する場合は、パッケージ化しておくと便利です。パッケージ化すると同じ環境をラクに作成することができます。パッケージ化の方法はこちらの記事にまとめましたので、もしよければご確認いただければと思います。