Ansibleを使用してUbuntu 14.04にWordPressのインストールを自動化する方法

前書き

Ansibleは、インフラストラクチャを自動化するシンプルでエージェントレスな方法です。 WordPressを何度も展開していることに気付いた場合、Ansibleを使用すると時間を大幅に節約できます。

数行のYAML(簡単なマークアップ言語)を使用して、新しいUbuntu 14.04サーバーでWordPressをセットアップするという通常の退屈なプロセスを自動化します。 WordPressは、https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-14-04 [このチュートリアル]で説明されているプロセスに従って、ほぼ自動的にWordPressをインストールします。

2つのサーバーを使用します。Ansibleを実行するビルドサーバーと、Ansibleを使用してWordPressをインストールするターゲットサーバーです。

前提条件

このチュートリアルを完了するには、次の設定が必要です。

  • Ubuntu 14.04を実行しているビルドサーバー。 このサーバーにAnsibleをインストールします(このチュートリアルでは* build-server *と呼びます)。 このサーバーにログインし、このチュートリアルのすべてのファイルとコマンドがこのサーバーで実行されます

  • Ubuntu 14.04を実行しているターゲットサーバー。 このサーバーにWordPressを(Ansible経由で)インストールします(このチュートリアルでは* wordpress-server *と呼びます)

  • Sudo non-rootユーザーが両方のサーバーに設定されている

  • * build-server * sudoユーザーのSSHキーを* wordpress-server のsudoユーザーのauthorized_keysに追加します。 これを設定するには、https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys—​2 [このチュートリアル]を実行します。 * build-server *からチュートリアルを実行し、 wordpress-server *にキーをアップロードする必要があります

(オプション)パスワードなしのsudoアクセス

  • wordpress-server *でパスワードなしのsudoアクセスを使用するのは、*高速*ですが、*安全性が低い*です。

  • wordpress-server *のsudoユーザーにこの特権を付与するには、sudoersファイルを編集する必要があります。 「+ visudo +」と入力して、sudoersファイルを編集します。

visudo

最後に次の行を追加します。

ALL=(ALL) NOPASSWD: ALL

これは、ファイルの*最終行*でなければなりません。 これが最後の行であることが重要です。それ以外の場合は上書きされます。

  • NB:* `+ visudo +`コマンドを使用して、sudoersファイルを常に編集します。 これにより、ファイルを保存する前に変更が検証されます。これにより、誤ってマシンから完全にロックアウトされるのを防ぐことができます。

これが完了したら、パスワードを入力せずに* wordpress-server *で次のコマンドを実行できるはずです。

sudo echo "Hello"

さて、このチュートリアル全体を通して、 `+ -K `フラグなしで ` ansible-playbook +`コマンドを実行できるため、sudoパスワードを手動で入力する必要はありません。

ansible-playbook playbook.yml -i hosts -u

ステップ1-Ansibleのインストール

このセクションでは、Ansibleを* build-server *にインストールします。

  • build-server *にSSHで接続し、このコマンドを実行してAnsibleをインストールします。

sudo apt-get install ansible -y

以下を実行することで、Ansibleがインストールされていることを確認できます。

ansible --version

次のような出力が表示されます。

Outputansible 1.5.4

ステップ2-ファイル構造のセットアップ

Ansibleをインストールしたので、Ansibleプレイブックのファイル構造を準備しましょう。

プレイブック用のディレクトリを作成します。

cd ~
mkdir wordpress-ansible && cd wordpress-ansible

このディレクトリに「+ cd 」と2つのファイルを作成します。1つは「 playbook.yml 」(WordPressをインストールするコマンドを書き込む場所)、もう1つは「 hosts +」(これはAnsibleに実行するサーバーを指示します)コマンド):

touch playbook.yml
touch hosts

プレイブックをロールに分割することをお勧めします。 ロールは再利用可能なモジュールと考えることができます。 このプロジェクトでは、4つのロールを作成します。

  • サーバ

  • php

  • MySQL

  • ワードプレス

プロジェクトのルートフォルダ( +〜/ wordpress-ansible +)から、 `+ roles `と ` cd +`というディレクトリを作成します:

mkdir roles && cd roles

`+ ansible-galaxy`と呼ばれるAnsibleツールでロールをブートストラップできます。 作成したい各ロールに対して、 `+ ansible-galaxy init +`を実行します:

ansible-galaxy init server
ansible-galaxy init php
ansible-galaxy init mysql
ansible-galaxy init wordpress

