Ansibleでサーバ(Amazon Linux2)の環境構築をしているのですが、rbenvを使わずにソースからrubyを入れたので、その手順をまとめてみました
インストールするためにやったこと
手順は大まかに次の4つになります
- Ansible GalaxyからRubyをインストールするロールを探す
-
ansible-galaxy install
コマンドでプロジェクトのroleに追加 - インストールしたいRubyのバージョンなど設定ファイルを書き換え
- Playbookを実行し、WebサーバのRubyのバージョンを確認する
※ Ansible Galaxyとは
ロールを共有するためのサービスで、Docker HubやChefのSupermarketのようなイメージです
1. Ansible GalaxyからRubyをインストールするロールを探す
Ansible GalaxyでkeywordにRubyと入力し、star数などを確認しながら目的のものを探します
今回はこちら( geerlingguy.ruby)を使ってみることにします
2. ansible-galaxy install
コマンドでプロジェクトのroleに追加
プロジェクトのrole配下にインストールしたかったため、こちらのコマンドを実行しました
$ ansible-galaxy install geerlingguy.ruby -p roles/servers/common
するとroles/servers/common/geerlingguy.rubyに作成されました
3. インストールしたいRubyのバージョンなど設定ファイルを書き換え
Ruby 2.4.2をインストールしたかったため、geerlingguy.ruby/defaults/main.yml
ファイルを書き換えます
---
workspace: /root
# Whether this role should install Bundler.
ruby_install_bundler: True
# A list of Ruby gems to install.
ruby_install_gems: []
# The user account under which Ruby gems will be installed.
ruby_install_gems_user: "{{ ansible_user }}"
# If set to True, ruby will be installed from source, using the version set with
# the 'ruby_version' variable instead of using a package.
ruby_install_from_source: True
ruby_download_url: http://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz
ruby_version: 2.4.2
# Default should usually work, but this will be overridden on Ubuntu 14.04.
ruby_rubygems_package_name: rubygems
※注意点
Playbookのgather_factsをtrueにしておかないと、 "{{ ansible_user }}"
が取得できないです
falseにする場合は、"{{ ansible_user }}"
を書き換える必要があります
省略
# The user account under which Ruby gems will be installed.
ruby_install_gems_user: "{{ ansible_user }}"
省略
Playbookの一例でこんなファイルだとすると
- name: webserver
hosts: web
gather_facts: true
remote_user: ec2-user
become: yes
roles:
- servers/common/geerlingguy.ruby
4. Playbookを実行し、WebサーバのRubyのバージョンを確認する
サーバにsshし、Rubyのバージョンを確認してみます
無事Ruby 2.4.2がインストールされました