vagrant環境構築　備忘録

# vagrant環境の設定手順　備忘録

いちいち手動でインストールするのが面倒くさいのでshell scriptでごっそりインストールできるように設定しました。
（※本来であればansibleが使えるのが一番良いのですが、まだそこまでできません。）

# 更新ログ
 2015/10/15

## 使用するもの

1. run.sh　↓のファイルのコマンドを設定する（自動設定を作ります、ご自分の環境に合わせて設定してください。）
2. rbenv.sh　↓のファイルのコマンドを設定する
2. chef/centos-6.6
3. vagrant 1.7.4
4. virtualbox version 4.3.12
5. vagrant box：
https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.0.0/centos-6.6-x86_64.box

## 構築環境

**windows 8.1**

## インストールするもの

apache
php
mysql
ruby(rbenv 2.1.2)
rails
vagrantを入れているフォルダ
その他の設定は手動で設定します。

## centosの日本語化
上記のBOXをインストールすると文字化けするので日本語化する


### ◆現状確認（日本じゃなかった場合は↓へ）
```lang:コマンド
locale
```

### ◆日本語関連のパッケージをまとめてインストール
```lang:コマンド
sudo yum -y groupinstall "Japanese Support"
```

### ◆言語ファイルの編集
```lang:コマンド
sudo vi /etc/sysconfig/i18n
```
```lang:デフォルトファイル
--------------------------------------
    LANG="en_US.UTF-8"
    SYSFONT="latarcyrheb-sun16"
--------------------------------------
↑を↓に編集して保存
```

```lang:編集後
--------------------------------------
    LANG="ja_JP.UTF-8"
    SYSFONT="latarcyrheb-sun16"
--------------------------------------
```

### ◆ロケールを追加
```lang:コマンド
sudo localedef -f UTF-8 -i ja_JP ja_JP.utf8
```

### ◆ついでにタイムゾーンも変更しておく
```lang:コマンド
sudo vi /etc/sysconfig/clock
```

```lang:ファイル編集
↓の様にファイルを編集
--------------------------------------
ZONE="Etc/UTC"
↓
ZONE="Asia/Tokyo"
--------------------------------------
```

```lang:コマンド
sudo cp /usr/share/zoneinfo/Japan /etc/localtime
```

◆最後に一回再起動する（いつでも良い）
```lang:コマンド
sudo reboot
```

### ◆再起動後 dateコマンドで確認する日本語になっていればOK
```lang:コマンド
date
```

```lang:結果
2015年 10月 14日 水曜日 03:58:11 CEST
```


