追記
Dockerでの構築方法を以下にまとめました。参考にしてみてください。
Docker で Rails5 の開発環境を「rails new」から構築する
はじめに
Railsの開発を進めたいが、手元のパソコンの環境は不用意に壊したくないという時、仮想環境で開発を行うと思います。
そのために、すぐに開発に使えるVagrantfileを作成しました。
こちらのgithubリポジトリで公開しています。
https://github.com/kawasin73/vagrant-centos-rails
インストールされるもの
- CentOS 6.7
- rbenv
- ruby 2.2.2
- sqlite
- MySQL
- Nokogiriに必要なライブラリ
- ImageMagickに必要なライブラリ
- Git
- その他、必要そうなライブラリ
必要となる環境
開発環境は、VirtualBox と Vagrant を用いて構築します。
Mac OSX では、VirtualBox と Vagrant を Homebrewでインストールできます。
brew cask install virtualbox
brew cask install vagrant
vagrant plugin install vagrant-vbguest
Windows でインストールするときは、公式サイトからダウンロードしてください。
vagrant-vbguest
は、Guest Additionを最新に更新してくれるpluginです。
このプラグインがない場合、2回目以降のvagrant up
で、mount に失敗することがあります。
また、vagrant-vbguest
をインストールした場合でも、vagrant up
に失敗してしまうことがあるようです。その場合は、以下の記事を参考にしてください。
利用方法
git clone https://github.com/kawasin73/vagrant-centos-rails
cd vagrant-centos-rails
vagrant up
vagrant ssh
vagrant up
を実行すると、CentOSのboxのダウンロードが始まりCentOSが立ち上がります。そして、初回起動時はprovisionが行われ、上に挙げたライブラリがインストールされます。
provisionerはShellなので、Vagrant と VirtualBox 以外に必要となる依存はありません。
また、ゲストOS上の~/data
にホストOSのカレントディレクトリをマウントしているので、ホストOSのIDEを使っての開発もできます。
vagrant ssh
に成功したら、
cd data
gem install rails
rails new . --database=mysql --skip-turbolinks
rake db:create
bundle install
とするとRailsの開発を進められます。
詳しくは、@masuidriveさんの @masuidrive のRailsプロジェクトの始め方を参考にすると良いと思います。
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
GUEST_RUBY_VERSION = '2.2.2'
config.vm.box = "bento/centos-6.7"
config.vm.hostname = "centos-6-for-rails"
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.synced_folder ".", "/home/vagrant/data"
config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
vb.gui = false
# Customize the amount of memory on the VM:
vb.memory = ENV["VM_MEMORY"] || "1024"
end
config.vm.provision "shell", privileged: true, inline: <<-SHELL
function install {
echo installing $1
shift
yum -y install "$@" >/dev/null 2>&1
}
yum -y update >/dev/null 2>&1
install "development tools" gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel
install "Git" git
install "sqlite" sqlite sqlite-devel
# mysql 5.6
yum install -y http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm >/dev/null 2>&1
install "MySQL" mysql mysql-server mysql-devel
chkconfig --add mysqld
chkconfig --level 345 mysqld on
echo "Start and Initialize MySQL"
service mysqld start >/dev/null 2>&1
mysql -uroot <<SQL
-- SET ROOT PASSWORD --
UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
-- REMOVE ANONYMOUS USERS --
DELETE FROM mysql.user WHERE User='';
-- REMOVE REMOTE ROOT --
DELETE FROM mysql.user
WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- REMOVE TEST DATABASE --
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
-- RELOAD PRIVILEGE TABLES --
FLUSH PRIVILEGES;
CREATE USER 'rails'@'localhost';
SET PASSWORD FOR 'rails'@'localhost' = PASSWORD('password');
CREATE DATABASE development_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE test_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON development_db.* to 'rails'@'localhost';
GRANT ALL PRIVILEGES ON test_db.* to 'rails'@'localhost';
SQL
install "Nokogiri dependencies" libxml2 libxslt libxml2-devel libxslt-devel
install "ImageMagick" ImageMagick ImageMagick-devel
cp /etc/localtime /etc/localtime.org
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
echo "ZONE=\"Asia/Tokyo\"" > /etc/sysconfig/clock
service crond restart
SHELL
config.vm.provision "shell", privileged: false, inline: <<-SHELL
echo installing rbenv
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
echo 'gem: --no-ri --no-rdoc' >> ~/.gemrc
echo installing ruby#{GUEST_RUBY_VERSION}
rbenv install #{GUEST_RUBY_VERSION}
rbenv global #{GUEST_RUBY_VERSION}
echo installing Bundler
gem install bundler -N >/dev/null 2>&1
SHELL
end
MySQLは、初期化とユーザーの作成、データベースの作成まで行っています。
今後について
PostgreSQLやRedisなども入れることができたらなぁと思っています。
皆さん使ってみてください!
参考URL
@masuidriveさんのVagrantfileは、ubuntuだったので、それのCentOS版を今回作りました。