Vagrant/VirtualBox/CentOS7 で Drupal の実習用環境を構築する

  • 2017-03-05 (日) 12:25 初版作成
    2017-10-18 (水) 11:11 最終更新

Vagrant/VirtualBox/CentOS7 で Drupal の実習用環境を構築する

概要

勉強会での利用を念頭に、Vagrant で作成した VirtualBox 仮想マシンの Linux (CentOS/7) に Drupal の実習環境を構築したので内容をまとめておく。次のソフトウェア/ツールを導入した。

  • Apache 2.4
  • MariaDB 5.5
  • PHP 7.1
  • Xdebug 2.5
  • PECL uploadprogress 1.0
  • Postfix 2.10
  • Drupal 7.56 / Drupal 8.4.0
  • Drush 8.15
  • UTF8MB4 Convert
  • Drupal Console 1.0.2
  • Composer 1.5.2

ローカルマシン上にサイト環境を構築する場合、XAMPP や MAMP 等のネイティブ LAMP スタックを使う方法や Docker コンテナを使う方法もあるが、ここでは VirtualBox の Linux 仮想マシン上に環境を構築することとした。以下、実施した手順をまとめる。

構築手順

(1) ホスト OS 側に必要なソフトウェアの導入

構築作業は Windows 10 (64 bit) 上で行った。最初に下記ソフトウェアをインストールした。

VirtualBox(v5.1.28)
https://www.virtualbox.org/wiki/Downloads
Vagrant(v2.0.0)
https://www.vagrantup.com/downloads.html

(2) 公式ベース BOX から仮想環境を作る

次に、Vagrant の CentOS7 公式ベース BOX(構築時の使用バージョンは v1708.01)を利用して VirtualBox の仮想マシンを作る。
https://atlas.hashicorp.com/centos/boxes/7

作業内容

作業ディレクトリ(例:C:\path\to\dsm)を作成する。
コマンドプロンプトを開いて作業ディレクトリに移動し、下記コマンドを実行する。

vagrant init centos/7

生成された Vagrantfile を次のように編集(3行目を追加)する。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.synced_folder ".", "/vagrant", disabled: true
end

3行目は、rsync が見つからないというエラーを回避するために追加。CentOS の公式 BOX には VBoxGuestAdditions という拡張機能が導入されておらず 、そのままでは Vagrant の共有フォルダ(ゲスト OS 側のフォルダをホストと共有する機能)が使えない。このため、デフォルトの共有フォルダ /vagrant が有効なままだと代替の rsync コマンドを呼び出そうとして失敗する模様。3 行目はこれを無効にするための指定。

(3) 仮想環境に VBoxGuestAddition を導入する

仮想マシンが起動したら、いったんシャットダウンする。

vagrant halt

VirtualBox マネージャで対象の仮想マシンを選択し、[設定] - [ストレージ] - [光学ドライブの追加] - [空のままにする] をクリックして、[OK] をクリックする。

Vagrant は使わず VirtualBox マネージャから仮想マシンを起動し、vagrant ユーザー(パスワードも同じ)でログインして次のコマンドを実行する。

sudo yum -y update
sudo yum -y update kernel
sudo yum groupinstall "Development Tools"
sudo yum install kernel-devel kernel-headers

仮想マシンを再起動してログインし、コンソールのメニューで [デバイス] - [Guest Additions CD イメージの挿入] をクリックした後、次のコマンドを実行して VBoxLinuxAdditions をインストールする。

$ su
# mount /dev/cdrom /mnt
# cd /mnt
# sh VBoxLinuxAdditions.run

以上で VBoxGuestAddition が導入された。

VirtualBox マネージャで仮想マシンをシャットダウンし、Vagrant で起動しなおして、ssh でログインする。

vagrant up
vagrant ssh

(4) Drupal 環境に必要なソフトウェアを導入する

次のコマンドを実行して、ネットワーク関連のユーティリティと Apache を導入する。

$ sudo yum -y install net-tools bind-utils wget
$ sudo yum -y install httpd

SELinuxを無効にする

$ sudo setenforce 0
$ sudo getenforce    # Permissive を確認する

ファイル /etc/selinux/config を編集して該当箇所を次のように変更する。

  SELINUX=disabled

ファイアウォールを無効にする。

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

NTP クライアントを入れる。

$ sudo yum install chrony
$ sudo systemctl start chronyd
$ sudo systemctl enable chronyd

Timezone を設定する。

$ sudo timedatectl set-timezone Asia/Tokyo
$ sudo timedatectl status

MariaDB をインストールする。

$ sudo yum install mariadb mariadb-server

/etc/my.cnf ファイルを編集して [mysqld] セクションに下記の行を追加する。

[mysqld]
…
character-set-server=utf8

MariaDB を有効にする。

$ sudo systemctl enable mariadb.service
$ sudo systemctl start mariadb.service

MaraDB のセキュリティ設定を行う。

$ sudo mysql_secure_installation

この中で root のパスワードを root に設定。他の質問にはすべて Enter キーでデフォルト設定のまま実行。

Yum リポジトリを追加する。

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

PHP 7.1 をインストールする。

$ sudo yum --enablerepo=remi-php71 -y install php php-cli php-devel php-common php-mbstring php-mysql php-phpunit-PHPUnit php-pecl-xdebug php-fpm php-gd php-gmp php-mcrypt php-opcache php-pdo php-xml php-pecl-xdebug

/etc/php.ini ファイルを編集して、次のように各行を追加/変更する。