```lang:設定ファイル
１．run.shファイルを用意します。
（ここから↓をそっくり使います。#はコメントアウト）

-----
#!/bin/sh
# system update
sudo yum -y update

# 必要ツールのインストール
sudo yum -y install yum-cron wget vim install openssl-devel httpd mysql mysql-libs vim-enhanced bind-utils tree ImageMagick-devel mysql-devel libxml2-devel libxslt-devel　libcurl-devel git gcc mysql-devel mysql2 libffi-devel　ruby-devel gcc-c++ httpd httpd-devel apr-devel apr-util-devel libcurl-devel mariadb-server mariadb-devel ImageMagick ImageMagick-devel ipa-pgothic-fonts install libxml2 libxslt libxml2-devel libxslt-devel readline-devel mailx cyrus-sasl-md5 cyrus-sasl-plain
# cronの設定
sudo /etc/rc.d/init.d/yum-cron start
sudo chkconfig yum-cron on

# libiconvインストール
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar xvfz libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/Cellar/libiconv/1.13.1
make
sudo make install
cd ../

# node.jsをインストール
wget http://nodejs.org/dist/v0.8.5/node-v0.8.5.tar.gz
tar zxvf node-v0.8.5.tar.gz
cd node-v0.8.5
./configure
make
sudo make install
make clean
cd ../
sudo yum -y install mysql-devel.x86_64 --enablerepo=remi

# epelのインストール
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo rpm -Uvh epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6.rpm

# httpd.confバックアップ
sudo cp -pr /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org

# FTPソフトなどを使わなくても良くするためのシンボリックリンクを作成(はじめはwww/htmlを削除してから新しくシンボリックリンクを作る)
sudo rm -rf /var/www/html
sudo ln -fs /vagrant /var/www/html
ln -fs /vagrant /home/vagrant/rails

# postfixのバックアップ作成
sudo cp -pr /etc/postfix /etc/postfix_org
sudo cp -pr /etc/postfix/main.cf /etc/postfix/main.cf.org
sudo cp -pr /etc/postfix/master.cf /etc/postfix/master.cf.org

# phpをインストールするためのファイル編集
sudo sed -i".org" -e "6s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo

# phpをインストール
sudo yum --enablerepo=remi install -y php php-devel php-mysql php-mbstring php-gd

# phpファイルのバックアップ
sudo cp -pr /etc/php.ini /etc/php.ini.org

# mysqlのインストールと設定ファイルのバックアップ
sudo yum install -y --enablerepo=remi mysql-server
sudo cp -pr /etc/my.cnf /etc/my.cnf.org

# rbenvのインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

# SElinuxを一時的に無効にするコマンドを実行
sudo setenforce 0

# /etc/selinux/configファイルを編集する
sudo sed -i".org" -e "7s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# ファイヤーウォールの停止
sudo chkconfig iptables off

# postfixの設定を自動で行う（postfix設定ファイルは手動）
sudo sed -i".cf" -e "116s/inet_interfaces = localhost/inet_interfaces = all/g" /etc/postfix/main.cf
sudo sed -i".cf" -e "119s/inet_protocols = all/inet_protocols = ipv4/g" /etc/postfix/main.cf
sudo sed -i".cf" -e "317a relayhost = [smtp.gmail.com]:587" /etc/postfix/main.cf
sudo sed -i".cf" -e "318a smtp_use_tls = yes" /etc/postfix/main.cf
sudo sed -i".cf" -e "319a smtp_sasl_auth_enable = yes" /etc/postfix/main.cf
sudo sed -i".cf" -e "320a smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" /etc/postfix/main.cf
sudo sed -i".cf" -e "321a smtp_sasl_tls_security_options = noanonymous" /etc/postfix/main.cf
sudo sed -i".cf" -e "322a smtp_sasl_mechanism_filter = plain" /etc/postfix/main.cf
sudo sed -i".cf" -e "323a smtp_sasl_security_options = noanonymous" /etc/postfix/main.cf
sudo sed -i".cf" -e "324a smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt" /etc/postfix/main.cf

#httpdの設定を自動で行う
sudo sed -i".conf" -e "44s/ServerTokens OS/ServerTokens Prod/g" /etc/httpd/conf/httpd.conf
sudo sed -i".conf" -e "331s/Options Indexes FollowSymLinks/Options -Indexes FollowSymLinks/g" /etc/httpd/conf/httpd.conf
sudo sed -i".conf" -e "402s/DirectoryIndex index.html index.html.var/DirectoryIndex index.php index.cgi index.html index.html.var/g" /etc/httpd/conf/httpd.conf
sudo sed -i".conf" -e "536s/ServerSignature On/ServerSignature Off/g" /etc/httpd/conf/httpd.conf
sudo sed -i".conf" -e "990a NameVirtualHost *:80" /etc/httpd/conf/httpd.conf

# apacheの編集後確認コマンド
apachectl configtest

# apacheを起動します。
sudo service httpd start

# apacheを起動した状態にします。
sudo chkconfig httpd on

# phpの設定
sudo sed -i".ini" -e "366s/expose_php = On/expose_php = Off/g" /etc/php.ini
sudo sed -i".ini" -e "396s/memory_limit = 128M/memory_limit = 20M/g" /etc/php.ini
sudo sed -i".ini" -e "469s/display_errors = Off/display_errors = On/g" /etc/php.ini
sudo sed -i".ini" -e "577a error_log = /var/log/php.log" /etc/php.ini
sudo sed -i".ini" -e "789a upload_tmp_dir = /var/www/html/php/tmp/" /etc/php.ini
sudo sed -i".ini" -e "s/upload_max_filesize = 2M/upload_max_filesize = 2048M/g" /etc/php.ini
sudo sed -i".ini" -e "872a date.timezone = Asia/Tokyo" /etc/php.ini
sudo sed -i".ini" -e "s/SMTP = localhost/SMTP = smtp.gmail.com/g" /etc/php.ini
sudo sed -i".ini" -e "s/smtp_port = 25/smtp_port = 587/g" /etc/php.ini
sudo sed -i".ini" -e "959a sendmail_from = no-reply@stone-rise.com" /etc/php.ini
sudo sed -i".ini" -e "1632a mbstring.language = Japanese" /etc/php.ini
sudo sed -i".ini" -e "1633a mbstring.internal_encoding = UTF-8" /etc/php.ini
sudo sed -i".ini" -e "1634a mbstring.http_input = auto" /etc/php.ini
sudo sed -i".ini" -e "1635a mbstring.http_output = UTF-8" /etc/php.ini
sudo sed -i".ini" -e "1636a mbstring.encoding_translation = On" /etc/php.ini
sudo sed -i".ini" -e "1637a mbstring.detect_order = auto" /etc/php.ini
sudo sed -i".ini" -e "1638a mbstring.substitute_character = none;" /etc/php.ini
sudo sed -i".ini" -e "1639a mbstring.func_overload = 0" /etc/php.ini
-----
```

