WordPress インストールにおける Ansible の活用(CentOS 8)

インフラサーバ

CentOS 8.0 に WordPress をインストールする過程で Ansible を使用してみます。

作業環境

  • Ansible マシン
    • CentOS 8.0
    • Python 3.7.7
    • Ansible 2.9.6
  • Web サーバ
    • CentOS 8.0
    • httpd 2.4.37
    • PHP 7.2.11
    • MariaDB 10.3.17
    • WordPress 5.4

Ansible でのベース環境構築

構築内容

今回 Ansible で実施する内容は以下の通りです。

  1. タイムゾーンを Asia/Tokyo に変更する
  2. 次のパッケージをインストールする
    • httpd
    • php
    • php-mysqlnd
    • php-pecl-json
    • mariadb-server
  3. httpd サービスと mariadb サービスの再起動および自動起動設定
  4. WordPress をダウンロードする
  5. ダウンロードした WordPress ファイルを解凍して /var/www 配下に格納する
  6. /var/www/wordpress ディレクトリの所有者を apache に変更する

これ以降の以下の操作は Ansible では難しそうなので手作業で実施することにします。

  • httpd.conf の編集(DocumentRoot 変更)
  • WordPress 用の DB および DB ユーザ作成
  • WordPress の初期設定およびインストール

また、Ansible マシンから対象サーバへ SSH 接続できる環境であることを前提とします。

Playbook 内容

今回使用する Playbook の内容は以下の通りです。

- hosts: all
  become: yes
  tasks:
    - name: Set timezone to Asia/Tokyo
      timezone:
        name: Asia/Tokyo
    - name: Install httpd, PHP and MariaDB
      yum:
        name:
          - httpd
          - php
          - php-mysqlnd
          - php-pecl-json
          - mariadb-server
    - name: Restart and enable httpd and mariadb
      service:
        name: '{{ item }}'
        state: restarted
        enabled: yes
      with_items:
        - httpd
        - mariadb
    - name: Download wordPress
      get_url:
        url: https://ja.wordpress.org/wordpress-5.4-ja.tar.gz
        dest: /tmp
    - name: Install tar
      yum:
        name: tar
    - name: Unzip wordPress
      unarchive:
        src: /tmp/wordpress-5.4-ja.tar.gz
        dest: /var/www
        remote_src: yes
    - name: chown -R apache:apache /var/www/wordpress
      file:
        path: /var/www/wordpress
        state: directory
        owner: apache
        group: apache
        recurse: yes

タイムゾーンを Asia/Tokyo に変更する

timezone モジュールを使用してタイムゾーンを変更します。

    - name: Set timezone to Asia/Tokyo
      timezone:
        name: Asia/Tokyo

パッケージのインストール

必要パッケージをインストールします。

    - name: Install httpd, PHP and MariaDB
      yum:
        name:
          - httpd
          - php
          - php-mysqlnd
          - php-pecl-json
          - mariadb-server

サービス再起動および自動起動設定

httpd サービスと mariadb サービスについて再起動、および enable 化します。

    - name: Restart and enable httpd and mariadb
      service:
        name: '{{ item }}'
        state: restarted
        enabled: yes
      with_items:
        - httpd
        - mariadb

WordPress をダウンロード

get_url モジュールを使用して公式サイトから /tmp 配下へ WordPress をダウンロードします。
当記事作成時点の最新版である ver. 5.4 を指定しています。
※この後のファイル解凍時の対象パスを明確にするためにバージョン指定しています

    - name: Download wordPress
      get_url:
        url: https://ja.wordpress.org/wordpress-5.4-ja.tar.gz
        dest: /tmp

WordPress ファイルを解凍して /var/www 配下に格納する

圧縮ファイル解凍をするために unarchive モジュールを使用します。
unarchive モジュールを使用するために tar が必要なため先に tar をインストールします。

ダウンロードした WordPress ファイルの解凍後のディレクトリ名は wordpress となりますが、このフォルダを httpd の DocumentRoot にしたいため /var/www ディレクトリ内に解凍します。

    - name: Install tar
      yum:
        name: tar
    - name: Unzip wordPress
      unarchive:
        src: /tmp/wordpress-5.4-ja.tar.gz
        dest: /var/www
        remote_src: yes

/var/www/wordpress ディレクトリの所有者設定

file モジュールを使用して /var/www/wordpress ディレクトリおよびその配下のファイルの所有者および所有グループを apache とします。

    - name: chown -R apache:apache /var/www/wordpress
      file:
        path: /var/www/wordpress
        state: directory
        owner: apache
        group: apache
        recurse: yes

Ansible 実行結果

PLAY [all] *************************************************************************************************************

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

TASK [Set timezone to Asia/Tokyo] **************************************************************************************
changed: [10.69.34.6]

