ウェブサイト検索

Ansibleを使用して複数のLinuxサーバーにおける同時WordPressデプロイメントを自動化する方法 - パート3


このAnsibleシリーズの前の記事2つでは、複数のリモートサーバーで同時にコマンドを実行し、複雑なタスクを実行するためのAnsibleのインストールと設定方法について説明しました。

今回のチュートリアルでは、同じリモートサーバーにWordPressを設定する方法を説明します。

node1: 192.168.0.29
node2: 192.168.0.30

私たちがApacheをインストールし、有効化し、起動した場所(おそらく、前回のチュートリアルで初期の例としてウェブサーバーを選んだ理由は、もうご存知でしょう)。

進む前に、Ansibleに関連する概念に慣れていることを確認するために、ぜひ第1部と第2部をお読みください。

IT管理のための‘Ansible’自動化ツールのインストールと設定方法 - パート1

複数のリモートサーバーで複雑なタスクを自動化するためのAnsibleプレイブックの使い方 - パート2

ステップ1:Ansibleロールの紹介

タスクをプレイに追加していくにつれて、あなたのプレイブックはますます扱いにくくなる可能性があります。そのため、そのような状況では(実際、すべての場合において)、各タスク群の指示を異なるファイルに含むディレクトリ構造を使用することをお勧めします。

このアプローチにより、将来的に別のプロジェクトでこれらの設定ファイルを再利用することができます。これらのファイルは、Ansibleエコシステムで「ロール」と呼ばれるものを定義しています。

私たちのケースでは、2つのロールを作成します。そのうちの1つ(wp-dependenciesと呼ばれる)は、WordPressの依存関係(PHPおよびMariaDB)をインストールするために使用されます(Apacheはすでにインストールされているので、インストールする必要はありません)。

もう一つの役割(名前はwp-install-config)は、WordPressのインストールおよび設定に関連するすべての必要なタスクを含むことになります。

ステップ2:Ansibleロールの作成

Ansibleには、私たちがロールのディレクトリ構造を作成するのを助けるためのansible-galaxyというユーティリティが付属しています。私たちはこれを/etc/ansible/playbooks(Part 2で作成したもの)で行いますが、理論的には別のディレクトリに設定することも可能です。

# cd /etc/ansible/playbooks
ansible-galaxy init wp-dependencies
ansible-galaxy init wp-install-config

次に、新しく作成された役割を確認します。

# ls -R /etc/ansible/playbooks

上の画像では、ansible-galaxyが私たちの役割と同じ名前の2つのディレクトリと、他のサブディレクトリ(defaults、files、handlers、meta、tasks、templates、vars)と、各ディレクトリ内にREADME.mdファイルを作成したことがわかります。

さらに、前述のすべてのディレクトリ内に、ファイルとテンプレートを除いて、main.ymlという名前のYAMLファイルが作成されました。

次に示すように、以下の設定ファイルを編集することから始めます。

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml。このシリーズの以前のチュートリアルに従っていない場合に備えて、httpd を含めていることに注意してください。

---
tasks file for wp-dependencies
- name: Update packages (this is equivalent to yum update -y)
  yum: name=* state=latest

- name: Install dependencies for WordPress
  yum: name={{ item }} state=present
  with_items:
        - httpd
        - mariadb-server 
        - mariadb
        - php 
        - php-mysql
        - MySQL-python

- name: Ensure MariaDB is running (and enable it at boot)
  service: name=mariadb state=started enabled=yes

- name: Copy ~/.my.cnf to nodes
  copy: src=/root/.my.cnf dest=/root/.my.cnf

- name: Create MariaDB database
  mysql_db: name={{ wp_mysql_db }} state=present

- name: Create MariaDB username and password
  mysql_user:
        login_user=root
        login_password=YourMariaDBRootPasswordHere
        name={{ wp_mysql_user }}
        password={{ wp_mysql_password }}
        priv=*.*:ALL

2. /etc/ansible/playbooks/wp-dependencies/defaults/main.yml