## rbenvの設定
```lang:rbenvの設定ここは手動で行う。
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
exec $SHELL -l
```

## rbenv.shファイルを作成する
```lang:rbenv.shファイルを実行する
#!/bin/sh
# rbenvのインストール
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

# rubyのインストール
rbenv install -v 2.2.3
rbenv rehash
rbenv global 2.2.3
rbenv rehash

# gemのインストール
gem update --system
gem install bundler
gem install nokogiri -- --use-system-libraries
gem install rails
```

## shを実行する前に設定すること（作成しただけでは実行できないので権限変更）
```lang:コマンド
chmod 777 run.sh rbenv.sh
```

## 設定したものを確認する
* シンボリックリンクが表示されているかどうか
* php -v
* mysql --version
* rbenv -v
* ruby -v
* gem env
* rails -v
* /etcの中に各ファイルがコピーされているか確認

1. my.cnf.org
2. postfix_org
3. php.ini.org
4. /etc/httpd/conf/httpd.conf.org
5. /etc/postfix/main.cf.org
6. /etc/postfix/master.cf.org

## 各種設定を行う


# バーチャルホストの設定
```lang:httpd.conf
◆バーチャルホストの設定を行う
sudo vim /etc/httpd/conf.d/virtualhost-00.conf

<VirtualHost *:80>
  ServerName 192.168.33.10
  DocumentRoot /var/www/html/フォルダ名
</VirtualHost>
```

```lang:.confファイル
sudo vim /etc/httpd/conf.d/virtualhost-〇〇.conf

◆↓の設定を入れる
   <VirtualHost *:80>
      ServerName stone-rise.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /var/www/html/stone-rise
      <Directory /var/www/html/stone-rise>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options Indexes ExecCGI FollowSymLinks -MultiViews
         Order allow,deny
         Allow from all
         AllowOverride all
         # Uncomment this if you're on Apache >= 2.4:
         #Require all granted
      </Directory>
   </VirtualHost>


※passengerを入れるときはこちらを設定する
------------------------------
      <Location /フォルダ名>
       PassengerEnabled off
      </Location>
------------------------------
```

## my.cnfの設定
sudo vim /etc/my.cnf