date.timezone = Asia/Tokyo
memory_limit = 256M
post_max_size = 64M
upload_max_filesize = 64M

/etc/httpd/conf/httpd.conf ファイルを編集して下記の部分を変更する。

 <Directory /var/www/html>
    #AllowOverride None
    AllowOverride All
 </Directory>

Apache を有効にする。

$ sudo systemctl enable httpd.service
$ sudo systemctl restart httpd.service

Drush をインストールする。

$ php -r "readfile('https://github.com/drush-ops/drush/releases/download/8.1.15/drush.phar');" > drush
$ php drush core-status
$ chmod +x drush
$ sudo mv drush /usr/local/bin

UTF8MB4 Convert をインストールする。

$ drush @none dl utf8mb4_convert-7.x
$ drush cc drush

uploadprogress をインストールする。

$ sudo yum --enablerepo=remi-php71 -y install php-pecl-uploadprogress.x86_64

メールサーバーをインストールする。

$ sudo yum install postfix
$ sudo systemctl restart postfix
$ sudo systemctl enable postfix

/etc/php.ini ファイルに xdebug の設定をコメントアウトした状態で追加しておく。

…
;xdebug.remote_enable=1
;xdebug.remote_connect_back=1

Composer をインストールする。

$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

Drupal Console をインストールする。

$ cd
$ curl https://drupalconsole.com/installer -L -o drupal.phar
$ php drupal.phar
$ sudo mv drupal.phar /usr/local/bin/drupal
$ sudo chmod +x /usr/local/bin/drupal

ログアウトし、いったんシャットダウンする。

vagrant halt

Vagrantfile を次のように編集する。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.synced_folder "vagrant/", "/vagrant", type: "virtualbox", mount_options: ['dmode=777','fmode=777']
  config.vm.synced_folder "www/", "/var/www", type: "virtualbox", mount_options: ['dmode=777','fmode=666']
end

作業フォルダに www フォルダと vagrant フォルダを作成する。上で Vagrantfile に追加した設定により、このフォルダがゲスト OS の Linux に共有される。

仮想マシンを起動する。

vagrant up

Drupal 用データベース作成シェルスクリプトを /vagrant/bin/dbcrt として作成しておく。

$ mkdir /vagrant/bin
$ vi /vagrant/bin/dbcrt

内容は下記のとおり:

#!/usr/bin/bash
if [ $# -lt 1 ]; then
  echo "creates mysql database whose name/pass/user are all arg."
  echo "usage: dbcrt <name>"
  exit 1;
fi
mysql -u root -p <<EOF
create database $1;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,
INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES
ON $1.* TO '$1'@'localhost' IDENTIFIED BY '$1';
flush privileges;
EOF

ホームディレクトリからシンボリックリンクを張っておく。

$ ln -s /vagrant/bin ~/bin

作成したスクリプトを利用して、d7 および d8 という名前で Drupal 用のデータベースを作成しておく。スクリプト実行時に求められるパスワードは先に再設定した root のパスワード(root)を入力する。

$ dbcrt d7
Enter password: ****
$ dbcrt d8
Enter password: ****

不要なファイルを削除し、ディスクを圧縮する。

$ su
# rm /root/.bash_history
# yum clean all
# rm -f /var/log/*
# rm -f /var/log/*/*
# rm -fr /tmp/*
# dd if=/dev/zero of=/0 bs=4k
# rm -f /0
# history -c
# exit
$ rm ~/.bash_history

以上の各操作の正常終了を確認のうえログアウトする。

$ exit

(5) 作成した環境をパッケージ出力

作成した環境を再現できるように、box ファイルを書き出しておく。

vagrant halt
vagrant package

VirtualBox マネージャで、作成した仮想マシンをいったん削除し、作業に使用した Vagrant BOX も削除する。

vagrant box remove centos/7

Vagrantfile を次のように変更する。

Vagrant.configure("2") do |config|
  config.vm.box = "bkenro/centos7dsm"
  config.vm.network "private_network", ip: "192.168.12.34"
  config.vm.hostname = "centos7dsm.local"
  config.vm.provider "virtualbox" do |vb|
    vb.name = "vm-centos7dsm"
    vb.customize ["modifyvm", :id, "--memory", "1024"]
  end
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.synced_folder "vagrant/", "/vagrant", type: "virtualbox", mount_options: ['dmode=777','fmode=777']
  config.vm.synced_folder "www/", "/var/www",  type: "virtualbox", mount_options: ['dmode=777','fmode=666']
  config.vm.provision "shell", run: "always", inline: <<-SHELL
    systemctl restart network.service
    systemctl restart httpd.service
  SHELL
end

先に出力した package.box ファイルを bkenro/centos7dsm という名前で読み込み、仮想マシンを起動して動作を確認する。

vagrant box add bkenro/centos7dsm package.box
vagrant up
vagrant ssh

まとめ

勉強会での利用を念頭に、Vagrant で作成した VirtualBox 仮想マシンの Linux (CentOS/7) に Drupal の実習環境を構築した。また、作成した環境をパッケージして BOX ファイルとして保存した。パソコンに Vagrant と VirtualBox の最新版をインストールしてあれば、この BOX ファイルを利用して環境を再現できる。今後「Drupal もくもく会」などで活用していきたい。

更新履歴

  • 2017-10-18 (水) 11:11
    centos7dsm の改訂に合わせて全面的に書き直し。
  • 2017-08-24 (木) 06:57

DISQUS コメント