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

  • 2017-03-05 (日) 12:25 初版作成
    2018-07-02 (月) 10:09 最終更新

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

概要

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

  • Apache 2.4
  • MariaDB 5.5
  • PHP 7.2
  • Xdebug 2.6
  • PECL uploadprogress 1.0
  • Postfix 2.10
  • Drush 8.17
  • UTF8MB4 Convert
  • Drupal Console 1.8.0
  • Composer 1.6.5

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

構築手順

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

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

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

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

次に、Vagrant の CentOS7 公式ベース BOX(v1804.02)を利用して VirtualBox の仮想マシンを作る。
https://app.vagrantup.com/centos/boxes/7

作業内容

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

vagrant init centos/7
vagrant up

仮想マシンの起動を確認した後、いったんシャットダウンする。

vagrant halt

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

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

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

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

仮想マシンを再起動する。

sudo reboot

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

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

VBoxGuestAddition が導入されたら、そのために追加したパッケージを削除する。

sudo yum -y groupremove "Development Tools"
sudo yum -y remove kernel-devel kernel-headers

いったん仮想マシンをシャットダウンする。

sudo shutdown -P now

ホスト OS の Windows プロンプトから 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 -y 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.2 をインストールする。

$ sudo yum --enablerepo=remi-php72 -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 ファイルをエディタで開き、2 箇所変更する。

まず、待ち受けポート 8080 を追加する(43 行目)

Listen 8080

仮想マシンの IP アドレスをホスト名として設定(96 行目)

ServerName 192.168.12.34:80

/var/www/html ディレクトリ配下で .htaccess で設定を再定義できるようにする。(152 行目)

    AllowOverride All

変更後、ファイルを保存する。

/etc/httpd/conf.d ディレクトリの下に vhost.conf ファイルを作成し、

sudo vi /etc/httpd/conf.d/vhost.conf

/var/www/pj フォルダをポート 8080 の Web 公開フォルダにする構成を記述して保存する。

<VirtualHost *:80>
  DocumentRoot /var/www/html
  ServerName 192.168.12.34:80
  <Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>
<VirtualHost *:8080>
  DocumentRoot /var/www/pj
  ServerName 192.168.12.34:8080
  <Directory /var/www/pj>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

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.17/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-php72 -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
;xdebug.remote_autostart = 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

ログアウトする。

exit

いったんシャットダウンする。

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 "pj/", "/var/www/pj", type: "virtualbox", mount_options: ['dmode=777','fmode=777']
end

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

仮想マシンを起動してログインする。

vagrant up
vagrant ssh

Web 公開ディレクトリの所有者を vagrant に変更する。

sudo chown vagrant:vagrant /var/www/html

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

$ 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 ボックスも削除する。

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-0.1.1"
    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 "pj/", "/var/www/pj", type: "virtualbox", mount_options: ['dmode=777','fmode=777']
  config.vm.provision "shell", run: "always", inline: <<-SHELL
  SHELL
end

先に出力した package.box ファイルを bkenro/centos7dsm という名前で読み込み、起動する。

vagrant box add bkenro/centos7dsm package.box
vagrant up

次の URL で Apache のデフォルトページが表示されることを確認する。
http://192.168.12.34/
http://192.168.12.34:8080/

ポート 8080 番の Web ディレクトリ(/var/www/pj)は、Vagrant の synced_folder なのでホスト OS 側の pj フォルダとして共有されるが、その代わりアクセスは遅い。他方ポート 80 番の Web ディレクトリ(/var/www/html)は Linux のファイルシステムなのでアクセスが速い。それぞれの特徴に合わせて、開発やデバッグでファイルを直接操作しながら結果を確認する場合は 8080 番、ブラウザ経由の実習のみを行う場合は 80 番という具合に使い分けることができる。

出力したパッケージの box ファイルを Vagrant Cloud に公開:
https://app.vagrantup.com/bkenro/boxes/centos7dsm/

Vagrantfile やユーティリティを含む導入キットを下記で管理:
https://github.com/bkenro/centos7dsm

まとめ

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

更新履歴

  • 2018-07-02 (月) 10:09
    構築時の環境を Vagrant 2.1.2、VirtualBox 5.2.12 に更新。ベースとして使用する CentOS/7 公式 box を v1804.02 に更新。PHP 7.2、Drush 8.17、Drupal Console 1.8.0、Composer 1.6.5 に更新。php.ini に追記する xdebug 用の指定に xdebug.remote_autostart = 1 を追加 (VSCode 用)。公開 box のバージョンを 0.1.1 に更新。
  • 2018-03-03 (土) 11:43
    centos7dsm の更新を反映。Apache の設定ファイルを更新。導入キット centos7dsm のプロジェクト URL を追記。
  • 2018-02-20 (火) 12:37
    Vagrant Cloud への公開を追記(v0.1.0)
  • 2018-02-20 (火) 12:15
    使用ソフトウェア(Xdebug、Drush、Drupal Console、Composer)のバージョンアップ。 ベースとなる Centos/7 公式 box を v1801.02 に更新。 synced_folder を /var/www/html から /var/www/pj に移動して 8080 番ポートで公開。 /var/www/html は linux 上のファイルシステムで従来どおり 80 番で公開。 Drupal やデータベースのインストールを削除。 その他、typo 修正などエディトリアルな変更。
  • 2017-10-18 (水) 11:11
    centos7dsm の改訂に合わせて全面的に書き直し。
  • 2017-08-24 (木) 06:57

DISQUS コメント