Vagrant + VirtualBoxでCentOS 7の仮想環境を構築し、WordPressを動かす方法

Vagrant(ベイグラント)は、VirtualBoxなどで作成した仮想マシンを、設定ファイルに基づいて簡単に構築・管理できるツールです。Webサイト開発において、本番環境と限りなく近いローカル開発環境を構築するためによく使われます。

Vagrantを使うメリット

Vagrantで環境構築を行う主なメリットは、以下の3つです。

  • 本番環境の再現性: OSやミドルウェアのバージョンを揃え、本番と全く同じ環境をローカルに構築できます。
  • 環境の配布・共有: 「Box」という仕組みで環境を書き出し、チームメンバーに簡単に配布・共有できます。
  • スキルの向上: サーバー構築やインフラ周りの知識が身につき、Web制作者としてのスキルアップにつながります。

MAMPとの違い

MAMP(やXAMPP)は、Webサイトの実行に必要なソフトウェア(Apache, MySQL, PHPなど)がパッケージ化されたツールです。ボタン一つで環境が手に入り手軽ですが、設定がGUIに限られるなど、本番環境との差異が生まれやすい側面もあります。

対してVagrantは、OSレベルから自分で環境を構築します。手間はかかりますが、サーバーにSSH接続して操作するなど、より実践的なスキルが身につきます。

今回構築する環境

今回はVagrantを使い、以下の流れでローカル開発環境を構築します。

  • VagrantとVirtualBoxの準備
  • Vagrantの初期設定(Boxの追加、Vagrantfileの編集)
  • CentOS 7(OS)のインストール
  • Apache(Webサーバー)のインストール
  • PHPのインストール
  • MariaDB(MySQL)(データベース)のインストール
  • (最終目標としてWordPressのインストールも可能です)

VagrantとVirtualBoxのインストール

まず、VagrantとVirtualBoxをそれぞれの公式サイトからダウンロードし、インストールしてください。(※本記事ではインストール手順は割愛します)

VagrantとVirtualBoxの連携では、Guest Additions(VirtualBoxの拡張機能)のバージョン違いによるエラーが起きやすいです。以下のプラグインを先に入れておくと、バージョンを自動で調整してくれます。

$ vagrant plugin install vagrant-vbguest

もし `vagrant up` 時にエラーが出た場合は、VagrantやVirtualBoxを最新版にアップデートし直してみましょう。

CentOS 7サーバーの構築

まず、Vagrantで仮想マシンを構築するための「Box」イメージを持ってきます。

「Vagrant Cloud」という公式サイトで様々なBoxが配布されていますが、今回はVagrant公式のCentOS 7を利用します。

$ vagrant box add centos/7

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 3

どの仮想化ソフトウェアで使うか(プロバイダー)を聞かれるので、「3」(VirtualBox)を選択します。

Boxがダウンロードされたか確認します。

$ vagrant box list

一覧に `centos/7` が表示されればOKです。

次に、環境構築用の作業ディレクトリを作成し、そこでVagrantを初期化します。

$ mkdir ~/vagrant/study
$cd ~/vagrant/study$ vagrant init centos/7

`study` ディレクトリ(名前は任意です)の中に `Vagrantfile` という設定ファイルが作成されます。このファイルを編集します。

