vagrant環境の設定手順 備忘録
いちいち手動でインストールするのが面倒くさいのでshell scriptでごっそりインストールできるように設定しました。
(※本来であればansibleが使えるのが一番良いのですが、まだそこまでできません。)
更新ログ
2015/10/15
使用するもの
- run.sh ↓のファイルのコマンドを設定する(自動設定を作ります、ご自分の環境に合わせて設定してください。)
- rbenv.sh ↓のファイルのコマンドを設定する
- chef/centos-6.6
- vagrant 1.7.4
- virtualbox version 4.3.12
- 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
◆最後に一回再起動する(いつでも良い)
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の設定
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
exec $SHELL -l
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の中に各ファイルがコピーされているか確認
- my.cnf.org
- postfix_org
- php.ini.org
- /etc/httpd/conf/httpd.conf.org
- /etc/postfix/main.cf.org
- /etc/postfix/master.cf.org
各種設定を行う
バーチャルホストの設定
◆バーチャルホストの設定を行う
sudo vim /etc/httpd/conf.d/virtualhost-00.conf
<VirtualHost *:80>
ServerName 192.168.33.10
DocumentRoot /var/www/html/フォルダ名
</VirtualHost>
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
※↓の部分上書きする。
---
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
---
[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
# 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で余計な半角スペースなどが入っているとうまくビルドされない。
sudo service postfix start
mailコマンドでテストメールを送信
[root@vagrant-centos65 postfix]# mail メールアドレス
Subject: test
test
.
EOT
[root@vagrant-centos65 postfix]#
最後にvagrant haltをすると多分次の起動からエラーが出るので以下の手順を実行する
- vagrant upでログイン
※こんなかんじのエラーが出るので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
- sudo /etc/init.d/vboxadd setup
- その後実行結果の「yum install kernel-devel-2.6.32-431.el6.x86_64」を実行する sudo yum -y install 〇〇
- インストールが成功したら再度「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を量産したいと思いパッケージ化した時のエラー処理
- パッケージ後のエラー
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は起動しているがネットワークの設定が変わっているので無効にする
sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
不要になった設定だけど残しておくもの
httpd.confファイルを編集(shellファイルで設定済み)
sudo vim /etc/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の設定変更(これはすでに入っているので不要)
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でこんなエラーが出ました。
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
EnableSendfile off