序章

Ansibleは、システム管理者がインフラストラクチャ管理アクティビティを自動化するために使用する構成管理ツールです。

AnsibleはSSHのみを使用してコマンドをリモートで実行するため、リモートサーバーにエージェントは必要ありません。 これにより、管理対象サーバーにエージェントをインストールしたくない場合は、PuppetやChefなどの他の一般的なツールよりもAnsibleの方が適しています。

さらに、Ansibleは他のツールが使用するより強力なプログラミング言語よりも単純なYAML(Yet Another Markup Language)を使用しているため、Ansibleを使い始めるのがはるかに簡単です。

Drupalは人気のあるCMSであり、インストールには時間がかかりますが、自動化は簡単です。 このチュートリアルでは、Drupalのインストールと構成、およびUbuntu14.04を実行するシステムへのすべての依存関係を自動化するAnsiblePlaybookを作成します。

前提条件

次のものが必要になります。

  • Ubuntu 14.04サーバー(SSH経由でアクセス可能)。 このサーバーはAnsibleとDrupalのローカルコピーを実行します
  • オプション:Drupalをインストールする追加のUbuntu14.04サーバー
  • 各サーバーのsudoユーザー。 Drupalをインストールするサーバーごとに、同じユーザー名同じパスワードを使用する必要があります
  • Drupalインストールがどのように機能するかについての基本的な理解。 Drupalをプレインストールする必要はありませんが、Apacheを使用してUbuntu14.04サーバーにDrupalをインストールする方法を参照できます。

ステップ1—Ansibleをインストールする

Ansibleは、デフォルトのリポジトリでは利用できません。 apt-get を使用します。 したがって、リポジトリを追加します ppa:rquillo/ansible.

sudo add-apt-repository ppa:rquillo/ansible

プロンプトが表示されたらEnterキーを押します。

パッケージリストを更新します。

sudo apt-get update

Ansibleをインストールします。

sudo apt-get install ansible

ステップ2—プレイブックのディレクトリを作成する

Ansibleの命令セットはプレイブックと呼ばれます。 すべてのプレイブックを1つのディレクトリに保存することをお勧めします。 MyPlaybooksという名前のディレクトリを作成します。

mkdir ~/MyPlaybooks

プレイブックに名前を付けましょう drupal_setup. 名前の付いた新しいディレクトリを作成します drupal_setup.

mkdir ~/MyPlaybooks/drupal_setup

ステップ3—ホストファイルを作成する

各プレイブックには通常、 hosts 使用するサーバーの名前を含むファイル。

このチュートリアルでは、Drupalをlocalhostと他の1つのサーバーdrupal_serverにインストールします。 このファイルにサーバーを追加するのは自由です。 追加するすべてのサーバーは、SSH経由でアクセスできる必要があることを忘れないでください。

nano を使用して、という名前のファイルを作成および編集します hosts.

nano ~/MyPlaybooks/drupal_setup/hosts

次の内容にします。

[drupal_hosts]
localhost
drupal_server_ip

drupal_server_ipを2番目のサーバーのIPアドレスに置き換える必要があります。 ここには、必要な数のIPアドレスをリストできます。 このプレイブックを使用して、任意の数のUbuntu14.04サーバーにDrupalをインストールできます。

注: hosts fileは、将来このプレイブックを再利用してより多くのDrupalサーバーを構成する場合に更新する必要があるファイルです。 プレイブックを再実行する前に、構成済みのサーバーをリストから削除し、新しいサーバーIPを追加する必要があることに注意してください。

ファイルを保存して閉じます。

ステップ4—apt-getupdateのロールを作成します

Playbookのすべての役割を保存する新しいディレクトリを作成します。

mkdir ~/MyPlaybooks/drupal_setup/roles

必要がある apt-get 他の作業を行う前にサーバーを更新するため、役割のディレクトリを作成します update.

mkdir ~/MyPlaybooks/drupal_setup/roles/update

各役割には1つ以上のタスクがあります。 という名前のディレクトリを作成します tasks この役割に関連するすべてのタスクを保持します。

