はじめに
新しいサーバーを構成する必要がある状況は常に発生します。これは、ワークロードを分散するため、あるいは単にサーバーを増やす必要があるためかもしれません。新しいサーバーをセットアップする際、ユーザーは手動での介入を最小限に抑えるために、サーバーの自動化を利用して構成を行う必要があります。Ansibleは、新しいサーバーを自動的に構成するために使用できる構成管理ツールの1つであり、手動でサーバーをセットアップする際の人為的ミスの可能性を減らします。
Ansibleは、シンプルなアーキテクチャでありながら機能豊富なツールです。スクリプトを介してサーバーの構成を容易にします。その簡潔なアーキテクチャにより、Ansibleはノード全体に他のソフトウェアをインストールする必要がありません。
このチュートリアルでは、Ubuntuサーバー上で動作するLAMPスタックを使用したWordPressのインストールを、Ansibleを使って自動化する方法を紹介します。 WordPressは、コーディング言語としてPHPを、データ保存にMySQLデータベースを利用してブログやウェブサイトを作成するために使用されるCMSです。WordPressをインストールすると、ユーザーはウェブフロントエンドを使用してサイトを管理できます。
前提条件
- このチュートリアルはUbuntuに基づいているため、最新のUbuntuバージョンがインストールされ、sudo権限が付与されている必要があります。Ubuntuがインストールされていない場合は、当社のUbuntuサーバーのセットアップ方法.
- また、Ansibleコントロールノードも必要です。これには、sudo権限があり、ファイアウォールが有効なコントロールノードが必要です。Ubuntu 20.04でのAnsibleのインストールと構成には、Ansibleの構成方法に関する詳細なガイドが含まれています。
- また、最新のUbuntuを実行しているリモートAnsibleホストも必要です。これらのホストは、本質的にAnsibleにおける管理対象ノードです。
Ansibleプレイブックのアクションの概要
このセクションでは、Ansibleプレイブックを実行したときに何が行われるかを見ていきます。この手順は、こちらで提供されている手動セットアップの代替手段です:Ubuntu 20.04にLAMPを使用してWordPressをインストールする方法.
プレイブックを実行すると、Ansibleは以下を行います:
- Ansibleで推奨されるパッケージマネージャーである aptitude をインストールします。
- PHP拡張機能とLAMPパッケージをインストールして構成します。
- WordPressウェブサイト用に、新しいApacheの VirtualHost を作成します。
- Apacheの mod_rewrite モジュールを有効にし、デフォルトのウェブサイトを無効にします。
- MySQLのrootユーザーのパスワードを設定します。
- 匿名のMySQLアカウントとテストデータベースを削除します。
- 新しいユーザーと新しいデータベースを作成します。これらはWordPressウェブサイトで使用されます。
- 構成されたポート(デフォルトでは UFW)でHTTPトラフィックを許可するように 80 をセットアップします。
- WordPressをダウンロードして展開します。
- ディレクトリの権限と所有権を設定します。
- テンプレートを使用して、新しい wp-config.php ファイルを構成します。
LAMP環境でのWordPress用Ansibleプレイブックガイド
まず、LAMP環境でのWordPress用プレイブックとその依存関係をdo-community/ansible-playbooksリポジトリから取得する必要があります。このリポジトリをAnsibleコントロールノード内にクローンします。
以下に示すように、 git pull コマンドを実行できます。
|
1 2 3 4 5 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
以前にリポジトリをクローンしたことがある場合は、上記のリポジトリが最新の状態にプルされていることを確認してください。以下は、最新の状態に更新する方法です:
|
1 2 3 |
cd ~/ansible-playbooks git pull |
次に、 wordpress-lamp_ubuntu フォルダ内のファイルを見つける必要があります。このフォルダの名前は、使用しているUbuntuのバージョンによって異なる場合があります。一見すると、このディレクトリには以下のような構造が表示されます。