TASK [Install httpd, PHP and MariaDB] **********************************************************************************
changed: [10.69.34.6]

TASK [Restart and enable httpd and mariadb] ****************************************************************************
changed: [10.69.34.6] => (item=httpd)
changed: [10.69.34.6] => (item=mariadb)

TASK [Download wordPress] **********************************************************************************************
changed: [10.69.34.6]

TASK [Install tar] *****************************************************************************************************
changed: [10.69.34.6]

TASK [Unzip wordPress] *************************************************************************************************
changed: [10.69.34.6]

TASK [chown -R apache:apache /var/www/wordpress] ***********************************************************************
changed: [10.69.34.6]

PLAY RECAP *************************************************************************************************************
10.69.34.6                 : ok=8    changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

■ 実行後の対象サーバ側

# yum list installed | grep httpd
centos-logos-httpd.noarch          80.5-2.el8                              @AppStream
httpd.x86_64                       2.4.37-16.module_el8.1.0+256+ae790463   @AppStream
httpd-filesystem.noarch            2.4.37-16.module_el8.1.0+256+ae790463   @AppStream
httpd-tools.x86_64                 2.4.37-16.module_el8.1.0+256+ae790463   @AppStream
#
#
# yum list installed | grep php
php.x86_64                         7.2.11-2.module_el8.1.0+209+03b9a8ff    @AppStream
php-cli.x86_64                     7.2.11-2.module_el8.1.0+209+03b9a8ff    @AppStream
php-common.x86_64                  7.2.11-2.module_el8.1.0+209+03b9a8ff    @AppStream
php-fpm.x86_64                     7.2.11-2.module_el8.1.0+209+03b9a8ff    @AppStream
php-json.x86_64                    7.2.11-2.module_el8.1.0+209+03b9a8ff    @AppStream
php-mysqlnd.x86_64                 7.2.11-2.module_el8.1.0+209+03b9a8ff    @AppStream
php-pdo.x86_64                     7.2.11-2.module_el8.1.0+209+03b9a8ff    @AppStream
#
#
# yum list installed | grep mariadb
mariadb.x86_64                     3:10.3.17-1.module_el8.1.0+257+48736ea6 @AppStream
mariadb-backup.x86_64              3:10.3.17-1.module_el8.1.0+257+48736ea6 @AppStream
mariadb-common.x86_64              3:10.3.17-1.module_el8.1.0+257+48736ea6 @AppStream
mariadb-connector-c.x86_64         3.0.7-1.el8                             @AppStream
mariadb-connector-c-config.noarch  3.0.7-1.el8                             @AppStream
mariadb-errmsg.x86_64              3:10.3.17-1.module_el8.1.0+257+48736ea6 @AppStream
mariadb-gssapi-server.x86_64       3:10.3.17-1.module_el8.1.0+257+48736ea6 @AppStream
mariadb-server.x86_64              3:10.3.17-1.module_el8.1.0+257+48736ea6 @AppStream
mariadb-server-utils.x86_64        3:10.3.17-1.module_el8.1.0+257+48736ea6 @AppStream
#
#
# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           mqphp-fpm.conf
   Active: active (running) since Wed 2020-04-29 08:40:05 JST; 11min ago
     Docs: man:httpd.service(8)
#
#
# systemctl status mariadb
● mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-04-29 08:40:15 JST; 11min ago
     Docs: man:mysqld(8)
#
#
# ls -l /var/www
total 12
drwxr-xr-x 2 root root 4096 Dec 24 05:47 cgi-bin
drwxr-xr-x 3 root root 4096 Apr 29 08:40 html
drwxr-xr-x 5 apache apache 4096 Apr 28 11:00 wordpress
#
#
# ls -l /var/www/wordpress
total 212
-rw-r--r--  1 apache apache   405 Feb  6 15:33 index.php
-rw-r--r--  1 apache apache 19915 Feb 12 20:54 license.txt
-rw-r--r--  1 apache apache 10089 Apr 28 11:00 readme.html
-rw-r--r--  1 apache apache  6912 Feb  6 15:33 wp-activate.php
drwxr-xr-x  9 apache apache  4096 Apr 28 11:00 wp-admin
-rw-r--r--  1 apache apache   351 Feb  6 15:33 wp-blog-header.php
-rw-r--r--  1 apache apache  2275 Feb  6 15:33 wp-comments-post.php
-rw-r--r--  1 apache apache  3931 Apr 28 11:00 wp-config-sample.php
drwxr-xr-x  5 apache apache  4096 Apr 28 11:00 wp-content
-rw-r--r--  1 apache apache  3940 Feb  6 15:33 wp-cron.php
drwxr-xr-x 21 apache apache 12288 Apr 28 11:00 wp-includes
-rw-r--r--  1 apache apache  2496 Feb  6 15:33 wp-links-opml.php
-rw-r--r--  1 apache apache  3300 Feb  6 15:33 wp-load.php
-rw-r--r--  1 apache apache 47874 Feb 10 12:50 wp-login.php
-rw-r--r--  1 apache apache  8501 Feb  6 15:33 wp-mail.php
-rw-r--r--  1 apache apache 19396 Feb 11 07:33 wp-settings.php
-rw-r--r--  1 apache apache 31111 Feb  6 15:33 wp-signup.php
-rw-r--r--  1 apache apache  4755 Feb  6 15:33 wp-trackback.php
-rw-r--r--  1 apache apache  3133 Feb  6 15:33 xmlrpc.php