これにより、各ロールのファイル構造全体が作成されます。 これは、Ansibleのベストプラクティスに準拠しています。 ほとんどの場合、各ロールの `+ tasks / main.yml +`ファイルに関心があります。

この時点で、次のファイル構造が必要です。

[.]
|_ playbook.yml
|_ hosts
|_ [roles]
     |_ [server]
           |_ ...
     |_ [php]
           |_ ...
     |_ [mysql]
           |_ ...
     |_ [wordpress]
           |_ ...

ステップ3-プレイブックの作成

このセクションでは、リモートサーバーにWordPressをインストールするためのコマンドを作成します。

インベントリ(hostsファイル)

Ansibleインベントリは、WordPressをインストールしたいサーバーがあるかどうかをAnsibleに通知します。 インベントリファイル( + hosts +)で定義されたサーバーまたはサーバーのグループに対してプレイブックを実行できます。 在庫は非常に簡単です。

`+ hosts +`を編集します:

nano ~/wordpress-ansible/hosts

`+ [wordpress] +`の行を追加し、その下に* wordpress-server *のIPアドレスを追加します。

ホスト

[wordpress]

プレイブック

プレイブックは、WordPressアプリの定義と考えることができます。 プレイブックでは、作成したロールを組み合わせて、便利なアプリケーション(この場合はWordPressサイト)を構成します。

プレイブックファイルを編集します。

nano ~/wordpress-ansible/playbook.yml

これらのコンテンツを追加して、Ansibleにロールを実行するホスト( + hosts`ファイル内の + wordpress`のもの)と実行するロールを伝えます:

playbook.yml

- hosts: wordpress

 roles:
   - server
   - php
   - mysql
   - wordpress

プレイブックディレクトリに移動します。

cd ~/wordpress-ansible/

プレイブックを実行して、* build-server から wordpress-server *への基本的な接続が機能することを確認しましょう。 まだ何もしません。接続をテストするだけです:

ansible-playbook playbook.yml -i hosts -u  -K

プロンプトが表示されたら、* wordpress-server *でsudoユーザーのsudoパスワードを入力します。

次のような出力が表示されます。

Outputansible-playbook playbook.yml -i hosts -u  -K

PLAY [wordpress] **************************************************************

GATHERING FACTS ***************************************************************
ok: [188.166.68.134]

PLAY RECAP ********************************************************************
188.166.68.134             : ok=1    changed=0    unreachable=0    failed=0

これは、サーバーに接続できたことを示しています。 ただし、まだプレイを定義していないため、* wordpress-server *では何も実行されませんでした。 4つの役割の詳細を記入して、それを修正しましょう。

これが成功しなかった場合は、SSHキーを使用して* build-server から wordpress-server *にSSH接続できることを再確認してください。

ステップ3-ロールの作成

サーバ

まず最初に。サーバーをセットアップしましょう。 このために、 `+ server`ロールを編集します。

サーバーの役割は、ターゲットサーバーに必要なすべてのソフトウェアをインストールします。 このファイルを編集します。

nano roles/server/tasks/main.yml`

次の内容を追加します。 `+ --- +`を含む行が1行だけであることを確認してください(デフォルトでは1行あるはずです):

roles / server / tasks / main.yml

---
- name: Update apt cache
 apt: update_cache=yes cache_valid_time=3600
 sudo: yes

- name: Install required software
 apt: name={{ item }} state=present
 sudo: yes
 with_items:
   - apache2
   - mysql-server
   - php5-mysql
   - php5
   - libapache2-mod-php5
   - php5-mcrypt
   - python-mysqldb

これにより、次のことが行われます。

  • apt-cacheを更新します( + apt-get update

  • + apt-get install Apache、MySQL、PHP、および関連ソフトウェア

インストールする内容の詳細に興味がある場合は、https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-をご覧ください。 lamp-stack-on-ubuntu-14-04 [Ubuntu 14.04にLAMPを手動でインストールする方法に関するチュートリアル]。

次のようにプレイブックを実行できます。

ansible-playbook playbook.yml -i hosts -u  -K

次のような出力が表示されるはずです。

Outputansible-playbook playbook.yml -i hosts -u  -K

PLAY [wordpress] **************************************************************

GATHERING FACTS ***************************************************************
ok: [188.166.68.134]

TASK: [server | Update apt cache] *********************************************
ok: [188.166.68.134]

TASK: [server | Install required software] ************************************
[188.166.68.134] => (item=apache2,mysql-server,php5-mysql,php5,libapache2-mod-php5,php5-mcrypt,python-mysqldb)

PLAY RECAP ********************************************************************

これを実行すると、 `+ http:/// +`のデフォルトのApacheページにアクセスできるはずです。 驚くばかり。 Apacheは* wordpress-server *にインストールされ実行されています。

