AnsibleでVagrantのubuntu16.04環境にPHP7とNginxをインストールする

/

導入

サーバーの環境は普段CentOS7を使っていたですがAnsibleでremiリポジトリの追加が上手くいかずに手こずっていたところ,ubuntu16.04では標準のリポジトリでPHP7がインストール出来ると知ったのでubuntuサーバーでAnsibleを試してみました。

参照:
Ansibleで行うVagrantの開発環境構築/koltatt
AnsibleのプレイブックをRolesで構成する/koltatt

実行環境

ホストOS ubuntu16.04LTS
ゲストOS ubuntu16.04LTS
Vagrant 1.8.6
VirtualBox 5.0.24
Ansible 2.1.2.0

準備

今回Vagrantで仮想環境上のubuntu16.04にPHP7とNginxを追加していきますが、ubuntu16.04にはAnsibleを利用するために必要なPython2がデフォルトではインストールされていないので、まずはPython2をサーバーにインストールする必要があります。
AnsibleのサイトにPython2がインストールされていないケースについての説明がありますが、aptモジュールが使えないためrawモジュールによってPython2をインストールします。またPythonが無いとリモートからサーバーの情報が上手く得らずエラーが出てしまうのでfactsの利用をオプションでOFFにしておきます。

---
- hosts: all
  gather_facts: no
  tasks:
    - name: install python 2.7
      raw: sudo apt-get install -y python2.7

インストール後にAnsibleをPython2で実行することを明示するため、グループかインベントリの変数で設定をすればAnsibleでプロビジョニングが出来るようになります。

---
ansible_python_interpreter: /usr/bin/python2.7

参照:
Variables/Ansible
Instllation/Ansible

roles

PHP

tasks

ubuntu16.04の標準リポジトリからaptでインストールします。

---
- name: Install PHP
  become: yes
  apt: pkg=php7.0 state=latest

- name: install PHP packages
  become: yes
  apt: pkg="{{ item }}" state=latest
  with_items:
    - php7.0-fpm
    - php7.0-cli
    - php7.0-common
    - php7.0-curl
    - php7.0-json
    - php7.0-gd
    - php7.0-mcrypt
    - php7.0-odbc
    - php7.0-pgsql
    - php7.0-mbstring
    - php7.0-mysql
    - php7.0-xmlrpc
    - php7.0-opcache
    - php7.0-intl
    - php7.0-bz2
    - php7.0-xml

Nginx

templates

Nginxの設定ですがubuntuではCentOSと違い/etc/nginx/sites-available/に設定ファイルを置くのが推奨されているようなので、こちらにAnsibleのテンプレートを使ってサーバーの設定をしていきます。

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  localhost;
    charset      utf-8;

    root  /var/www;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

tasks

- name: Install Nginx
  become: yes
  apt: pkg=nginx state=latest

- name: Copy nginx default configuration
  become: yes
  template: >
    src=sites_available_default.j2
    dest=/etc/nginx/sites-available/default
    owner=root
    group=root
    mode=0644
  notify: restart nginx

handlers

- name: restart nginx
  become: yes
  service: name=nginx state=restarted

実行

$ vagrant up --provision
or
$ vgrant provision

動作確認

$ vi /var/www/info.php
<?php
         phpinfo();

ブラウザで Vagrantで設定したipアドレス/info.php に接続すると、PHPのページが表示される事が確認出来ます。

あとがき

サーバーはずっとCentOSを使っていたのですがCentOSでずっと上手く行かずにほとほと嫌になっていたAnsibleでのPHP7のインストールがubuntuではあっさり出来てしまい、これに気を良くしたのでサーバーのubuntuにちょっと手を出してみようかと思います。