ウェブサイト検索

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


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

現在のチュートリアルでは、同じリモート サーバーにWordPress をセットアップする方法を説明します。

node1: 192.168.0.29
node2: 192.168.0.30

Apache をインストールし、有効にして、起動した場所です (おそらく、前回のチュートリアルの最初の例として Web サーバーを使用することを選択した理由はもうおわかりでしょう)。

Ansible に関連する概念を確実に理解するために、先に進む前にパート 1パート 2 を読むことを強くお勧めします。

IT 管理用の「Ansible」自動化ツールをインストールして構成する方法 – パート 1

Anisble Playbook を使用して複数のリモート サーバー上の複雑なタスクを自動化する方法 – パート 2

ステップ 1: Ansible ロールの導入

プレイにタスクを追加し始めると、 あなたのプレイブックの処理がますます難しくなる可能性があります。そのため、そのような状況 (実際にはすべての場合) で推奨されるアプローチは、タスクの各グループのディレクティブを個別のファイルに含むディレクトリ構造を使用することです。

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

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

もう 1 つの役割 (wp-install-config という名前) には、WordPress のインストールと構成に関連するすべての必要なタスクが含まれます。

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

Ansible には、ロールのディレクトリ構造を作成するのに役立つansible-galaxy というユーティリティが付属しています。これは /etc/ansible/playbooks (パート 2 で作成した) で行いますが、理論上は、必要に応じて別のディレクトリに設定できます。

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

次に、新しく作成したロールを確認します。

ls -R /etc/ansible/playbooks

上の画像では、ansible-galaxy がロールと同じ名前の 2 つのディレクトリと、他のサブディレクトリ (デフォルトファイル) を作成したことがわかります。 、ハンドラーメタタスクテンプレート変数)、<それぞれの中にあるstrong>README.mdファイル。

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

まず、示されているように、次の構成ファイルを編集します。

1. /etc/ansible/playbooks/wp-dependency/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-dependency/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. 次のように wp-config-sample.php (この Pastebin で提供されます) を作成し、Ansible コントローラー マシンに保存します (上記の最後のコピー ディレクティブでわかるように) , スーパーユーザーのホームディレクトリ (/root/wp-config-sample.php) にダウンロードしました。

重要: 変数 DB_NAMEDB_USER、および DB_PASSWORD の値に注意してください。 > は /etc/ansible/playbooks/wp-dependency/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. このケースのように、root パスワードが空の新しいデータベース サーバーのインストールの場合、残念ながら、mysql_secure_installation を通じてすべてのマシンでユーザー root のパスワードを個別に設定する必要があります。 。

私の知る限り、WordPress の管理データベース アカウントを作成するのと同じ手順でAnsible を介して root パスワードを設定できる回避策はありません。

すべてのホストで同じパスワードを使用していることを確認してから、/root/.my.cnf に認証情報をコピーします (実際の場所は場合によって異なる場合がありますが、すべての場合において値と一致する必要があります)タスクの src パラメータの ~/.my.cnf/etc/ansible/playbooks/wp-dependency/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

次に、IP アドレス node1 192.168.0.29node2 192.168.0.30 を使用して WordPress 管理ページにアクセスできるかどうかを確認してみましょう。

最後の 2 つのステップは、次のスクリーンキャストで確認できます。

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

最終的な考慮事項

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

まとめ

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

このガイドで説明したように、WordPress のセットアップもその例の 1 つです。システム管理者であってもブロガーであっても、このチュートリアルの概念と例が役立つことを願っています。

幸運を祈ります。サポートが必要な場合、またはコメントや提案がある場合は、遠慮なくご連絡ください。