Featured image of post 【Ansible備忘録】Wordpressをインストールするplaybook

【Ansible備忘録】Wordpressをインストールするplaybook

1100文字

概要

前提

Point
  • Ansibleインストール済み
  • AWSのEC2サーバーを想定
  • 対象サーバーへの公開鍵設定済み
  • Apache2系インストール済み
  • Apacheのポートは80
  • MySQLインストール済み
  • PHPインストール済み

参考

関連記事 【脱魔境インフラ】AWSのEC2にAnsibleをインストールしてみよう 2018/02/26 2612文字 約6分で読めます 関連記事 【失われしベストプラクティスを求めて】Ansibleでの特殊な動きをするディレクトリについて 2018/03/13 1640文字 約4分で読めます

ディレクトリ構造

ディレクトリ構造
.
├── ansible.cfg
├── files
│   └── local
│       └── wordpress
│           └── cli
│               └── config.yml
├── handlers
│   └── httpd
│       └── restart.yml
├── inventories
│   └── local
│       ├── group_vars
│       │   └── all.yml
│       ├── host_vars
│       │   └── 127.0.0.1.yml
│       └── hosts
├── roles
│   ├── mysql
│   │   ├── create
│   │   │   └── tasks
│   │   │       └── main.yml
│   │   └── user
│   │       └── create
│   │           └── tasks
│   │               └── main.yml
│   ├── php
│   │   └── mysql
│   │       └── install
│   │           └── tasks
│   │               └── main.yml
│   └── wordpress
│       ├── cli
│       │   ├── config
│       │   │   └── tasks
│       │   │       └── main.yml
│       │   └── install
│       │       └── tasks
│       │           └── main.yml
│       ├── config
│       │   └── tasks
│       │       └── main.yml
│       ├── download
│       │   └── tasks
│       │       └── main.yml
│       └── install
│           └── tasks
│               └── main.yml
└── wordpress-install.yml

ファイル群

ansible.cfg

ansible.cfg
[ssh_connection]
pipelining = true

hosts

inventories/local/hosts
[all-servers:children]
local-servers

[local-servers:children]
local

[local]
127.0.0.1:12

group_vars

inventories/local/group_vars/all.yml
#------------------------------------------
# 環境
#------------------------------------------
ENV: "local"
TEMP:
  DIRECTORY: /tmp

host_vars

inventories/local/host_vars/127.0.0.1.yml
HTTPD:
  DOCUMENT_ROOT_DIRECTORY: /var/www/html
  SERVICE:
    NAME: httpd
PHP:
  MYSQL:
    YUM:
      NAME: php56-mysqlnd
WORDPRESS:
  NAME: sample
  DB:
    HOST: localhost
    NAME: sample
    USER: sample_user
    PASS: sample#user
    PREFIX: sample_
  ADMIN:
    USER:
      NAME: sampleAdmin
      PASSWORD: sample#admin
      MAIL_ADDRESS: sample@example.com
  URL: http://localhost
  CLI:
    PHAR:
      URL: https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
      NAME: wp_cli
    NAME: wp
    SSH:
      DIRECTORY: .wp-cli

handlers

handlers/httpd/restart.yml
- name: "httpd restart"
  action: service name={{ HTTPD.SERVICE.NAME }} state=restarted

roles

MySQL

roles/mysql/create/tasks/main.yml
- name: create
  mysql_db:
    name: "{{ WORDPRESS.DB.NAME }}"
    state: present

roles/mysql/user/create/tasks/main.yml
- name: create
  mysql_user:
    name: "{{ WORDPRESS.DB.USER }}"
    host: "{{ WORDPRESS.DB.HOST }}"
    password: "{{ WORDPRESS.DB.PASS }}"
    priv: "{{ WORDPRESS.DB.NAME }}.*:ALL,GRANT"
    state: present

php

roles/php/mysql/install/tasks/main.yml
- name: install
  yum:
    name: "{{ PHP.MYSQL.YUM.NAME }}"
    state: present
  notify: "httpd restart"

Worepress

roles/wordpress/cli/install/tasks/main.yml
- name: get wordpress cli
  get_url:
    url: "{{ WORDPRESS.CLI.PHAR.URL }}"
    dest: "{{ TEMP.DIRECTORY }}/{{ WORDPRESS.CLI.PHAR.NAME }}"
    mode: 0755

- name: Rename wp-cli
  shell: "mv {{ TEMP.DIRECTORY }}/{{ WORDPRESS.CLI.PHAR.NAME }} /usr/local/bin/{{ WORDPRESS.CLI.NAME }}"

- name: create Symlink
  file:
    src: /usr/local/bin/{{ WORDPRESS.CLI.NAME }}
    dest: /usr/bin/{{ WORDPRESS.CLI.NAME }}
    owner: root
    group: root
    state: link

roles/wordpress/cli/config/tasks/main.yml
- name: Dir exists
  stat:
    path=~/{{ WORDPRESS.CLI.SSH.DIRECTORY }}
  register: target

