AnsibleでLAMP環境を構築する

スポンサーリンク

Ansibleについて

Ansibleのインストールと詳細はこちら

LAMP構成について

LAMPとは、Webアプリケーションを開発、運用されるためにソフトウェア(OS,ミドルウェアを含む)構成です。
基本的には、以下の構成です。

[構成]
– L → Linux (redhat,centos,debian,SUSE等のLinuxと呼ばれるOS)
– A → Apache (Apache,nginx等のWebサーバ
– M → MySQL (MySQL,MariaDB,postgresql等のデータベース)
– P → PHP (PHP,ruby on rails等のフロントエンドで利用される開発言語)

昔は、Linxu, Apache, MySQL, PHPのことをLAMP環境と言っていたみたいですけど、最近はどのソフトウェアを利用してても、Linux上に、Webサーバ,DBサーバ、Web系のプログラムの実行環境が揃っているものを総称して、LAMP環境と呼ぶことが多いみたいです!

今回やってみること

今回は、OpenStackの仮想マシンにAnsibleを利用して、自動でLAMP環境を構築したいと思います!

実行条件

  • Ansibleを利用する
    今回は、分かりやすくするために、role等は利用せずに単一のplaybookに記述していきます。
    ほとんどコピペで実行できるようにします!

ソフトウェア構成(LAMP環境)

  • Apache 2.4
  • MariaDB 5.5
  • PHP 5.4

検証環境

コントロールノード(Ansibleを実行する側)

  • CentOS7.4
    • Ansible 2.5.0
    • python 3.6

ターゲットノード(Ansibleによって構成管理される側)

  • CentOS7.4

※ コントロールノードからターゲットノードに、rootで公開鍵認証できるように既に設定しています。

AnsibleのPlaybookの作成

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

# vi hosts
[lamp]
192.168.1.23

※ ターゲットの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

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

最後に

今回は、AnsibleでLAMP環境を構築してみました。Playbookをもっと拡張することで、設定ファイルの書き換えや異なるバージョンのソフトウェアのインストールも可能です。
AnsibleのPlaybookを書いてみて、簡単に分かりやすく記述できるのがいいところだと思いました。
AnsibleのPlaybookを書くのは、手間がかかるところがありますが、なんども繰り返して利用できるので、後々Playbookがあってよかったと思うことがあると思います。(経験済み)
今後は、Ansibleのもっと複雑なPlaybookにも挑戦していきたいとおもいます!

タイトルとURLをコピーしました