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

  • 2017-03-05 (日) 12:25 初版作成
    2019-06-29 (土) 17:38 最終更新

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

概要

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

  • Apache 2.4
  • MariaDB 5.5
  • PHP 7.3
  • Xdebug 2.7
  • PECL uploadprogress 1.0
  • Postfix 2.10
  • Drush 8.2.3
  • UTF8MB4 Convert
  • Drupal Console 1.9.0
  • Composer 1.8.6
  • Samba 4

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

構築手順

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

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

VirtualBox(v5.2.30)
https://www.virtualbox.org/wiki/Download_Old_Builds_5_2

Vagrant(v2.2.5)
https://www.vagrantup.com/downloads.html

なお、2019年6月現在、VirtulaBox の最新版は 6.0.8 だが、十分な安定性を確認できるまで様子を見ることとし、当面はバージョン 5 の最新版を利用する。

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

次に、Vagrant の CentOS7 公式ベース BOX(v1902.01)を利用して 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.3 をインストールする。

$ sudo yum --enablerepo=remi-php73 -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 = 512M
post_max_size = 64M
upload_max_filesize = 64M

/etc/httpd/conf/httpd.conf ファイルをエディタで開き、/var/www/html ディレクトリ配下で .htaccess で設定を再定義できるように変更する。(151 行目)

    AllowOverride All

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

Apache を有効にする。

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

samba4 をインストールする。

$ sudo yum -y install samba4
$ sudo systemctl enable smb
$ sudo systemctl enable nmb

/etc/samba/smb.conf ファイルを次のように編集する。

[global]
        map archive = no
        unix charset = UTF-8
        dos charset = CP932
        workgroup = WORKGROUP
        map to guest = Bad User
[home]
        path = /home/vagrant
        writable = yes
        force user = vagrant
        force group = vagrant
        guest ok = yes
        guest only = yes
[www]
        path = /var/www/html
        writable = yes
        force user = vagrant
        force group = vagrant
        guest ok = yes
        guest only = yes

この設定により、/home/vagrant(vagrant のホームディレクトリ)と /var/www/html(Web 公開ディレクトリ)とが samba で共有される。

Drush をインストールする。

$ php -r "readfile('https://github.com/drush-ops/drush/releases/download/8.2.3/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-php73 -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']
end

作業フォルダに 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.3.0"
    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.provision "shell", run: "always", inline: <<-SHELL
    ln -s /var/www/html /home/vagrant/html
    chown vagrant:vagrant /var/www
  SHELL
end

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

vagrant box add bkenro/centos7dsm package.box
vagrant up

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

続いて、次の共有フォルダに Windows のホスト OS からアクセスできることを確認する。

  • \\192.168.12.34\www
  • \\192.168.12.34\home

これらの共有フォルダを通じて、ホスト OS と仮想マシンとの間でファイルを交換したり、ホスト OS 側のツールからサイトのファイルを管理できる。

出力したパッケージの box ファイルを(v0.3.0)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 ファイルを利用して環境を再現できる。今後の活動の中で積極的に活用していきたい。

更新履歴

  • 2019-06-29 (土) 17:38
    VirtualBox 5.2.30、Vagrant 2.2.5、PHP 7.3、Xdebug 2.7、Drush 8.2.3、Drupal Console 1.9、Composer 1.9 にそれぞれアップデート。VirtualBox の VM の名称を vm-centos7dsm-0.3.0 に更新。
  • 2019-01-13 (日) 13:14
    MariaDB 10.3.11、Drush 8.18、Composer 1.8.0 に更新。 構築時の実行環境を VirtualBox 5.2.22、Vagrant 2.2.3 に更新。 ベースとなる CentOS/7 の box ファイルのバージョンを v1811.02 に更新。 httpを8080番ポートで受け付ける設定を削除し、代わりにsamba4のインストールと設定を追加。
  • 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 コメント