mkdir ~/MyPlaybooks/drupal_setup/roles/update/tasks

使用する nano 名前の付いた新しいタスクファイルを作成および編集するには main.yml. これは、Ansibleがこの役割を実行するときに何をすべきかを指示するファイルです。

nano ~/MyPlaybooks/drupal_setup/roles/update/tasks/main.yml

このファイルでは、Ansibleを使用します apt システムを更新するモジュール:

---

- name: apt-get update the server
  apt: update_cache=yes

ファイルに余分な空白がないことを確認してください。 Ansibleはこれについてうるさいです。 ファイルを保存して閉じます。

ステップ5—PHPを設定するためのロールを作成する

ロールphpのディレクトリを作成します。

mkdir ~/MyPlaybooks/drupal_setup/roles/php

を作成します tasks この役割のディレクトリ:

mkdir ~/MyPlaybooks/drupal_setup/roles/php/tasks

Drupalには、PHPを使用するように構成されたWebサーバーが必要です。 このチュートリアルでは、Apacheを使用します。 PHPをインストールすると、Apacheが自動的にインストールされるため、追加のコマンドは必要ありません。

nano を使用して、 main.yml phpロールの場合。

nano ~/MyPlaybooks/drupal_setup/roles/php/tasks/main.yml

Ansibleを使用する apt PHP5(およびそれが依存するパッケージ)をインストールするためのモジュール、およびPHP5GDライブラリ。 ファイルに以下を追加します。

---

- name: Install PHP and associated packages
  apt: name=php5 state=latest

- name: Install PHP GD library
  apt: name=php5-gd state=latest
  notify:
    - Restart Apache

PHP GDライブラリをインストールした後、Apacheを再起動する必要があります。 したがって、このロールにはハンドラーも必要です。

ロールのすべてのハンドラーは、別のディレクトリーに保管されます。 という名前のディレクトリを作成します handlers 現在の役割のために。

mkdir ~/MyPlaybooks/drupal_setup/roles/php/handlers

nano を使用して、 main.yml ファイル。

nano ~/MyPlaybooks/drupal_setup/roles/php/handlers/main.yml

次のコードを追加します。

---

- name: Restart Apache
  service: name=apache2 state=restarted

これで、PHPとApacheのセットアップは完了です。

ステップ6—MySQLをセットアップするためのロールを作成する

Drupalには、設定とコンテンツを保存するためのデータベースが必要です。 このチュートリアルでは、MySQLを使用します。

この役割とそのタスクのディレクトリを作成します。

mkdir -p ~/MyPlaybooks/drupal_setup/roles/mysql/tasks

この役割の最初のタスクは、MySQLとその依存関係をインストールします。 nano を使用して、という名前のファイルを作成および編集します setup.yml.

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/setup.yml

このファイルでは、Ansibleに使用するように指示します apt 再度インストールするモジュール:

  • mysql-server
  • libapache2-mod-auth-mysql
  • php5-mysql

したがって、ファイルに以下を追加します。

---

- name: Install MySQL server
  apt: name=mysql-server state=latest

- name: Install Apache module for MySQL authentication
  apt: name=libapache2-mod-auth-mysql state=latest

- name: Install MySQL module for PHP
  apt: name=php5-mysql state=latest

私たちの役割にはもう1つのタスクファイルがあります。 Drupalには独自のMySQLデータベースとデータベースユーザーが必要なため、それらを作成するために別のタスクファイルを作成します。 nano を使用して、という名前のファイルを作成および編集します create_db.yml.

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/create_db.yml

Ansibleには、MySQLを管理できるモジュールがあります。 このタスクでは、次のモジュールを使用します。

  • mysql_db -Drupal用の新しいデータベースを作成します。
  • mysql_user 新しいユーザーを作成し、データベースへのアクセスを許可します。

使用する前に mysql_db また mysql_user 確認する必要があります Python MySQLdb パッケージがリモートホストにインストールされています。 使用 apt それをインストールするモジュール。

