Ubuntu 14.04でDrupalのインストールを自動化するAnsible Playbookを作成する方法

前書き

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

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

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

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

前提条件

次のものが必要です。

  • Ubuntu 14.04サーバー(SSH経由でアクセス可能);このサーバーは、AnsibleとDrupalのローカルコピーを実行します

  • オプション:Drupalをインストールする追加のUbuntu 14.04サーバー

  • 各サーバー上のhttps://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-an-ubuntu-14-04-vps[sudo]ユーザー。 Drupalをインストールするサーバーごとに*同じユーザー名*と*同じパスワード*を使用する必要があります

  • Drupalインストールの仕組みの基本的な理解。 Ubuntu 14.04にDrupalをインストールする方法を参照できます。 Apacheを搭載したサーバー]、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の命令セットは、プレイブックと呼ばれます。 すべてのプレイブックを単一のディレクトリに保存することをお勧めします。 * MyPlaybooks *という名前のディレクトリを作成します。

mkdir ~/MyPlaybooks

プレイブックに「+ drupal_setup 」という名前を付けましょう。 ` drupal_setup +`という名前の新しいディレクトリを作成します。

mkdir ~/MyPlaybooks/drupal_setup

ステップ3-hostsファイルを作成する

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

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

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

nano ~/MyPlaybooks/drupal_setup/hosts

次のコンテンツを用意します。

[drupal_hosts]
localhost

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

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

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

ステップ4-apt-get updateのロールを作成する

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

mkdir ~/MyPlaybooks/drupal_setup/roles

他のことを行う前にサーバーを + apt-get`で更新する必要があるため、ロール + update + `のディレクトリを作成します。

mkdir ~/MyPlaybooks/drupal_setup/roles/update

各役割には1つ以上のタスクがあります。 このロールに関連付けられたすべてのタスクを保持するために、「+ tasks +」という名前のディレクトリを作成します。

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

`+ main.yml `という名前の新しいタスクファイルを作成および編集するには、 ` nano +`を使用します。 これは、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 *を使用して、phpロールの `+ main.yml +`を作成および編集します。

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

Ansibleの `+ apt +`モジュールを使用して、PHP5(および依存するパッケージ)とPHP5 GDライブラリをインストールします。 ファイルに次を追加します。

---

- 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.php`と + services.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

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

  • このPlaybookが実行されるホストを指定します

  • このPlaybookのすべてのタスクを実行するために `+ sudo +`を使用することを指定します

  • さまざまな役割で使用される変数にデフォルト値を設定します

  • すべての役割を実行する

次のコードを追加してください。

---

- hosts: drupal_hosts

 sudo: yes

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

 roles:
   - update
   - php
   - mysql
   - drupal

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

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

Playbookを実行する前に、 `〜/ .ssh / known_hosts +`ファイルには、 ` hosts +`ファイルに記載されている各ホストのエントリが必要です。

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

次のコマンドを使用して、SSH経由で「+ localhost +」に接続します。

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 @

ユーザー名とIPアドレスを各サーバーの実際の情報に置き換えてください。 sudoユーザー名(この例では ++)とパスワードは、* localhost *を含む各サーバーで同じでなければならないことに注意してください。

_ 注意:*パスワードを使用する代わりに、 AnsibleサーバーのsudoユーザーのSSH公開キーを各管理対象サーバーの ++ `+ authorized_keys +`ファイルにコピーできます。 _

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

ステップ10-プレイブックを実行する

これで、Playbookをテストする準備ができました。 `+ ansible-playbook `コマンドを使用して起動します。 ` -k `オプションはAnsibleに強制的にSSHパスワードを要求し、パスワードなしの認証を設定している場合は必要ありません。 ` -K `オプションは、Ansibleに ` sudo +`パスワードの入力を強制します。

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

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

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

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

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

ステップ11-Drupalのセットアップ

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

image:https://assets.digitalocean.com/anible_playbook/1.png [Drupalセットアップページ]

Drupalのブラウザーインストーラーの完了についてサポートが必要な場合は、https://www.digitalocean.com/community/tutorials/how-to-install-drupal-on-an-ubuntu-14-04-の指示に従ってください。 server-with-apache [この記事]。

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

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

ステップ12-ホストリストのクリーンアップ

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

トラブルシューティング

YAMLは空白を区別することに注意してください。 プレイブックで問題が発生している場合は、 `+ .yml +`ファイルに不適切なインデントまたは余分なスペースがある可能性があります。

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

fatal: [] => 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.

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

最初に、「+ localhost +」またはターゲットのリモートサーバーに手動でSSH接続する必要があります。 その後、プレイブックを再度実行してください。

結論

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

Related