礎(いしずえ)はRuby on Railsで開発したアプリケーションのステージング環境構築を支援します。

礎でできること

下記のミドルウェアをインストールまたは設定するためのItamae cookbookテンプレートを作成します。

  • Nginx
  • MariaDB(10.1) Server
  • Redis
  • RVM
  • Capistrano
  • Monit
  • Munin
  • NTP
  • OpenSSH Server

※デプロイ先はCentOS6/CentOS7のみ確認できています

デプロイテンプレートはItamaeとCapistranoで作成されるため、作成後に好みに応じて編集することができます。 また、MuninやMonitがモニタリングするためのWeb画面のセットアップまで行うため、稼働状況の確認までできます。 redisおよびSidekiqの監視も含めているため、ActiveJob + Sidekiq + Redisにも対応します。

礎のインストール

1.Gemfileに下記を追記する

group :development do
  gem 'itamae-plugin-recipe-rvm', github: 'tk-hamaguchi/itamae-plugin-recipe-rvm', require: false
  gem 'ishizue', github: 'tk-hamaguchi/ishizue'
end

2.bundle installでインストールし、gereratorでishizueをinstallする

bundle install
bundle exec rails g ishizue:install

3.構築後の環境にログインするための公開鍵をmisc/ssh_keysフォルダにコピーする

cp ~/.ssh/id_rsa.pub misc/ssh_keys

これで準備は完了です。

礎を試す

デプロイテンプレートにはVagrantfileも含まれているため、それを使ってCentOS7のboxにインストールしてみます

1.作業ディレクトリをmisc/itamaeに移し、仮想マシンを作成します

cd misc/itamae/
vagrant up

仮想マシンはVagrantfileの中に定義されている通り192.168.33.10のIPで上がってきます。上がってこなかった場合は、後述する別ホストへのデプロイを試してください。

2.Itamaeを使ってインストールを実施します

itamae ssh -h 192.168.33.10 -u root --ohai roles/staging.rb --node-yaml=nodes/staging.yml
 INFO : Starting Itamae...
root@192.168.33.10's password:

仮想マシンのパスワードは『vagrant』が設定されています。実行に失敗する場合は何度かリトライしてみてください。-l debug 付与するとデバックログが出ます。

3.実行終了後はWebサーバーからのアクセスが可能になります。

Main: http://192.168.33.10

Monitoring: http://192.168.33.10:8282

別ホストへのデプロイ

192.168.33.10以外にデプロイする場合は、下記の手順を踏んでください

1.Capistranoの設定ファイルを編集する。

vi misc/capistrano/config/deploy/staging.rb
        server 'YOUR_SERVER_IP', user: 'deploy', roles: %w{app db web}

2.その後Itamaeの実行時IPを変更先のIPに変更して実行する

cd misc/itamae/
itamae ssh -h YOUR_SERVER_IP -u root --ohai roles/staging.rb --node-yaml=nodes/staging.yml

Railsアプリのアップデートに追従する

Rails アプリをバージョンアップした時にはcapistranoの実行のみで対応可能です

cd misc/capistrano
cap staging deploy

http://192.168.33.10:8282 については、適宜Nginxの設定を書き直してください

rubocopでRSpecの書き方もチェック

Rubyは1つのことを実行するにも様々な書き方ができることが特徴の言語です。これは他の言語からRubyへ移ってくる際に学習コストを下げて参入障壁を下げる効果もありますが、複数名でソースコードを共有してプロダクトを開発する場合は、このメリットがデメリットに転じるケースがありま...… Continue reading