- name: "Create Directory"
  file:
    dest=~/{{ WORDPRESS.CLI.SSH.DIRECTORY }}
    state=directory
    mode=755
  when: not target.stat.exists
  tags:
    - always

- name: copy
  copy:
    src={{ ENV }}/wordpress/cli/config.yml
    dest=~/{{ WORDPRESS.CLI.SSH.DIRECTORY }}/config.yml
  tags:
    - always

roles/wordpress/download/tasks/main.yml
- name: Dir exists
  stat:
    path={{ HTTPD.DOCUMENT_ROOT_DIRECTORY }}/{{ WORDPRESS.NAME }}
  register: target

- name: "Create Directory"
  file:
    dest={{ HTTPD.DOCUMENT_ROOT_DIRECTORY }}/{{ WORDPRESS.NAME }}
    state=directory
    mode=755
    group=apache
    owner=apache
  when: not target.stat.exists
  tags:
    - always

- name: WordPress Core Download
  become_user: apache
  shell: |
    wp core download \
    --locale=ja
  when: not target.stat.exists
  args:
    chdir: "{{ HTTPD.DOCUMENT_ROOT_DIRECTORY }}/{{ WORDPRESS.NAME }}"

roles/wordpress/config/tasks/main.yml
- name: Setup Wordpress Config
  become_user: apache
  shell: |
    wp core config \
    --dbname={{ WORDPRESS.DB.NAME }} \
    --dbuser={{ WORDPRESS.DB.USER }} \
    --dbpass={{ WORDPRESS.DB.PASS }} \
    --dbhost={{ WORDPRESS.DB.HOST }} \
    --dbprefix=wp_ \
    --path={{ HTTPD.DOCUMENT_ROOT_DIRECTORY }}/{{ WORDPRESS.NAME }}

roles/wordpress/install/tasks/main.yml
- name: Wordpress Install
  become_user: apache
  shell: |
    wp core \
    install \
    --title={{ WORDPRESS.NAME }} \
    --admin_user={{ WORDPRESS.ADMIN.USER.NAME }} \
    --admin_password={{ WORDPRESS.ADMIN.USER.PASSWORD }} \
    --admin_email={{ WORDPRESS.ADMIN.USER.MAIL_ADDRESS }} \
    --url={{ WORDPRESS.URL }}/{{ WORDPRESS.NAME }} \
  args:
    chdir: "{{ HTTPD.DOCUMENT_ROOT_DIRECTORY }}/{{ WORDPRESS.NAME }}"

playbook

wordpress-install.yml
---
- hosts: local-servers
  become: yes
  roles:
    - wordpress/cli/install
    - wordpress/cli/config
    - mysql/create
    - mysql/user/create
    - wordpress/download
    - wordpress/config
    - wordpress/install
    - php/mysql/install
  handlers:
    - import_tasks: handlers/httpd/restart.yml

実行

playbook実行コマンド
ansible-playbook --private-key={秘密鍵へのパス} -u {実行ユーザー} -i inventories/local wordpress-install.yml -K


※実行ユーザーのパスワードの入力が求められます

実行ログ
SUDO password:

PLAY [local-servers] ***************************************************************************************************************************************

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

TASK [wordpress/cli/install : get wordpress cli] ***********************************************************************************************************
changed: [127.0.0.1]

TASK [wordpress/cli/install : Rename wp-cli] ***************************************************************************************************************
changed: [127.0.0.1]

TASK [wordpress/cli/install : create Symlink] **************************************************************************************************************
changed: [127.0.0.1]

TASK [wordpress/cli/config : Dir exists] *******************************************************************************************************************
ok: [127.0.0.1]

TASK [wordpress/cli/config : Create Directory] *************************************************************************************************************
changed: [127.0.0.1]

TASK [wordpress/cli/config : copy] *************************************************************************************************************************
changed: [127.0.0.1]

TASK [mysql/create : create] *******************************************************************************************************************************
changed: [127.0.0.1]

TASK [mysql/user/update : update mysql user] ***************************************************************************************************************
changed: [127.0.0.1]

TASK [wordpress/download : Dir exists] *********************************************************************************************************************
ok: [127.0.0.1]

TASK [wordpress/download : Create Directory] ***************************************************************************************************************
changed: [127.0.0.1]

TASK [wordpress/download : WordPress Core Download] ********************************************************************************************************
changed: [127.0.0.1]

TASK [wordpress/config : Setup Wordpress Config] ***********************************************************************************************************
changed: [127.0.0.1]

TASK [wordpress/install : Wordpress Install] *********************************************************************************************************
changed: [127.0.0.1]

TASK [php/mysql/install : install] *************************************************************************************************************************
changed: [127.0.0.1]

RUNNING HANDLER [httpd restart] ****************************************************************************************************************************
changed: [127.0.0.1]

PLAY RECAP *************************************************************************************************************************************************
127.0.0.1                  : ok=3   changed=15    unreachable=0    failed=0

確認

ブラウザで、http://localhost/sampleにアクセスして、以下の画面が表示されればインストール完了です♪