次の内容をファイルに追加します。

---
- name: Install Python MySQLdb
  apt: name=python-mysqldb state=latest

- name: Create the Drupal database
  mysql_db: db={{ db_name }} state=present

- name: Create the Drupal user
  mysql_user: >
    name={{ db_user }}
    password={{ db_password }}
    priv={{ db_name }}.*:ALL
    host=localhost

{{}}で囲まれた文字列は変数を示すことに注意してください。 このタスクでは、変数があります {{ db_user }}, {{ db_password}}{{ db_name }}. これらの変数の値は、後のステップで設定します。

次に、この役割には2つのタスクがあることをAnsibleに通知する必要があります。 これを行うために、 main.yml ファイル。

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/main.yml

このファイルに次のコードを追加します。

---

- include: setup.yml
- include: create_db.yml

ステップ7—Drupalをインストールするためのロールを作成する

次に、Drupal自体のインストールに移ります。

この役割とそのタスクのディレクトリを作成します。

mkdir -p ~/MyPlaybooks/drupal_setup/roles/drupal/tasks

nano を使用して、という名前のタスクファイルを作成および編集します main.yml.

nano ~/MyPlaybooks/drupal_setup/roles/drupal/tasks/main.yml

このタスクでは、Ansibleに次のアクションを実行するように指示します。

  • インストール git リモートホスト上。 これは、Ansibleを使用するために必要です。 git モジュール
  • Ansibleを使用する git Drupalの最新の安定バージョンをリポジトリから複製するモジュール http://git.drupal.org/project/drupal.git. ダウンロードしたファイルはに配置されます /var/www/html/drupal
  • を作成します settings.phpservices.yml デフォルトファイルからのファイル
  • の権限を更新します settings.php, services.yml、 と sites/default/files

次のコードをファイルに追加します。

---

- name: Install git
  apt: name=git state=latest

- name: Clone Drupal
  git: >
    repo=http://git.drupal.org/project/drupal.git
    dest=/var/www/html/drupal/
    update=no

- name: Create settings.php
  command: cp /var/www/html/drupal/sites/default/default.settings.php /var/www/html/drupal/sites/default/settings.php

- name: Create services.yml
  command: cp /var/www/html/drupal/sites/default/default.services.yml /var/www/html/drupal/sites/default/services.yml

- name: Update permissions of settings.php
  file: path=/var/www/html/drupal/sites/default/settings.php mode=777

- name: Update permissions of services.yml
  file: path=/var/www/html/drupal/sites/default/services.yml mode=777

- name: Update permissions of files directory
  file: >
    path=/var/www/html/drupal/sites/default/files
    mode=777
    state=directory
    recurse=yes

これらのファイルのアクセス許可は、各サーバー(Ansibleではなく各サーバー)へのブラウザーのインストールが完了した後で更新する必要があります。

ステップ8—すべての役割を使用するファイルを作成する

この時点で、すべての役割の準備が整いました。 今、それらを使用する必要があります。

nano を使用して、という名前のファイルを作成します site.yml. これは、Ansibleで実際に実行するファイルです。

nano ~/MyPlaybooks/drupal_setup/site.yml

このファイルでは、次のアクティビティを実行します。

  • このプレイブックを実行するホストを指定します
  • それを指定します sudo このハンドブックのすべてのタスクを実行するために使用する必要があります
  • さまざまな役割で使用される変数にデフォルト値を設定します
  • すべての役割を実行します

次のコードを追加します。

---

- hosts: drupal_hosts

  sudo: yes

  vars:
    - db_name: drupal
    - db_user: drupal_user
    - db_password: drupal_db_pass

  roles:
    - update
    - php
    - mysql
    - drupal

変数の値を必ず変更してください db_password 以外のものに drupal_db_pass. 他の2つの変数の値も、好みに合わせて自由に変更できます。

ステップ9—SSH接続を確立する

プレイブックを実行する前に、 ~/.ssh/known_hosts ファイルには、に記載されている各ホストのエントリが必要です。 hosts ファイル。

