EnsekiTT Blog

EnsekiTTが書くブログです。

Ruby on Railsの環境設定をAnsibleで行う話

つまりなにしたの?

先日は、Railsの環境をポチポチコマンド打ち込んでやっていた。
何度もやりそうだし、何度もやるのは大変なのでAnsibleでやることにした。
f:id:ensekitt:20180430033928j:plain
ensekitt.hatenablog.com

やることリスト

Ansibleってなに?

レッドハットが開発するオープンソースの構成管理ツールである。サーバを立ち上げる際、あらかじめ用意した設定ファイルに従って、ソフトウェアのインストールや設定を自動的に実行する事が出来る。
今回はこの設定ファイルであるmain.ymlを作った。

Ansibleのインストール

sudo yum install -y epel-release && sudo yum install -y ansible
sudo yum update -y ansible

Ansibleのmain.ymlを作る

---
- hosts: localhost
  become: yes
  vars:
    - ruby_version: 2.4.4
  tasks:
    - name: disable iptables
      service: name=iptables state=stopped enabled=no
    - name: install libselinux-python
      yum: name=libselinux-python state=latest
    - name: disable SELinux
      selinux:
        state: disabled
    - name: remove localtime
      file: path=/etc/localtime state=absent
    - name: change timezone
      file: src=/usr/share/zoneinfo/Asia/Tokyo dest=/etc/localtime state=link force=yes mode=0644
    - name: change locale
      lineinfile: >-
        dest=/etc/sysconfig/i18n
        state=present
        regexp=^LANG=
        line='LANG="ja_JP.UTF-8"'
    - name: install remi
      command: rpm -Uvh --force http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
    - name: install man
      yum: name=man state=latest

    - name: mysql repository
      command: rpm -Uvh --force http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
    - name: install mysql
      yum: name={{item}} state=present
      with_items:
        - mysql
        - mysql-devel
        - mysql-server
        - mysql-utilities
    - name: copy my.cnf.custom
      copy: src=my.cnf.custom dest=/etc/my.cnf backup=yes
    - name: start mysql
      service: name=mysqld state=started enabled=yes

    - name: install ruby packages
      yum: name={{item}} enablerepo=remi,epel state=present
      with_items:
        - gcc
        - openssl
        - openssl-devel
        - rpm-build
        - gcc-c++
        - bzip2
        - bzip2-devel
        - libtool
        - zlib
        - zlib-devel
        - httpd-devel
        - openssl-devel
        - curl-devel
        - ncurses-devel
        - gdbm-devel
        - readline
        - readline-devel
        - sqlite
        - sqlite-devel
        - libyaml-devel
        - libffi-devel
        - bison

    - name: git clone rbenv
      git: repo=https://github.com/sstephenson/rbenv.git dest=/home/vagrant/.rbenv
      when: rbenv_present.rc == 1
      become: no
    - name: update bash_profile
      copy: src=bash_profile.custom dest=/home/vagrant/.bash_profile backup=yes
      become: no

    - name: git clone ruby-build
      git: repo=https://github.com/sstephenson/ruby-build.git dest=/home/vagrant/.rbenv/plugins/ruby-build
      when: rbuild_present.rc == 1
      become: no

    - name: update rbenv
      command: git pull --rebase chdir=/home/vagrant/.rbenv
      become: no
    - name: update ruby-build
      command: git pull --rebase chdir=/home/vagrant/.rbenv/plugins/ruby-build
      become: no

    - name: install ruby
      shell: /bin/bash -lc "rbenv install {{ruby_version}} && rbenv rehash && rbenv global {{ruby_version}}"
      when: ruby_installed.rc == 1
      become: no

    - name: install node script
      shell: /bin/bash -lc "curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -"
      when: node_installed.rc == 127
    - name: install nodejs
      yum: name=nodejs state=latest
      when: node_installed.rc == 127
    - name: install npm
      yum: name=npm state=latest
      when: node_installed.rc == 127

MySQLの設定

$ vi my.cnf.custom
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

character_set_server=utf8
default-storage-engine=InnoDB
innodb_file_per_table

symbolic-links=0

user=mysql

;plugin-load=rpl_semi_sync_master=semisync_master.so
;plugin-load=rpl_semi_sync_slave=semisync_slave.so

;rpl_semi_sync_master_enabled=1
;rpl_semi_sync_master_timeout=10
;rpl_semi_sync_slave_enabled=1

;performance_schema

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

!includedir /etc/my.cnf.d

bashprofileの設定

$ vi bash_profile.custom 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

Ansibleで実行する

ansible-playbook main.yml --connection=local

これでRailsをもう一度実行する

$ gem install rails
$ rails new sampleapp
$ cd sampleapp
$ bundle exec spring binstub --all
$ rails server

f:id:ensekitt:20180430033223p:plain

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。