ansibleを使ってRailsを立ち上げてみた。

安藤(プログラマー)
演劇もやっていまする。

取り上げる題材を散らかしまくっておりますが、今回はansibleを使ってrailsを立ち上げてみようかと思います。
rubyも触ってみたいですしねー。
環境は毎度おなじみ、vagrantでやります!

今回はついでにvimも一緒にインストールされるように作って楽しようかなと思います。笑

では早速いきます。
まずはplaybookの中をざっとご紹介。

playbook
∟ init.yml
∟ roles
∟ ruby
∟ tasks
∟ main.yml
∟ rbenv.yml
∟ ruby-build.yml
∟ ruby-install.yml
∟ templates
∟ rbenv.sh.j2
∟ mysql
∟ tasks
∟ main.yml
∟ rails
∟ tasks
∟ main.yml
∟ vim
∟ tasks
∟ main.yml

こんな具合のファイル構成です。
役割イメージを自分なりに説明していきますと・・・

init.yml

- hosts: all
roles:
- ruby
- mysql
- rails
- vim
vars:
ruby_version: 2.4.0
rails_version: 5.0.0

こいつがまぁ司令塔ですね。
rolesに配置されているそれぞれのtasksを呼び出すイメージでしょうか。

init.ymlから司令を受けて働くのがrolesな訳ですね。
上から順に行きましょう。

ruby

main.yml

- include: rbenv.yml
- include: ruby-build.yml
- include: ruby-install.yml

こいつがrubytasksの中のまとめ役。
それぞれのymlの処理をincludeしていますー。

rbenv.yml

- name: git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
command: git clone https://github.com/sstephenson/rbenv.git ~/.rbenv creates=~/.rbenv
tags:
- ruby
- rbenv
- name: add rbenv initialization to profile
template: src=rbenv.sh.j2 dest=/etc/profile.d/rbenv.sh owner=root group=root mode=0755
sudo: true
tags:
- ruby
- rbenv

こやつがrbenvを落として来て、templatesにあるrbenv.sh.j2を実行。

rbenv.sh.j2

if [ -d "$HOME/.rbenv" ]; then </div></div>
</span>export PATH=$HOME/.rbenv/bin:$PATH;
export RBENV_ROOT=$HOME/.rbenv;
eval "$(rbenv init -)";
fi
</pre></div></figure> これで`rbenv`コマンドが使えるようになります。 続いて、`ruby`を入れる際に必要なプラグインも用意しまして、 #### ruby-build.yml
- name: git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
command: git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build creates=~/.rbenv/plugins/ruby-build/
tags:
- ruby
- ruby-build
そして`ruby`のインストールですね! #### ruby-install.yml
- name: install build depends by Ruby
yum: name={{ item }} state=present
with_items:
- gcc
- openssl-devel
- libyaml-devel
- readline-devel
- zlib-devel
- git
sudo: true
tags:
- ruby
- ruby:install
- install
- name: check ruby rbenv installed
shell: cd; bash -lc "rbenv versions | grep {{ ruby_version }} | tr '*' ' ' | sed -e 's/\s\+//' | cut -f1 -d' '"
register: ruby_installed
ignore_errors: yes
tags:
- ruby
- ruby:install
- install
- name: rbenv install {{ ruby_version }}
command: rbenv install {{ ruby_version }}
when: ruby_installed.stdout != ruby_version
tags:
- ruby
- ruby:install
- install
- name: rbenv global {{ ruby_version }}
command: rbenv global {{ ruby_version }}
when: ruby_installed.stdout != ruby_version
tags:
- ruby
- ruby:install
- install
これで`ruby`はOK! 続いて`mysql`ですー。 ### mysql #### main.yml
- name: install MySQL
yum: name={{ item }} state=present
with_items:
- mysql-server
- mysql-devel
sudo: true
tags:
- mysql
- install
- name: Start MySQL service
action: service name=mysqld state=started
sudo: true
tags:
- mysql
- install
書かれたまんまですね! `mysql`をインストールして、ついでに作動させてくれています。 そして本命・**rails**さんの登場です。 ### rails #### main.yml
- name: check Rails installed
shell: rails -v | cut -f 2 -d ' '
register: rails_installed
ignore_errors: yes
tags:
- ruby
- ruby:install
- install
- name: gem install rails -v {{ rails_version }}
command: gem install rails -v {{ rails_version }}
when: rails_installed.stdout != rails_version
tags:
- rails
- install
これにて`rails`さんの準備はOK!! ついでのついでですが、`vim`さんにも参入していただきますm(_ _)m こんなに色々入れなくていいのですが、面倒だったのでバッと入れちゃいましたね・・・。 はい、すいません・・・。 ### vim #### main.yml
- name: requires install
yum: name={{ item }} state=present
with_items:
- ctags
- mercurial
- ncurses-devel
- lua
- lua-devel
- perl
- perl-devel
- perl-ExtUtils-Embed
- python
- python-devel
- libselinux-python
sudo: true
tags:
- install
- name: install vim
yum: name=vim state=present
sudo: true
tags:
- vim
- install
- name: copy .vimrc file to vagrant home
copy: src=~/.vimrc dest=~vagrant/.vimrc owner=vagrant group=vagrant mode="u=rw,g=r,o=r"
tags:
- vim
- name: git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
command: git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
tags:
- vim
- neobundle
- install
`neobundle`までついでに入れる徹底ぶり。笑 PCのローカル環境から`.vimrc`もコピーして、便利ツールも反映、、! これで`Taglist`とか`NEADTree`も使えるわけですな(^ ^) ## 無事に一発でRails立ち上がりました!! なんとなく達成感のある`playbook`作りでした。 頑張って、**Rails**勉強するぞー。