`+ TASKの時点でビルドが無期限にハングする場合:[server | aptキャッシュの更新] + `。これは、ターゲットサーバーの権限がないことを示している可能性があります。 * wordpress-server *でsudoアクセスが適切に設定されていることを確認してください。

PHP

PHPの要件を整理しましょう。 これはPHPの役割で行います。 PHPのメインタスクファイルを編集します。

nano roles/php/tasks/main.yml

以下を追加します(再び、 `+ --- +`行が既に存在するはずです):

roles / php / tasks / main.yml

---
- name: Install php extensions
 apt: name={{ item }} state=present
 sudo: yes
 with_items:
   - php5-gd
   - libssh2-php

これにより、必要なPHP拡張機能がインストールされます。

MySQL

また、WordPressサイト用にMySQLデータベースをセットアップする必要があります。 これは `+ mysql`ロールで行います。

これにはいくつかの変数が必要になります。 ロールの場合、 `+ defaults / main.yml +`ファイルで変数のデフォルト値を指定できます。

nano roles/mysql/defaults/main.yml

(作成する)データベース名、データベースユーザー名、およびデータベースパスワードをこの順序で追加します。 安全な「++」を選択してください。

roles / mysql / defaults / main.yml

---
wp_mysql_db: wordpress
wp_mysql_user: wordpress
wp_mysql_password:

データベースとそれにアクセスするユーザーを作成するタスクを追加します。

nano roles/mysql/tasks/main.yml

次の内容を追加します。

roles / mysql / tasks / main.yml

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

- name: Create mysql user
 mysql_user:
   name={{ wp_mysql_user }}
   password={{ wp_mysql_password }}
   priv=*.*:ALL

この役割は次のことを行います。

  • MySQLデータベースを作成する

  • MySQLユーザーを作成する

  • そのユーザーにデータベースへのアクセス権を付与します

変数は以前のファイルから自動的に取り込まれるため、ここで何も変更する必要はありません。

ワードプレス

そして今、私たち全員が待っていた瞬間…​ WordPress!

サーバー要件がインストールされたら、WordPressをセットアップできます。 `+ wordpress`ロールを編集します。

`+ roles / wordpress / tasks / main.yml +`ファイルにいくつかの異なるタスクを追加しているので、このセクションでは開いたままにします。

nano roles/wordpress/tasks/main.yml

最初に、WordPressを `+ / tmp +`ディレクトリにダウンロードする必要があります(セキュリティを重視している方は、証明書の検証を無効にすると、ダウンロードが中断されることに気付くでしょう)。

roles / wordpress / tasks / main.yml

---
- name: Download WordPress  get_url:
   url=https://wordpress.org/latest.tar.gz
   dest=/tmp/wordpress.tar.gz
   validate_certs=no
   sudo: yes

ダウンロードしたら、gzipファイルを、ApacheがWebコンテンツの保存に使用する場所である `+ / var / www +`に抽出します。

roles / wordpress / tasks / main.yml

- name: Extract WordPress  unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/ copy=no
 sudo: yes

ファイルを抽出したら、WordPressサイトを指すようにApacheのデフォルトのサイトドキュメントルートを更新しましょう。

roles / wordpress / tasks / main.yml

- name: Update default Apache site
 sudo: yes
 lineinfile:
   dest=/etc/apache2/sites-enabled/000-default.conf
   regexp="(.)+DocumentRoot /var/www/html"
   line="DocumentRoot /var/www/wordpress"


 sudo: yes

これにより、Apacheのデフォルトサイトの `+ DocumentRoot `が、 ` / var / www / wordpress +`でダウンロードしたWordPressファイルを指すように更新されます。

ここで、「+ notify 」ブロックが追加されたことがわかります。 これは、タスクが正常に完了した後にサービスの再起動などのタスクを実行する必要がある場合に使用されます。 タスクが_changed_の場合、 ` notify +`ハンドラは_notified_になります。

`+ restart apache`のハンドラーを追加する必要があります。 これまでのものを保存し、編集のために `+ roles / wordpress / handlers / main.yml +`を開きます。