WordPress インストール(手作業)

Ansible での作業は以上ですが、続きの手作業の内容を記載しておきます。

httpd.conf の編集

/etc/httpd/conf/httpd.conf を編集します。
念のため初期コンフィグをバックアップしておきます。

# cd /etc/httpd/conf
# ls -l
total 28
-rw-r--r-- 1 root root 11899 Dec 24 05:44 httpd.conf
-rw-r--r-- 1 root root 13064 Dec 24 05:46 magic
# cp -p httpd.conf httpd.conf_org
# ls -l
total 40
-rw-r--r-- 1 root root 11899 Dec 24 05:44 httpd.conf
-rw-r--r-- 1 root root 11899 Dec 24 05:44 httpd.conf_org
-rw-r--r-- 1 root root 13064 Dec 24 05:46 magic

■ httpd.conf変更内容

  1. DocumentRoot を “/var/www/html” から “/var/www/wordpress” に変更
  2. <Directory “/var/www”> を <Directory “/var/www/wordpress“> に変更
  3. AllowOverride を None から All に変更

■ httpd.conf 変更前の内容

(略)
DocumentRoot "/var/www/html"

#
# Relax access to content within /var/www.
#
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>
(略)

■ httpd.conf 変更後の内容

(略)
DocumentRoot "/var/www/wordpress"

#
# Relax access to content within /var/www.
#
<Directory "/var/www/wordpress">
    AllowOverride All
    # Allow open access:
    Require all granted
</Directory>
(略)

変更後、httpd サービスを再起動します。

# systemctl restart httpd

この時点で、ブラウザで「http://(サーバのIP)」にアクセスすると以下の画面になります。

画面左下の「さあ、始めましょう!」をクリックすると WordPress の初期設定画面になりますが、今はまだこれは実施しません。

WordPress 用の DB および DB ユーザ作成

MariaDB で WordPress 用の DB の作成とユーザ作成を行います。

mysql コマンドを実行します。すると MariaDB のプロンプトになります。

# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.17-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

以下コマンドで、名前が wordpress で文字コードが UTF8 の DB を作成します。
※データベース名は任意の名前でOKです

MariaDB [(none)]> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.001 sec)

続いて、以下のような DB ユーザを作成します。

  • ユーザ名:wordpress(任意のユーザ名でOKです)
  • パスワード:password(任意のパスワードでOKです)
  • 上で作成したデータベース wordpress に対して全権限を持つ
MariaDB [(none)]> GRANT ALL ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.001 sec)

ユーザが作成できたら以下コマンドで設定を反映します。

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.002 sec)

以上で DB の設定は完了です。exit コマンドでプロンプトから抜けてください。

MariaDB [(none)]> exit
Bye

WordPress の初期設定およびインストール

ブラウザで「http://(サーバのIP)」にアクセスします。

画面左下の「さあ、始めましょう!」をクリックします。

次の画面で以下の通り設定し、「送信」をクリックします。

  • データベース名: wordpress(DB の設定時に作成した DB 名)
  • ユーザー名: wordpress (DB の設定時に作成したユーザ名)
  • パスワード: password(DB の設定時に作成したユーザのパスワード)
  • データベースのホスト名: localhost(デフォルト)
  • テーブル接頭辞: wp_(デフォルト)

以下の画面になります。「インストール実行」をクリックします。

以下の画面になります。各項目を入力後「WordPress をインストール」をクリックします。
なお、この画面で入力するユーザ情報は WordPress のユーザ(サイト管理画面にログインするためのユーザ)情報です。

インストールが完了すると以下の画面になります。「ログイン」をクリックします。

以下の画面になります。先ほど設定したユーザ情報でログインします。

以下の管理画面になることを確認してください。

管理画面左上のサイト名「hogeブログ」をクリックします。
サイト画面が表示されることを確認してください。

以上で WordPress のインストールは完了です。

参考ページ

CentOS 8 に WordPress 5.3 をインストール - Qiita
CentOS 8 にLAMP(Linux/Apache/MariaDB/PHP)環境のインストールを行う手順を以下に記します。 タイムゾーンの変更 sudo su - timedatectl set-timezone Asia...

―――――――――――――

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