親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

Centos6.7でRailsを動かす環境をVagrantとAnsibleで作成


タイトルの通りですが、ansibleでrailsの環境をvagrant上に作った時の設定を記します。
データベース(MySQL等)の設定は省いています。
バージョン情報は以下になります。
ruby : 2.2.3
Rails : 5.0.1
passenger : 5.1.2

vagrantのディレクトリ下にhostsファイルを作成してpingが通るようにしてください。

また、あらかじめVagrantfile上で以下の2行のコメントアウトは外してください。

config.vm.network "forwarded_port", guest: 80, host: 8080
 
config.vm.network "private_network", ip: "192.168.33.10"

playbook.ymlのソースコードは以下になります。

- hosts: vagrant
  sudo: yes
  tasks:
    - name: Install git
      yum: name=git state=latest
 
    - name: Install rbenv
      git: repo=https://github.com/sstephenson/rbenv.git dest=~/.rbenv
 
    - name: Install rbenv-build
      git: repo=https://github.com/sstephenson/ruby-build.git dest=~/.rbenv/plugins/ruby-build
 
    - name: ~/.rbenv/ to ~/bash_profile
      lineinfile: >
        dest="~/.bash_profile"
        line="export PATH=$HOME/.rbenv/bin:$PATH"
 
    - name: rbenv init to ~/bash_profile
      lineinfile: >
        dest="~/.bash_profile"
        line='eval "$(rbenv init -)"'
 
    - name: source ~/bash_profile
      shell: source ~/.bashrc executable=/bin/bash
 
    - name: Install ruby
      command: /bin/bash -lc "rbenv install 2.2.3 && rbenv rehash && rbenv global 2.2.3"
 
    - name: Update gem
      command: gem update --system
 
    - name: Install rails
      command: /bin/bash -lc "gem install rails --no-ri --no-rdoc --version '=5.0.1'"
 
    - name: rehash rbenv
      shell: /bin/bash -lc "rbenv rehash"
 
    - name: Install httpd
      yum: name={{ item }} state=latest
      with_items:
        - httpd
        - httpd-devel
        - apr-devel
        - apr-util-devel
        - libcurl-devel
 
    - name: Install passenger
      command: /bin/bash -lc "gem install passenger -q --no-rdoc --no-ri -v '5.1.2'"
 
    - name: rehash rbenv
      shell: /bin/bash -lc "rbenv rehash"
 
    - name: Install passenger-module
      shell: /bin/bash -lc "passenger-install-apache2-module --auto --languages=ruby"
      args:
        creates: /etc/httpd/conf.d/passenger.conf
 
    - name: Create conf
      file: path=/etc/httpd/conf.d/rails.conf state=touch mode="u+rw,g-wx,o-rwx"
 
    - name: Copy conf
      copy: >
        src=rails.conf
        dest=/etc/httpd/conf.d/rails.conf
 
    - name: Restart apache
      action: service name=httpd state=restarted
 
    - name: Stop Iptables
      action: service name=iptables state=stopped
 
    - name: Install source code
      git: repo=https://github.com/〜.git dest=/var/www/html/railsApp #ご自身が所有しているGitのクローンパスを指定してください。
 
    - name: Chmod root
      file:
        path: /root
        mode: 0751
        recurse: yes
 
    - name: Chmod root/.rben
      file:
        path: /root/.rbenv
        mode: 0755
        recurse: yes
 
    - name: gem bundler install
      shell: /bin/bash -lc "gem install bundler"
 
    - name: Install Bundle
      shell: /bin/bash -lc "/root/.rbenv/shims/bundle install --without test development" chdir=/var/www/html/railsApp

また、rails.confファイルは予めVagrantのディレクトリ下に配置しておく必要があり、
コードは以下になります。

<VirtualHost *:80>
    RailsEnv production
    PassengerEnabled on
    ServerName sample.jp #ここはそれぞれのドメインに合わせてください。IPでつなぐなら何でもいいです。
    DocumentRoot /var/www/html/railsApp/public/
    RailsBaseURI /
  <Directory /var/www/html/railsApp/public/>
    AllowOverride all
    Options -MultiViews
  </Directory>
</VirtualHost>
||< 

>|xml|
LoadModule passenger_module /root/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/passenger-5.1.2/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /root/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/passenger-5.1.2
  PassengerDefaultRuby /root/.rbenv/versions/2.2.3/bin/ruby
</IfModule>
||< 

あとは実行コマンドで実行すれば完了です。
>|yml|
ansible-playbook -i hosts playbook.yml

処理が終わったら、「192.168.33.10/コントローラパス」にアクセスしてみてください。