これを行う簡単な方法は、にリストされている各サーバーに1回接続することです。 ~/MyPlaybooks/drupal_setup/hosts SSHを使用して、このサーバーからファイルを送信します。

に接続します localhost 次のコマンドを使用してSSH経由で:

ssh localhost

この方法でサーバーに接続するのが初めての場合は、次のメッセージが表示されます。

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is b1:18:3d:19:15:21:39:5a:f7:9f:3c:37:68:ba:62:01.
Are you sure you want to continue connecting (yes/no)?

あなたが言うと yes、次のようなメッセージが表示されます。

Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.

にリストされている他のサーバーに接続します hosts ファイル:

ssh drupal_sudo_user@drupal_server_ip

ユーザー名とIPアドレスを各サーバーの実際の情報に置き換えてください。 sudoユーザー名(drupal_sudo_user 例では)とパスワードは、localhostを含む各サーバーで同じである必要があります。

注:パスワードを使用する代わりに、AnsibleサーバーのsudoユーザーのSSH公開鍵を drupal_sudo_user's authorized_keys 各管理対象サーバー上のファイル。

各サーバーに接続すると、プレイブックを実行する準備が整います。

ステップ10—ハンドブックを実行する

これで、Playbookをテストする準備が整いました。 を使用してそれを発射します ansible-playbook 指図。 The -k オプションは、AnsibleにSSHパスワードの要求を強制します。パスワードなしの認証を設定している場合は、必要ありません。 The -K オプションにより、Ansibleは sudo パスワード。

cd ~/MyPlaybooks/drupal_setup/
ansible-playbook -i hosts site.yml -kK

SSHパスワードを入力し、Playbookが実行されるのを待ちます。 実行が完了すると、サーバーにDrupalが新たにインストールされます。

注:省略できます -k Ansibleサーバーのsudoユーザーから各管理対象サーバーにSSHキーを追加した場合はフラグを立てます。

これは実行に数分かかり、Ansibleは各ステップで何をしているかを示します。

重要:このスクリプトを実行して将来さらにサーバーをセットアップする場合は、既にセットアップされているサーバーのIPアドレスをから削除する必要があります。 ~/MyPlaybooks/drupal_setup/hosts ファイル、またはAnsibleは、カスタマイズされたDrupalサイトを上書きします。

ステップ11—Drupalをセットアップする

これで、ブラウザを使用してDrupalにアクセスし、ブラウザベースのインストールを完了することができます。 http://your_server_ip/drupal/.

Drupalのブラウザーインストーラーの完了についてサポートが必要な場合は、この記事の手順に従ってください。

データベース設定は、で設定した変数になります vars のセクション ~/MyPlaybooks/drupal_setup/site.yml ファイル。

各サーバーにDrupalが正常にインストールされていることを再確認してください。

ステップ12—ホストリストをクリーンアップする

今がホストをから削除する良い機会です ~/MyPlaybooks/drupal_setup/hosts ファイル。 そうすれば、プレイブックを再度実行しても、すでに設定したホストを誤って上書きすることはありません。

トラブルシューティング

YAMLは空白に敏感であることに注意してください。 プレイブックに問題がある場合は、おそらく不適切なインデントまたは余分なスペースがあります .yml ファイル。

次のようなエラーが表示された場合:

fatal: [server-name] => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.

これは、1つ以上のホストのエントリを追加できなかったことを意味します。 ~/.ssh/known_hosts ファイル。

手動でSSH接続する必要があります localhost または最初にターゲットリモートサーバーに。 次に、プレイブックをもう一度実行してみてください。

結論

このチュートリアルでは、ApacheとMySQLとともに、DrupalをセットアップするAnsibleプレイブックを作成する方法を学びました。 このプレイブックを実稼働システムで使用する前に、インストールをより安全にするために、このプレイブックをさらに構築する必要があります。 プレイブックのDrushコマンドを使用して、Drupalのインストールを管理することもできます。