wordpressの動作検証をするためにVagrantで実行環境構築しました。
構築した目的は、php7でちゃんと動くかを検証するためです。
dockerじゃなくてもvagrantで良いかなと思いVagrantを選びました。
実行環境は
- centos7.0
- php7
- mysql5.6
- nginx1.8.0
という構成です。
プロビジョニング
プロビジョニングに関してですが、chefを使おうと思ったのですが、あえてシェルスクリプトを使いました。
そんなに大した理由があるわけではないのですが、レシピ書くのが面倒だったのでシェルクスクリプトを利用しました。
ファイル名はprovision.sh
になります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#/bin/bash
function command_exists {
command -v "$1" > /dev/null;
}
# config
APP_DIR="/var/www/app"
MYSQL_PASSWORD="root"
WP_DATABASE_NAME="wordpress"
# base
yum install -y epel-release
# nginx
nginx_file="/etc/yum.repos.d/nginx.repo"
nginx_conf_file="/etc/nginx/conf.d/wordpress.conf"
if [ ! -e ${nginx_file} ]; then
cat > ${nginx_file} << `EOF`
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
`EOF`
fi
if ! command_exists nginx ; then
yum --enablerepo=nginx install nginx -y
if [ ! -e ${nginx_conf_file} ]; then
cat ${APP_DIR}/wordpress.conf >> ${nginx_conf_file}
fi
# サービス登録
systemctl enable nginx.service
systemctl restart nginx
fi
# mysql
if ! command_exists mysql ; then
rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
yum install -y mysql-server
systemctl enable mysqld.service
systemctl start mysqld.service
/usr/bin/mysql -e "CREATE DATABASE ${WP_DATABASE_NAME};" -D mysql
/usr/bin/mysql -e "SET PASSWORD FOR 'root'@'::1' = PASSWORD('newpassword');" -D mysql
/usr/bin/mysql -e "SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('${MYSQL_PASSWORD}');" -D mysql
/usr/bin/mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQL_PASSWORD}');" -D mysql
fi
# php
if ! command_exists php ; then
php_repo_file="/etc/yum.repos.d/php"
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install -y --enablerepo=remi-php70 php php-ast php-fpm php-mysqlnd php-pdo php-tidy php-zip php-mbstring php-gd
fi
# php config
sed -i "s/^;date.timezone =$/date.timezone = \"Asia\/Tokyo\"/" /etc/php.ini | grep "^timezone" /etc/php.ini
# php-fpm config
sed -i "s/^listen = 127.0.0.1:9000$/listen = \/var\/run\/php-fpm\/php-fpm\.sock/" /etc/php-fpm.d/www.conf | grep "^listen" /etc/php.ini
sed -i "s/^;listen.mode = 0660$/listen.mode = 0666/" /etc/php-fpm.d/www.conf | grep "^listen\.mode" /etc/php-fpm.d/www.conf
sed -i "s/^user = apache$/user = nginx/" /etc/php-fpm.d/www.conf | grep "^user =" /etc/php-fpm.d/www.conf
sed -i "s/^group = apache$/group = nginx/" /etc/php-fpm.d/www.conf | grep "^group =" /etc/php-fpm.d/www.conf
# php-fpm start
if command_exists php ; then
systemctl enable php-fpm.service
systemctl start php-fpm.service
fi
# composer
if ! command_exists composer ; then
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
cd ${APP_DIR}
fi
composer install --no-interaction
|
Vagrantfileについて
Vagrantfileを共有する際に、実行する環境に依存するのものをどうするか?
でも書きましたが、Vagrantfile
の他にvagrant_config.yml
も用意しています。
なのでこんな感じのVagrantfileになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
require 'yaml'
config_yaml = YAML.load_file('vagrant_config.yml')
Vagrant.configure(2) do |config|
config.vm.box = config_yaml['box']
config.vm.network "private_network", ip: config_yaml['ip']
config_yaml['synced_folders'].each do |syncde_folder|
config.vm.synced_folder syncde_folder['host'], syncde_folder['guest'], type: syncde_folder['type']
end
config.vm.provider "virtualbox" do |vb|
vb.memory = config_yaml['memory']
end
config.vm.provision :shell, :path => "./provision.sh", :privileged => true
end
|
そしてvagrant_config.yml
1
2
3
4
5
6
7
8
|
box: "geerlingguy/centos7"
ip: "192.168.33.140"
synced_folders:
- host: './'
guest: '/var/www/app'
type: nfs
memory: 1024
|
nginx用のconfファイルを用意する
nginxのconfを用意します。
なお、今回はfpmにunix domain sokcetを使って接続するようにしています。
適当なconfファイルなので不満がある方は自分で適切にカスタマイズしてください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# wordpress.conf
server {
listen 80;
server_name polidog.local;
access_log /var/log/nginx/polidog.access.log;
error_log /var/log/nginx/polidog.error.log;
location / {
root /var/www/app/wordpress;
index index.html index.htm index.php;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/app/wordpress$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
|
WordPressはcomposerでインストールする。
僕はしばらくWordPressとは無縁の世界に生きていたんですが、実はcomosperでインストールできるみたいです。
で、先ほどのprovision.sh
を見ていた方なら気づいていたともいますが、wordpressはcomposerでinstallします。
初回のvagrant upでプロビジョニングが実行されればwordpressもインストールされてしまいます。
hostsの設定を変更する
httpでアクセスするにはhostsを書き加える必要があります
1
2
|
$ /etc/hosts
192.168.33.140 polidog.local
|
wordpressにアクセスして初期設定をする
http://polidog.local
にアクセスすればwordpressの画面が表示されます。
こんな感じに
最後に
サンプルはpolidog/wordpress-vagrantに用意してあります。
インフラ系が苦手僕でもさくっと検証環境を作ることできました。
苦手だと思っているかとも、是非試してください。