VagrantにPHP7とnginxとmysqlをインストールしてみた

Twitter ツイート Hatena Bookmark ブックマーク

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もインストールされてしまいます。

1
$ vagrant up

hostsの設定を変更する

httpでアクセスするにはhostsを書き加える必要があります

1
2
$ /etc/hosts
192.168.33.140 polidog.local

wordpressにアクセスして初期設定をする

http://polidog.localにアクセスすればwordpressの画面が表示されます。

こんな感じに

drawing
drawing
drawing
drawing

最後に

サンプルはpolidog/wordpress-vagrantに用意してあります。

インフラ系が苦手僕でもさくっと検証環境を作ることできました。
苦手だと思っているかとも、是非試してください。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。