```lang:mysqlデフォルト
※↓の部分上書きする。
---
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
---
```

```lang:mysql書き換え
[client]
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log_slow_queries
long_query_time = 1
slow_query_log_file=mysql-slow.log
log-queries-not-using-indexes

character_set_server=utf8
default-storage-engine=InnoDB
innodb_file_per_table

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8
```

## mysqlの起動

◆DB起動
sudo service mysqld start

◆DBをつねに起動しておく
sudo chkconfig mysqld on

◆◆◆DBを初期化◆◆◆
mysql_secure_installation

※ここでrootの設定を行う。
パスワードは123456で良い（ローカル環境のため）

## postfixの設定
◆↓最初のyumの部分でインストールする様に指定しているので不要
~~◆現在のcyrus-saslの確認（3つくらいしかないはずなので↓をインストールする）~~
~~sudo rpm -qa | grep cyrus-sasl~~

```lang:postfix
# sasl_passwdファイルを設定する
sudo vim /etc/postfix/sasl_passwd

[smtp.gmail.com]:587 example@gmail.com:パスワード
※Gmailパスワードは2段階認証のパスワードを使用

※/etc/postfixにて以下コマンド実行→sasl_passwdファイルをdb化
sudo postmap /etc/postfix/sasl_passwd

※上記のmain.cfで余計な半角スペースなどが入っているとうまくビルドされない。
```

```lang:postfix起動
sudo service postfix start
```

## mailコマンドでテストメールを送信

```lang:mailコマンド
[root@vagrant-centos65 postfix]# mail メールアドレス
Subject: test
test
.
EOT
[root@vagrant-centos65 postfix]#
```

## 最後にvagrant haltをすると多分次の起動からエラーが出るので以下の手順を実行する

1. vagrant upでログイン

```lang:error
※こんなかんじのエラーが出るので2を実行する
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device
```

2. sudo /etc/init.d/vboxadd setup
3. その後実行結果の「yum install kernel-devel-2.6.32-431.el6.x86_64」を実行する　sudo yum -y install 〇〇
4. インストールが成功したら再度「sudo /etc/init.d/vboxadd setup」

◆解決しました。
~~※最近構築するとここの部分でfaledが表示されてしまいますが一応は使えています。
　解決方法ご存じの方はご教示いただけると幸いです。~~

↑の解決方法が↓に載っていました。（seisonshiさんありがとうございます～～）
http://qiita.com/seisonshi/items/9fb2f84086a9450dbc4b

◆kernel-develダウンロードサイト
http://rpm.pbone.net/index.php3/stat/4/idpl/27633570/dir/scientific_linux_6/com/kernel-devel-2.6.32-504.el6.x86_64.rpm.html

## ※上記はbento/centos-6.6などを使うと発生する現象でしたのでboxを別でダウンロードして解決しています。

◆日本語化参考サイト
http://d.hatena.ne.jp/yk5656/20140527/1402758009


# vagrant packageでパッケージ化させた

同じ設定のboxを量産したいと思いパッケージ化した時のエラー処理

1. パッケージ後のエラー

```lang:shell
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

ARPCHECK=no /sbin/ifup eth1 2> /dev/null

Stdout from the command:
Device eth1 does not seem to be present, delaying initialization.

Stderr from the command:
```

こんなのが表示されたので調べたところ↓の対応で解決
※vagrantは起動しているがネットワークの設定が変わっているので無効にする

```lang:shell
sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
```


# 不要になった設定だけど残しておくもの
## httpd.confファイルを編集(shellファイルで設定済み)
sudo vim /etc/httpd/conf/httpd.conf

```lang:httpd.conf
# 44行目 OS情報を表示しないようにする
ServerTokens Prod

# 331行目 -(ハイフン)を追加
Options -Indexes FollowSymLinks

# 402行目　index.phpとindex.cgiを追加する
index.php index.cgi

# 536行目 OS情報を表示しないようにする
ServerSignature Off

# 990行目　コメントを外す（バーチャルホストを使えるようにする）
NameVirtualHost *:80
```
~~◆apacheの編集後確認コマンド~~
~~apachectl configtest~~