nano roles/wordpress/handlers/main.yml

これらのコンテンツを追加します。

roles / wordpress / handlers / main.yml

---
- name: restart apache
 service: name=apache2 state=restarted
 sudo: yes

このハンドラは、 `+ notify:restart apache +`を指定するタスクが変更され、サーバーがApacheを再起動するときに呼び出されます。

  • WordPressの設定*

`+ roles / wordpress / tasks / main.yml +`に戻ります。

最後に、WordPressサイトの設定を行う必要があります。

まず、サンプルの構成ファイルをコピーします。

roles / wordpress / tasks / main.yml

- name: Copy sample config file
 command: mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php creates=/var/www/wordpress/wp-config.php
 sudo: yes

データベース情報に一致するように、このファイルのいくつかの定数を更新します。

roles / wordpress / tasks / main.yml

- name: Update WordPress config file
 lineinfile:
   dest=/var/www/wordpress/wp-config.php
   regexp="{{ item.regexp }}"
   line="{{ item.line }}"
 with_items:
   - {'regexp': "define\\('DB_NAME', '(.)+'\\);", 'line': "define('DB_NAME', '{{wp_mysql_db}}');"}
   - {'regexp': "define\\('DB_USER', '(.)+'\\);", 'line': "define('DB_USER', '{{wp_mysql_user}}');"}
   - {'regexp': "define\\('DB_PASSWORD', '(.)+'\\);", 'line': "define('DB_PASSWORD', '{{wp_mysql_password}}');"}
 sudo: yes

このタスクは、設定ファイルで「+ DB_NAME 」、「 DB_USER 」、および「 DB_PASSWORD +」を含む行を見つけ、それらをプレイブックの変数で置き換えます。

上記の手順を正常に完了した後、wordpressの役割には2つの重要なファイルが含まれます。

WordPressの完全なタスクファイルは次のとおりです。

roles / wordpress / tasks / main.yml

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

- name: Extract WordPress  unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/ copy=no
 sudo: yes

- name: Update default Apache site
 sudo: yes
 lineinfile:
   dest=/etc/apache2/sites-enabled/000-default.conf
   regexp="(.)+DocumentRoot /var/www/html"
   line="DocumentRoot /var/www/wordpress"
 notify:
   - restart apache

- name: Copy sample config file
 command: mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php creates=/var/www/wordpress/wp-config.php
 sudo: yes

- name: Update WordPress config file
 lineinfile:
   dest=/var/www/wordpress/wp-config.php
   regexp="{{ item.regexp }}"
   line="{{ item.line }}"
 with_items:
   - {'regexp': "define\\('DB_NAME', '(.)+'\\);", 'line': "define('DB_NAME', '{{wp_mysql_db}}');"}
   - {'regexp': "define\\('DB_USER', '(.)+'\\);", 'line': "define('DB_USER', '{{wp_mysql_user}}');"}
   - {'regexp': "define\\('DB_PASSWORD', '(.)+'\\);", 'line': "define('DB_PASSWORD', '{{wp_mysql_password}}');"}
 sudo: yes

Apacheを再起動するためのファイルは次のとおりです(作成済みのはずです)。

roles / wordpress / handlers / main.yml

---
- name: restart apache
 service: name=apache2 state=restarted
 sudo: yes

終わったね! 最後にもう一度Playbookを実行して、WordPressをインストールおよび構成します。

ansible-playbook playbook.yml -i hosts -u  -K

WordPressサイトをオンラインで表示できるはずです: + http:// your_server_ip +

image:https://assets.digitalocean.com/articles/wordpress_1404/initial_config.png [WordPressセットアップフォーム]

ここからWordPressサイトの手動セットアップを完了できます。

結論

おめでとうございます。 1つのコマンドで、Ubuntu 14.04サーバーにWordPressサイトをインストールできるようになりました。

ansible-playbook playbook.yml -i hosts -u  -K

あなたがしなければならないのは、ターゲットサーバーのIPアドレスを `+ hosts +`ファイルに追加し、パーミッションが正しく設定されていることを確認することです。

次のステップ

これは、AnsibleとWordPressを使い始めるための非常に簡単なイントロでした。 次の改善点を検討してください。

  • Ansible Galaxyを探索し、Galaxyで独自の役割をホストする方法を学びます

  • WordPressサイトの手動設定が不要になるように、セットアッププロセスを自動化します

Related