Edited at

vagrant環境構築 備忘録

More than 1 year has passed since last update.


vagrant環境の設定手順 備忘録

いちいち手動でインストールするのが面倒くさいのでshell scriptでごっそりインストールできるように設定しました。

(※本来であればansibleが使えるのが一番良いのですが、まだそこまでできません。)


更新ログ

2015/10/15


使用するもの


  1. run.sh ↓のファイルのコマンドを設定する(自動設定を作ります、ご自分の環境に合わせて設定してください。)

  2. rbenv.sh ↓のファイルのコマンドを設定する

  3. chef/centos-6.6

  4. vagrant 1.7.4

  5. virtualbox version 4.3.12

  6. 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をインストールすると文字化けするので日本語化する


◆現状確認(日本じゃなかった場合は↓へ)


コマンド

locale



◆日本語関連のパッケージをまとめてインストール


コマンド

sudo yum -y groupinstall "Japanese Support"



◆言語ファイルの編集


コマンド

sudo vi /etc/sysconfig/i18n



デフォルトファイル

--------------------------------------

LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
--------------------------------------
↑を↓に編集して保存


編集後

--------------------------------------

LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"
--------------------------------------


◆ロケールを追加


コマンド

sudo localedef -f UTF-8 -i ja_JP ja_JP.utf8



◆ついでにタイムゾーンも変更しておく


コマンド

sudo vi /etc/sysconfig/clock



ファイル編集

↓の様にファイルを編集

--------------------------------------
ZONE="Etc/UTC"

ZONE="Asia/Tokyo"
--------------------------------------


コマンド

sudo cp /usr/share/zoneinfo/Japan /etc/localtime


◆最後に一回再起動する(いつでも良い)

lang:コマンド

sudo reboot


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


コマンド

date



結果

2015年 10月 14日 水曜日 03:58:11 CEST



設定ファイル

1.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の設定


rbenvの設定ここは手動で行う。

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
exec $SHELL -l


rbenv.shファイルを作成する


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を実行する前に設定すること(作成しただけでは実行できないので権限変更)


コマンド

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


各種設定を行う


バーチャルホストの設定


httpd.conf

◆バーチャルホストの設定を行う

sudo vim /etc/httpd/conf.d/virtualhost-00.conf

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



.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


mysqlデフォルト

※↓の部分上書きする。

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


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


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で余計な半角スペースなどが入っているとうまくビルドされない。



postfix起動

sudo service postfix start



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


mailコマンド

[root@vagrant-centos65 postfix]# mail メールアドレス

Subject: test
test
.
EOT
[root@vagrant-centos65 postfix]#


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


  1. vagrant upでログイン


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



  1. sudo /etc/init.d/vboxadd setup

  2. その後実行結果の「yum install kernel-devel-2.6.32-431.el6.x86_64」を実行する sudo yum -y install 〇〇

  3. インストールが成功したら再度「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. パッケージ後のエラー


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は起動しているがネットワークの設定が変わっているので無効にする


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


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の設定変更(これはすでに入っているので不要)


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でこんなエラーが出ました。


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


apache

EnableSendfile off