`Vagrantfile` を開き、以下の行のコメント(#)を外し、IPアドレスを有効化します。これにより、ローカルPCから仮想マシンへ固定IPでアクセスできるようになります。

config.vm.network "private_network", ip: "192.168.33.10"

設定が完了したら、仮想マシンを起動します。

$ vagrant up

起動したら、SSHで仮想マシンに接続(ログイン)してみましょう。

$ vagrant ssh

コマンドプロンプトが切り替わり、CentOSに接続できたら、仮想マシンの準備は完了です。

Apacheのインストールと設定

ここからは、SSHで接続した仮想マシン(CentOS 7)側での作業です。

まず、WebサーバーとしてApache(httpd)をインストールし、ブラウザで表示できるようにします。作業しやすいよう、`sudo su` でrootユーザー(管理者権限)になっておきます。

$ sudo su

# yum install httpd
# systemctl start httpd
# systemctl enable httpd

(`systemctl enable httpd` は、仮想マシン再起動時にApacheも自動起動させるための設定です)

本来であればセキュリティ対策としてファイアウォール(firewalld)を起動させ、必要なポート(http/80番)だけを許可する設定を行いますが、今回はローカル環境のため、ファイアウォールは停止したまま進めます。

この時点で、ホストPC(あなたのPC)のブラウザから、先ほどVagrantfileで設定したIPアドレス `http://192.168.33.10` にアクセスしてみてください。Apacheの「Testing 123..」といった初期ページが表示されれば成功です。

(ついでに、今後の設定ファイル編集のため `vim` もインストールしておくと便利です)

# yum -y install vim-enhanced

ドキュメントルートを共有フォルダに設定

Vagrantの便利な機能「共有フォルダ(Synced Folders)」を設定します。これにより、ホストPC(あなたのPC)の特定フォルダと、仮想マシンのフォルダを同期できます。いつも使っているエディタでファイルを編集し、それを仮想マシンのApacheで表示する、という流れが実現します。

まず `exit` で仮想マシンからログアウトし、`Vagrantfile` があるディレクトリに戻ります。

`Vagrantfile` を再度開き、`config.vm.synced_folder` の行を以下のように編集(コメント解除&追記)します。ここでは例として、ホストPCの `./html` フォルダ(Vagrantfileと同じ階層に作成)を、仮想マシンの `/var/www/html`(Apacheのドキュメントルート)に同期させます。

config.vm.synced_folder "./html", "/var/www/html", owner:"apache", group:"apache", mount_options: ['dmode=777','fmode=777']

設定を反映させるため、Vagrantをリロードします。

$ vagrant reload

ここで、共有フォルダへのアクセス時に403エラー(アクセス権限エラー)が出ることがあります。これはCentOSのセキュリティ機能「SELinux」が原因であることが多いため、今回はこれを無効化します。

再度 `vagrant ssh` で接続し、`sudo su` でrootになります。SELinuxの設定ファイルを開き、`enforcing` を `disabled` に変更します。

# vim /etc/sysconfig/selinux

# (ファイルの中身)
SELINUX=disabled

設定を反映させるため、仮想マシンを再起動します。(`exit` して `$ vagrant reload` でも構いません)

IPアドレスではなくドメインで表示させる

`192.168.33.10` のようなIPアドレスでアクセスするのは覚えにくいですよね。`my-test.site` のような任意のドメイン名でアクセスできるように設定しましょう。

これには、ホストPCの `hosts` ファイル(IPとドメイン名を関連付けるファイル)を編集する必要がありますが、Vagrantのプラグインを使うと自動で設定できます。

まず `exit` してホストPCに戻り、`vagrant-hostsupdater` プラグインをインストールします。

$ vagrant plugin install vagrant-hostsupdater

Vagrantfileに、使用したいドメイン名(エイリアス)を追記します。

config.vm.network "private_network", ip: "192.168.33.10"
config.hostsupdater.aliases = ["my-test.site", "dev.wordpress.local"]

Vagrantをリロードします。初回はPCの管理者パスワードを求められる場合があります。(`hosts` ファイルを編集するためです)

$ vagrant reload

バーチャルホストの設定

これだけではまだドメイン名で表示できません。Apache側に「このドメイン名でアクセスが来たら、このフォルダ(ドキュメントルート)のファイルを見せる」という設定(バーチャルホスト)が必要です。

`vagrant ssh` と `sudo su` で仮想マシンに入り、設定ファイルを作成します。

# cd /etc/httpd/conf.d
# touch my-test.conf
# vim my-test.conf

# (ファイルの中身)
<VirtualHost *:80>
    ServerName my-test.site
    DocumentRoot /var/www/html
</VirtualHost>

# (もし複数ドメイン設定するなら)
<VirtualHost *:80>
    ServerName dev.wordpress.local
    DocumentRoot /var/www/html/wordpress
</VirtualHost>

設定を反映させるため、Apacheを再起動します。

# systemctl restart httpd

これで、ブラウザから `http://my-test.site` でアクセスできるようになりました。

PHPのインストール

次に、WordPressの動作に必要なPHPをインストールします。CentOS 7の標準リポジトリはPHPのバージョンが古いので、新しいバージョン(ここではPHP 7.2)をインストールできる「EPEL」と「Remi」という追加リポジトリを利用します。

# yum -y install epel-release
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# remiリポジトリを有効化してPHP 7.2と関連モジュールをインストール
# yum install --enablerepo=remi,remi-php72 php php-devel php-mbstring php-mysqlnd php-pdo php-gd

# Apacheを再起動してPHPを認識させる
# systemctl restart httpd

Apacheの再起動でPHPのインストールは完了です。

MySQL (MariaDB) のインストール

最後にデータベースをインストールします。CentOS 7では、MySQLから派生した「MariaDB」が標準となっています。WordPressはどちらでも動作します。

# yum install mariadb-server
# systemctl enable mariadb
# systemctl start mariadb

インストールが完了したら、初期セキュリティ設定を行います。rootパスワードの設定や、不要なテストデータベースの削除などを対話形式で行います。

# mysql_secure_installation

(最初にrootパスワードを聞かれますが、設定前なのでEnterキーを押します。その後、新しいパスワードを設定します)

これで、Apache, PHP, MariaDB (LAMP環境) が整いました。この環境にWordPressのファイルを配置し、データベースを作成すれば、WordPressサイトを動かすことができます。

まとめ

Vagrantを使ってCentOS 7のローカル開発環境を構築する手順を紹介しました。コマンド操作が多く難しく感じるかもしれませんが、一度この流れを経験しておくと、サーバーやインフラの知識が格段に深まります。ぜひ挑戦してみてください。


よくある質問(FAQ)

Q1. MAMPとVagrant、Web制作初心者はどちらを使うべきですか?

A1. 目的によります。手軽にWordPressやPHPの動作確認がしたいだけであれば、MAMP(やXAMPP)で十分です。一方、将来的に本番環境に近い設定を触りたい、サーバー(Linux)の知識も身につけたいという場合は、Vagrantに挑戦する価値が非常に高いです。

Q2. vagrant up でエラーが出て起動できません。

A2. エラーの原因は様々ですが、よくあるのはVirtualBoxとVagrantのバージョン非互換や、Guest Additionsのバージョン違いです。記事中で紹介した `vagrant-vbguest` プラグインの導入を試してみてください。また、VagrantやVirtualBoxを一度アンインストールし、最新版を入れ直すことで解決する場合もあります。

Q3. なぜセキュリティ機能であるSELinuxを無効にするのですか?

A3. 本来、SELinuxはサーバーのセキュリティを強固にする重要な機能です。しかし、適切な設定(パーミッション管理)を行わないと、今回のような共有フォルダからのファイル読み込みなどをブロックしてしまいます。本番環境では無効にすべきではありませんが、ローカルでの開発効率を優先し、今回は簡便な対処法として「無効化」を選択しました。SELinuxについて学習し、適切な設定(`chcon` コマンドなど)を行うのが理想です。

CONTACT

webサイト制作、デザインに関するご相談、御見積のご依頼など、弊社へのお問い合わせはこちら