Ansibleを利用して、LAMP環境を構築する!

みなさん、こんにちは!
イーアイティのSです。

今回は、Ansibleを利用してLAMP環境を構築してみたいと思います。

Ansibleについて

Ansibleとは、ChefやPuppetと並ぶ構成管理ツールの一つです。
特徴としては、以下の点が挙げられます。

  • ・設定ファイルが読みやすい(YAML形式で記述する)
  • ・ターゲットノードに特別なagentをインストールする必要がない
  • ・ブートストラッピング、構成管理、オーケストレーションに対応
  • ・冪等性を担保する(何度実行しても同じ結果になる事)

LAMP構成について

LAMPとは、Webアプリケーションを開発、運用する為のソフトウェア構成です。

構成

  • L → Linux (redhat, CentOS, debian, SUSE等のLinuxと呼ばれるOS)
  • A → Apache (Apache, nginx等のWebサーバ)
  • M→ MySQL (MySQL, MariaDB, postgresql等のデータベース)
  • P → PHP (PHP, ruby on rails等のアプリケーションの実行環境)

 

著者の主観ではありますが、Linux上にWebサーバ,DBサーバ、Webアプリケーションの実行環境が揃っているものを総称して、LAMP環境と呼ぶことが多いようです。

検証内容

ESXi上のターゲットノードに対して、Ansibleを利用してLAMP環境を構築します。

今回は、Playbookを階層構造化せずに、単一のファイルに記述します。

ソフトウェア構成

  • ・Apache 2.4
  • ・MariaDB 5.5
  • ・PHP 5.4

検証環境

コントロールノード

  • ・CentOS7.4
  • ・Ansible 2.5.0
  • ・python 3.6

※ コントロールノードとは、AnsibleでPlaybookを実行するノードの事です。

※ 事前にAnsibleをインストールしています。インストールついては、以下を参考にしてください。

<公式ドキュメント>

http://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html

ターゲットノード

  • ・CentOS7.4

※ ターゲットノードとは、コントロールノードから構成管理されるノードの事です。
※ 事前にコントロールノードからターゲットノードに、rootユーザで公開鍵認証を利用して、SSH接続ができるように設定しています。

Playbookの作成

Playbookとは、YAML形式で記述されるサーバの構成情報を記述するファイルの事です。

コントロールノードから、Ansibleを利用してPlaybookを実行することにより、ターゲットノードに構成を反映させます。

以下からの検証作業は、コントロールノードの任意のディレクトリで行って下さい。

インベントリファイルの作成

# vi hosts

[lamp]
<ターゲットのIPアドレス>

playbookの作成

# vi setup-lamp.yml

---
- name: LAMP Server
# hostsで実行対象のホストを指定する
hosts: lamp
# 変数の定義
vars:
# インストールパッケージの定義
install_packages:
  - httpd
  - php
  - php-devel
  - php-mbstring
  - php-mysql
  - mariadb
  - mariadb-devel
  - mariadb-server

# ファイアウォールを許可するサービスの定義
firewall_services:
  - http

# 起動させるサービスの定義
services:
  - httpd
  - mariadb
  - fiwawalld

# タスクの定義
tasks:
# 必要パッケージのインストール
- name: Install Packages
  yum:
  name: "{{ item }}"
  state: present
  with_items: "{{ install_packages }}"

# ファイアウォールの許可
- name: Allow Firewall Services
  firewalld:
  permanent: true
  service: "{{ item }}"
  state: enabled
  with_items: "{{ firewall_services }}"

# サービスの起動
- name: Start Services
  systemd:
  name: "{{ item }}"
  state: restarted
  enabled: yes
  with_items: "{{ services }}"

# SELinuxの無効
- name: Permissive SELinux
  selinux:
  policy: targeted
  state: permissive

 

Ansible Playbookの実行

# ansible-playbook -i hosts setup_lamp.yml


PLAY [LAMP Server] *************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.1.17]

TASK [Install Packages] ********************************************************
changed: [192.168.1.17] => (item=['httpd', 'php', 'php-devel', 'php-mbstring', 'php-mysql', 'mariadb', 'mariadb-devel', 'mariadb-server'])

TASK [Allow Firewall Services] *************************************************
changed: [192.168.1.17] => (item=http)

TASK [Start Services] **********************************************************
changed: [192.168.1.17] => (item=httpd)
changed: [192.168.1.17] => (item=mariadb)
changed: [192.168.1.17] => (item=firewalld)

TASK [Permissive SELinux] ******************************************************
changed: [192.168.1.17]

PLAY RECAP *********************************************************************
192.168.1.17 : ok=5 changed=4 unreachable=0 failed=0

※ 実行に失敗する方は、公開鍵認証を利用してSSH接続できるかを確かめてください!

 

ターゲットノードにSSH接続し、LAMP環境が構築できたかを確認する

# httpd -v ; php -v ; mysql --version

Server version: Apache/2.4.6 (CentOS)
Server built: Oct 19 2017 20:39:16
PHP 5.4.16 (cli) (built: Mar 7 2018 13:34:47)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1

各パッケージのインストールと起動に成功していますね!

 最後に

今回は、AnsibleでLAMP環境を構築してみました。Ansibleではサーバを構成管理する為の、モジュールが豊富に用意されているため、設定ファイルの書き換えや異なるバージョンのソフトウェアのインストールも可能です。
著者の主観ではありますが、簡単に分かりやすく記述できるのがいいところだと思いました。