以下に、これらのファイルの目的をまとめます。
- files/apache.conf.j2: Apacheは VirtualHostを使用します。このファイルは、 VirtualHost の設定を指定するために使用されます。.
- files/wp-config.php.j2: このファイルには、WordPressを構成するための設定が含まれています。
- vars/default.yml: プレイブックの設定を構成します。
- playbook.yml: リモートサーバー上で実行する必要があるタスクがある場合、このファイルを使用してそれらを構成します。
- readme.md: プレイブックの使用ガイド。
インストールをカスタマイズするには、プレイブックの変数ファイルを編集する必要があります。まず、次のファイルを開きます。 vars/default.yaml ファイル。これは上記のディレクトリ内にあります:
|
1 2 3 |
cd wordpress-lamp_ubuntu1804 nano vars/default.yml |
このファイルはかなり長いです。インストールを支援するためのいくつかの設定が含まれています:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- #System Settings php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL Settings mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #HTTP Settings http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
ここでは、以下の変数に関係しています:
- php_modules:WordPressのセットアップをサポートするためにインストールする必要があるPHP拡張機能を含む配列。さらにモジュールをインストールしたい場合は、ここで指定できます。
- mysql_root_password: root MySQLアカウントのパスワード。
- mysql_db:WordPressが使用するMySQLデータベースの名前を指定します。
- mysql_user:WordPress用に作成する必要があるMySQLユーザーの名前。
- mysql_password:新しいMySQLユーザーのパスワード。
- http_host:ドメイン名またはサーバーのIP。
- http_conf:Apache内に作成される設定ファイルの名前。
- http_port:このバーチャルホストのHTTPポート。このポートはウェブサイトへのアクセスに使用されます。デフォルト値は80です。
次に、上記のファイルに値を入力し、保存して閉じます。nanoエディタを使用しているユーザーは、 CTRL+X, Y を押し、次に ENTER.
これで、このプレイブックを実行する準備が整いました。このプレイブックは1つ以上のサーバーで実行できます。特定のサーバーでこのプレイブックを実行したい場合は、 -l フラグを使用できます。さらに、リモートサーバーに接続するユーザーを指定する必要がある場合は、 -u フラグを使用して指定します。
たとえば、特定の1つのサーバー srvr1 で、ユーザー u1 を使用してプレイブックを実行したい場合は、以下のコマンドを実行できます:
|
1 |
ansible-playbook playbook.yml -l server1 -u cloudsigma |
上記のコマンドを実行すると、以下のような出力が表示されます:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ******************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [server1] TASK [Install prerequisites] ******************************************************************************** ok: [server1] |
プレイブックの実行が完了するまで待ちます。その後、ウェブブラウザで server_name にアクセスします:
|
1 |
http://server_host_or_ip/ |
次の画面が表示されます:

次に、お好みの言語を選択して「Continue」を押します。インストールを完了するための詳細情報を求める次の画面が表示されます:

その後、情報を入力して「Install WordPress.」を押します。少し時間がかかり、その後、以下のような画面が表示されます:

「Login」を選択してウェブサイトにログインし、設定を構成します:

Ansibleプレイブックのコンテンツ
次のフォルダを覚えているでしょうか: wordpress-lamp_ubuntu フォルダです。この中にはいくつかのファイルが含まれています。それでは、1つずつ見ていきましょう:
● vars/default.yml
このファイルには、WordPressウェブサイトの設定を構成するために使用される値が含まれています:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#システム設定 php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL設定 mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #HTTP設定 http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
● files/apache.conf.j2
このファイルは、ApacheのVirtualHostを設定するために使用されます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
● files/wp-config.php.j2
このファイルはWordPressを設定するために使用されます。ハッシュ関数によって生成されたユニークなキーとソルトが含まれています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<?php /** * WordPress の基本設定 * * wp-config.php 作成スクリプトは、インストール中にこのファイルを * 使用します。Web サイトを使用する必要はありません。このファイルを * 「wp-config.php」にコピーして値を記入することができます。 * * このファイルには以下の設定が含まれています。 * * * MySQL 設定 * * 秘密鍵 * * データベーステーブルの接頭辞 * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** MySQL 設定 - この情報はホスティングサービスから取得できます ** // /** WordPress のデータベース名 */ define( 'DB_NAME', '{{ mysql_db }}' ); /** MySQL データベースのユーザー名 */ define( 'DB_USER', '{{ mysql_user }}' ); /** MySQL データベースのパスワード */ define( 'DB_PASSWORD', '{{ mysql_password }}' ); /** MySQL のホスト名 */ define( 'DB_HOST', 'localhost' ); /** データベースのテーブルを作成する際のデータベースの文字セット。 */ define( 'DB_CHARSET', 'utf8' ); /** データベースの照合順序。分からない場合は変更しないでください。 */ define( 'DB_COLLATE', '' ); /** ファイルシステムへのアクセス **/ define('FS_METHOD', 'direct'); /**#@+ * 認証用ユニークキーとソルト。 * * これらをそれぞれ異なるユニークなフレーズに変更してください! * これらは {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org の秘密鍵生成サービス} を使用して生成できます。 * これらはいつでも変更でき、既存のすべてのクッキーを無効化できます。これにより、すべてのユーザーが強制的に再ログインすることになります。 * * @since 2.6.0 */ define( 'AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); /**#@-*/ /** * WordPress データベースのテーブル接頭辞。 * * それぞれにユニークな接頭辞を指定することで、1つのデータベースに * 複数のインストールを持つことができます。半角英数字とアンダースコアのみを使用してください! */ $table_prefix = 'wp_'; /** * 開発者向け: WordPress デバッグモード。 * * 開発中に通知の表示を有効にするには、これを true に変更してください。 * プラグインやテーマの開発者は、開発環境で WP_DEBUG を使用することを * 強く推奨します。 * * デバッグに使用できるその他の定数に関する情報については、 * Codex をご覧ください。 * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* 編集が必要なのはここまでです!それでは、お楽しみください。 */ /** WordPress ディレクトリへの絶対パス。 */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** WordPress の変数とインクルードファイルをセットアップします。 */ require_once( ABSPATH . 'wp-settings.php' ); |
● playbook.yml
このファイルには、このセットアップで定義されたすべてのタスクが含まれています。まず、このセットアップの対象となるサーバーのグループをリストすることから始まります。これには、次のものが含まれます。 vars/default.yml 設定オプションをロードするための変数ファイル:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: インストール 前提条件 apt: name=aptitude update_cache=yes state=latest force_apt_get=yes tags: [ system ] - name: インストール LAMP パッケージ apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] tags: [ system ] - name: インストール PHP 拡張機能 apt: name={{ item }} update_cache=yes state=latest loop: "{{ php_modules }}" tags: [ system ] # Apacheの設定 - name: 作成 ドキュメントルート file: path: "/var/www/{{ http_host }}" state: directory owner: "www-data" group: "www-data" mode: '0755' tags: [ apache ] - name: セットアップ Apache バーチャルホスト template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: リロード Apache tags: [ apache ] - name: 有効化 rewrite モジュール shell: /usr/sbin/a2enmod rewrite notify: リロード Apache tags: [ apache ] - name: 有効化 新規 サイト shell: /usr/sbin/a2ensite {{ http_conf }} notify: リロード Apache tags: [ apache ] - name: 無効化 デフォルト Apache サイト shell: /usr/sbin/a2dissite 000-default.conf notify: 再起動 Apache tags: [ apache ] # MySQLの設定 - name: 設定 the root パスワード mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock tags: [ mysql, mysql-root ] - name: 削除 すべて 匿名 ユーザー アカウント mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: 削除 the MySQL テスト データベース mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: 作成 データベース 用 WordPress mysql_db: name: "{{ mysql_db }}" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: WordPress用MySQLユーザーの 作成 mysql_user: name: "{{ mysql_user }}" password: "{{ mysql_password }}" priv: "{{ mysql_db }}.*:ALL" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] # UFWの設定 - name: "UFW - ポート {{ http_port }} での HTTP を許可" ufw: rule: allow port: "{{ http_port }}" proto: tcp tags: [ system ] # WordPressの設定 - name: 最新のWordPressを ダウンロードして展開する unarchive: src: https://wordpress.org/latest.tar.gz dest: "/var/www/{{ http_host }}" remote_src: yes creates: "/var/www/{{ http_host }}/wordpress" tags: [ wordpress ] - name: 所有権の設定 file: path: "/var/www/{{ http_host }}" state: directory recurse: yes owner: www-data group: www-data tags: [ wordpress ] - name: ディレクトリの権限を設定 する shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;" tags: [ wordpress ] - name: ファイルの権限を設定 する shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;" tags: [ wordpress ] - name: wp-configのセット-アップ template: src: "files/wp-config.php.j2" dest: "/var/www/{{ http_host }}/wordpress/wp-config.php" tags: [ wordpress ] handlers: - name: Apacheのリロード service: name: apache2 state: reloaded - name: Apacheの再起動 service: name: apache2 state: restarted |
構築するウェブサイトの特定のニーズに合わせて、これらのファイルを必要に応じて変更できます。
結論
このチュートリアルでは、Ansibleを使用して、最新のUbuntuオペレーティングシステム上のLAMPスタックで実行されるWordPressウェブサイトのインストールとセットアップを自動化する方法を説明しました。
Ansibleの操作に関する詳細なガイドについては、当社のブログにある以下のチュートリアルをご覧ください。:
- CloudSigmaでのAnsibleの使用
- AnsibleとUbuntu 20.04を使用したサーバーセットアップの自動化
- Ansibleを使用したUbuntu 20.04でのLAMPのインストールと設定
ハッピーコンピューティング!
コメント
コメントはまだありません。最初のコメントを投稿しましょう。