---
defaults file for wp-dependencies
  wp_mysql_db: MyWP
  wp_mysql_user: wpUser
  wp_mysql_password: wpP4ss

3. /etc/ansible/playbooks/wp-install-config/tasks/main.yml:

---
tasks file for wp-install-config
- name: Create directory to download WordPress
  command: mkdir -p /opt/source/wordpress

- name: Download WordPress
  get_url: url=https://www.wordpress.org/latest.tar.gz dest=/opt/source/wordpress/wordpress.tar.gz validate_certs=no

- name: Extract WordPress
  command: "tar xzf /opt/source/wordpress/wordpress.tar.gz -C /var/www/html --strip-components 1"

- name: Send config file
  copy: src=/root/wp-config-sample.php dest=/var/www/html/wp-config.php mode=0644

4. このPastebinに提供されているwp-config-sample.phpを次のように設定し、Ansibleコントローラーマシンに保存します(上記の最後のコピー指示のように、スーパーユーザーのホームディレクトリ/root/wp-config-sample.phpにダウンロードしました)。

重要: 変数DB_NAME, DB_USER, とDB_PASSWORDの値は/etc/ansible/playbooks/wp-dependencies/defaults/main.ymlと同じです:

…
/** The name of the database for WordPress */
define('DB_NAME', 'MyWP');

/** MySQL database username */
define('DB_USER', 'wpUser');

/** MySQL database password */
define('DB_PASSWORD', 'wpP4ss');
…

5. ルートパスワードが空の新しいデータベースサーバーのインストール、例えばこの場合、残念ながら、すべてのマシンでmysql_secure_installationを通じてユーザールートのパスワードを個別に設定する必要があります。

私の知る限りでは、WordPressの管理データベースアカウントを作成するのと同じステップでAnsibleを介してルートパスワードを設定するための回避策は存在しません。

すべてのホストで同じパスワードを使用することを確認し、その後、/root/.my.cnf に資格情報をコピーします(実際の場所はあなたの場合異なるかもしれませんが、すべてのインスタンスで Copy ~/.my.cnf タスクのsrcパラメータの値と一致する必要があります /etc/ansible/playbooks/wp-dependencies/tasks/main.yml)。

そのファイル(上記参照)では、rootのパスワードがYourMariaDBRootPasswordであると仮定しています。

6. 次に、私たちのプレイブック(/etc/ansible/playbooks/playbook.yml)は、前のチュートリアルと比較してずっと整理されていてシンプルに見えるでしょう:

# cat playbook.yml

- hosts: webservers
  roles:
        - wp-dependencies
        - wp-install-config

ついに、これらのタスクをプレイブックを呼び出して実行する時が来ました:

# ansible-playbook playbook.yml

さあ、node1 192.168.0.29 および node2 192.168.0.30 のIPアドレスを使用してWordPress管理ページにアクセスできるか確認してみましょう:

以下のスクリーンキャストで最後の2つのステップを見ることができます:

ご覧のとおり、Ansibleを使用して、ほとんど手間なく複数のWordPressインストールを設定できます。それから、それぞれの管理者ユーザーインターフェースを使用して、各サイトを個別に設定できます。

最終的な考慮事項

別のディストリビューションを使用してWordPressをデプロイする場合、パッケージ名は異なる場合がありますが、要するにApacheウェブサーバー、MariaDBデータベースサーバー、そしてPythonのMySQLモジュールをインストールすることになります。その場合、ディストリビューションのソフトウェア管理システムを使用して、インストールする必要がある正確なパッケージ名を検索してください。

要約

このシリーズでは、Ansibleを使用して、複数のLinuxマシンでコマンドを実行し、複雑なタスクを同時に実行する方法を説明しました。

そのような例の一つが、私たちがこのガイドで話し合ったWordPressの設定です。システム管理者でもブロガーでも、このチュートリアルの概念や例が役に立ったことを願っています。

頑張ってください!助けが必要な場合やコメントや提案がある場合は、遠慮なくご連絡ください!

関連記事: