みなさん、こんにちは!
イーアイティの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ではサーバを構成管理する為の、モジュールが豊富に用意されているため、設定ファイルの書き換えや異なるバージョンのソフトウェアのインストールも可能です。
著者の主観ではありますが、簡単に分かりやすく記述できるのがいいところだと思いました。