CentOS 7.2 + PHP 7.1 + MySQL 5.7 + Node 6.5 で開発環境構築して Vagrant の box ファイルをつくる

こんにちは、kenzauros です。

Laravel 5.3 を使ってみるのに vagrant に下記の開発環境を作成したので、まとめておきます。

概要

  • CentOS 7.2.1511
  • PHP 7.1.0RC1
  • Git 2.10.0
  • anyenv + ndenv
  • Node v6.5.0
  • Composer 1.2.0
  • MySQL 5.7.15

Vagrantfile

ベースとなる box は bento/centos-7.2 を利用しました。 Vagrant のバージョンは 1.8.5 です。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.ssh.insert_key = false
  config.vm.box = "bento/centos-7.2"
  config.vm.network "forwarded_port", guest: 80, host: 8080
end

適当なフォルダに上記のような適当な Vagrantfile を作成して vagrant up します。

起動したら vagrant ssh で vagrant マシンにつなぎ、 sudo su - で root に昇格します。

以下、特に書かなければ vagrant 上の root での実行とします。

環境構築

開発環境等インストール

あとあとのインストールで必要になるツール群とリポジトリをインストールします。

# yum install -y epel-release
# yum install -y vim gcc curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
# yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum install -y yum-utils
# yum-config-manager --enable remi-php71

SELinux, ファイアウォール無効化

ローカルの開発環境なのでセキュリティは無視して、SELinux とファイアウォールをオフにします。

# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled
# systemctl disable firewalld

Git インストール

もはや Git なしではなにもできないので、最新版をソースからインストールしておきます。

# wget https://www.kernel.org/pub/software/scm/git/git-2.10.0.tar.gz
# tar xzvf git-2.10.0.tar.gz
# cd git-2.10.0
# make prefix=/usr/local all
# make prefix=/usr/local install
# git --version
# rm -rf git-2.10.0*

PHP インストール

PHP 7 と必要そうなパッケージをまとめてインストールし、 php.ini をちょっとだけ設定しておきます。

# yum install -y --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-dom php-mysqlnd
# vim /etc/php.ini
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese

PHP Composer インストール

PHP のパッケージマネージャーである Composer をインストールして /usr/local/bin に移動しておきます。

# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer

anyenv + ndenv インストール

Node のバージョン管理のため anyenv + ndenv をインストールします。

anyenv インストール

# git clone https://github.com/riywo/anyenv /usr/local/anyenv
# echo 'export PATH=/usr/local/anyenv/bin:$PATH' >> /etc/profile.d/anyenv.sh
# echo 'export ANYENV_ROOT=/usr/local/anyenv'  >> /etc/profile.d/anyenv.sh
# echo 'eval "$(anyenv init -)"' >> /etc/profile.d/anyenv.sh
# source /etc/profile

ndenv インストール

# anyenv install ndenv
# exec $SHELL -l
# anyenv versions

node インストール

# ndenv install -l
# ndenv install v6.5.0
# ndenv versions
# ndenv global v6.5.0
# node -v

MySQL インストール・設定

CentOS 7 には標準で MariaDB が入っているのでアンインストールしてから、 MySQL のソースをダウンロードしてインストールします。

MySQL インストール

# yum remove -y mariadb-libs
# ll /var/lib/mysql/
# wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
# rpm -Uvh mysql57-community-release-el7-8.noarch.rpm
# yum install -y mysql-community-server
# rm -f mysql57-community-release-el7-8.noarch.rpm
# mysqld -V

my.cnf 設定

my.cnf に設定を追記してサービスを有効化して起動します。

# echo 'character_set_server=utf8' >> /etc/my.cnf
# echo 'skip-character-set-client-handshake'  >> /etc/my.cnf
# systemctl enable mysqld
# systemctl start mysqld
# systemctl status mysqld

root パスワード変更

起動するとログがはかれるので、その中に出力されている root の一時パスワードを取得します。

# cat /var/log/mysqld.log | grep "temporary password"

一時パスワードでログインしたあと、 MySQL のパスワード検証ポリシーを低く変更し、 root のパスワードを “root” に変えます。

ついでに開発環境用のデータベース develop を作成しておきます。名前は任意のものに変更してください。

# mysql -u root -p
mysql> SET GLOBAL validate_password_length=4;
mysql> SET GLOBAL validate_password_policy=LOW;
mysql> SHOW VARIABLES LIKE 'validate_password%';
mysql> set password for root@localhost=password("root");
mysql> CREATE DATABASE IF NOT EXISTS develop;
mysql> \q

ここまででパッケージのインストールは終了です。

vagrant パッケージ作成

環境を再利用できるように box ファイルを作ります。不要なら作る必要はありません。

クリーンアップ

box ファイルを軽量化するため、クリーンアップし、シャットダウンします。

# du -sh /var/cache/yum
# yum clean all
# dd if=/dev/zero of=/EMPTY bs=1M
# rm -f /EMPTY
# shutdown -h now

パッケージ作成

シャットダウンされたらホスト側で下記のコマンドを叩いて package.box を作成します。

vagrant package

今回生成された box ファイルは約 860MB でした!

以上、おつかれさまでした!

kenzauros