okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

CentOS7にRailsプロジェクトを作成するまで

たまに簡単なAWSサービスの動作確認とかで、簡単なRailsアプリケーションの開発環境を作るまでの手順がブログにまとまってると(個人的に)便利だなと思うことがあるので、今回はそんな環境を構築する手順を書きます。
パッケージは執筆時点でのバージョンなので、適宜アップデートして下さい。

f:id:okochang:20150714153507j:plain

使用したAMI

CentOS 7 x86_64 (2014_09_29) EBS HVM-b7ee8a69-ee97-4a49-9e68-afaee216db2e-ami-d2a117ba.2 (ami-89634988)
※起動時にIAMロールもセットしています。

aws.amazon.com

基本設定

まず最初に自分自身のユーザーを作成や時間の設定をします。EC2インスタンス起動直後に接続するユーザーはcentosです。

$ sudo -i
# useradd okochang
# passwd okochang
# visudo -f /etc/sudoers.d/okochang
# sudo cat /etc/sudoers.d/okochang
# User rules for okochang
okochang ALL=(ALL) NOPASSWD:ALL
# timedatectl set-timezone Asia/Tokyo
# sed -i -e "s/^ - update_hostname/# - update_hostname/g" /etc/cloud/cloud.cfg
# echo 'rails.okochang.com' > /etc/hostname

作成したユーザーに手元の環境から接続するためのSSH公開鍵をセットしたり、今後使うためにSSHキーペアを作成します。

$ su - okochang
$ mkdir -m 700 .ssh
$ echo 'ssh-rsa your-ssh-key-tesxt-data' .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ ssh-keygen -C rails.okochang.com
$ sudo reboot

SELinuxごめんなさい

$ sudo sed -i -e "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
$ sudo reboot

必要なパッケージのインストール

Railsの環境を構築するために必要なパッケージのインストールと、AWSコマンドラインツールをインストールしておきます。

$ sudo yum update -y
$ sudo yum install -y git emacs gcc make zlib-devel libxml2-devel libxslt-devel readline-devel openssl-devel gcc-c++ curl-devel ruby-devel  vim wget epel-release bzip2 bind-utils nodejs
$ sudo reboot
$ sudo easy_install pip
$ sudo pip install awscli
$ sudo pip install awsebcli

Git

ソースコードの管理にGitを使うので、このへんも設定しておきます。

$ git config --global user.email "okochang@example.com"
$ git config --global user.name "okochang"

Ruby

rbenvを使って、現時点最新の安定版であるRuby 2.2.2をインストールします。

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ cd .rbenv/plugins/ruby-build/
$ sudo ./install.sh
$ cd
$ echo 'export PATH=$HOME/.rbenv/bin:$PATH' >> .bashrc
$ echo 'eval "$(rbenv init -)"' >> .bashrc
$ exec $SHELL -l
$ rbenv install --list
$ rbenv install 2.2.2
$ rbenv global 2.2.2

gems

サンプルプロジェクトではBundlerを使ってgemパッケージを管理しますので、インストールします。

$ gem install rbenv-rehash
$ rbenv rehash
$ gem install bundler

PostgresQL

サンプルプロジェクトでデータベースは使う予定はありませんが、PostgreSQLを使えるようにしてます。プロジェクト名をmimawarigumiにする予定なので、ユーザー名に指定しています。

$ sudo yum install -y postgresql postgresql-server postgresql-libs postgresql-contrib postgresql-devel
$ sudo su - postgres
$ initdb --encoding=UTF-8 --locale=ja_JP.UTF-8
$ exit
$ sudo systemctl start postgresql
$ sudo systemctl enable postgresql
$ sudo su - postgres
$ createuser -a -d -P mimawarigumi
$ exit

サンプル用のRailsプロジェクト作成

プロジェクト用のディレクトリを作成して、railsコマンドでプロジェクトを初期化します。
初期化したら、現時点の内容をコミットします。以降の作業は適宜コミットしていくものとします。

$ mkdir -p repos/mimawarigumi
$ cd repos/mimawarigumi
$ bundle init
$ sed -i -e 's/# gem "rails"/gem "rails"/g' Gemfile
$ bundle config build.nokogiri --use-system-libraries
$ bundle install --path vendor/bundle
$ bundle exec rails new . -d postgresql --skip-test-unit
$ bundle exec rake db:migrate
cat << EOF >> .gitignore

# Ignore ruby version configuration.
/.ruby-version

# Ingonre bundled contents.
/vendor/bundle

# Ignore sass cache
.sass-cache

# Ignore dotenv
/.env
EOF
$ git add .
$ git commit -m "initial commit"

静的ページの作成

静的ページの作成をしていきます。最初にGemfileにrspecとcapybaraを追加してインストールしておきました。具体的な変更内容はこちらを見て下さい。

$ vim Gemfile
$ bundle install --path vendor/bundle
$ bundle exec rails generate controller StaticPages home --no-test-framework
$ bundle exec rails generate rspec:install
$ bundle exec rails generate integration_test static_pages
$ vim app/views/static_pages/home.html.erb 
$ vim spec/rails_helper.rb
$ vim app/views/static_pages/home.html.erb 
$ vim config/routes.rb
$ vim config/database.yml

あとがき

簡単なRailsアプリのサンプルが出来ました。
普段GitHubを使っていることもありCodeDeployとかCodePipelineとかもGitHub連携で試してみたいのです。そういう時にこういうサンプル用のアプリを持っておくと便利かなと。