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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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

1
2
3
4
5
6
7
8
9
- 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

1
2
3
- include: rbenv.yml
- include: ruby-build.yml
- include: ruby-install.yml

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

rbenv.yml

1
2
3
4
5
6
7
8
9
10
11
12
- 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

1
2
3
4
5
if [ -d "$HOME/.rbenv" ]; then
  export PATH=$HOME/.rbenv/bin:$PATH;
  export RBENV_ROOT=$HOME/.rbenv;
  eval "$(rbenv init -)";
fi

これでrbenvコマンドが使えるようになります。
続いて、rubyを入れる際に必要なプラグインも用意しまして、

ruby-build.yml

1
2
3
4
5
- 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
- name: install build depends by Ruby
  yum: name= 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  | tr '*' ' ' | sed -e 's/\s\+//' | cut -f1 -d' '"
  register: ruby_installed
  ignore_errors: yes
  tags:
    - ruby
    - ruby:install
    - install

- name: rbenv install 
  command: rbenv install 
  when: ruby_installed.stdout != ruby_version
  tags:
    - ruby
    - ruby:install
    - install

- name: rbenv global 
  command: rbenv global  
  when: ruby_installed.stdout != ruby_version
  tags:
    - ruby
    - ruby:install
    - install

これでrubyはOK! 続いてmysqlですー。

mysql

main.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- name: install MySQL
  yum: name= 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 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 
  command: gem install rails -v 
  when: rails_installed.stdout != rails_version
  tags:
    - rails
    - install

これにてrailsさんの準備はOK!!

ついでのついでですが、vimさんにも参入していただきますm(_ _)m
こんなに色々入れなくていいのですが、面倒だったのでバッと入れちゃいましたね・・・。
はい、すいません・・・。

vim

main.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
- name: requires install
  yum: name= 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勉強するぞー。