~~◆apacheを再起動します。~~
~~sudo service httpd restart~~

~~◆apacheを起動した状態にします。~~
~~sudo chkconfig httpd on~~


## php.iniの設定変更（これはすでに入っているので不要）
```lang:php.ini
336行付近：expose_php = On　→　expose_php = Off

※phpの使用メモリ設定
396行付近：memory_limit = 126M →　memory_limit = 2M

※エラーLevelの設定 
453行付近：error_reporting = E_ALL　追加

※確かエラーの表示
469行付近：display_errors = Off → display_errors = On

※エラーログの出力（apacheの設定も必要のようです）
577行付近：error_log = syslog → error_log = /var/log/php.log

※画像の一時アップロードディレクトリ指定
789行付近：upload_tmp_dir = /var/www/html/php/tmp/

※画像ファイルアップロードマックサイズ
791行付近：upload_max_filesize = 2M → upload_max_filesize = 2000M

※画像ファイルのアップロード設定　複数アップの設定が可能（とりあえず50ファイルとしてみます。）
794行付近：max_file_uploads = 20　→　max_file_uploads = 50

※時刻合わせ（タイムゾーンの設定）
869行付近：date.timezone = Asia/Tokyo

※postfixとの連携設定（gmail経由）
950行付近：SMTP = localhost　→　SMTP = smtp.gmail.com

※ポート変更
952行付近：smtp_port = 25　→　smtp_port = 587

※送信するメールアドレスの設定（メールアドレスは任意で設定）
959行目付近：sendmail_from = hoge@hoge.com　追加

※メールログの設定はなし（/var/log/maillogを確認すればよい）

※自動でセッションを取得する設定（任意で設定 1 にすると自動的にセッションを取得する）
1376行付近：session.auto_start = 0　

※文字コードの設定　基本的にコメントアウトをはずす（UTF8が基本）
1632行目付近：mbstring.language = Japanese
1638行目付近：mbstring.internal_encoding = UTF-8
1642行目付近：mbstring.http_input = auto
1647行目付近：mbstring.http_output = UTF-8
1655行目付近：mbstring.encoding_translation = Off
1660行目付近：mbstring.detect_order = auto
1665行目付近：mbstring.substitute_character = none;
1676行目付近：mbstring.func_overload = 0
```


~~◆現在のpostfixの確認~~
~~sudo rpm -qa | grep postfix~~
~~◆現在のpostconfの確認~~
~~/usr/sbin/postconf -a~~
~~◆/etc/postfix/main.cfファイルの編集~~
~~sudo vim /etc/postfix/main.cf~~
~~# 116行目　inet_interfaces = localhostを編集~~
~~inet_interfaces = all~~
~~# 119行目　inet_protocols = allを編集~~
~~inet_protocols = ipv4~~
~~# 318行目　以下追加~~
~~relayhost = [smtp.gmail.com]:587~~
~~smtp_use_tls = yes~~
~~smtp_sasl_auth_enable = yes~~
~~smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd~~
~~smtp_sasl_tls_security_options = noanonymous~~
~~smtp_sasl_mechanism_filter = plain~~
~~smtp_sasl_security_options = noanonymous~~
~~smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt~~




◆20160211　更新
久しぶりに起動してみたらapcheでこんなエラーが出ました。

```lang:apache
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
```

※調べてみたところ下記のサイトで解決方法が記載されていたので備忘録に追記
http://blog.dacelo.info/apache/entry-713.html



◆20160213　更新
静的ファイルなどが反映されない現象が起きました。
↓参考記事
http://qiita.com/shoyan/items/12389d5beaa8695b1a53

```lang:apache
EnableSendfile off
```