注)この記事で紹介している環境に代わる新しい実習環境として ffdsm を作りました。ご興味あれば次の記事もチェックしてみてください。
概要
勉強会での利用を念頭に、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 ファイルを利用して環境を再現できる。今後の活動の中で積極的に活用していきたい。