Ubuntu18.04でAnsibleを使用してLAMPを使用してWordPressをインストールおよびセットアップする方法
序章
最新のアプリケーション環境は使い捨てであるため、サーバーの自動化はシステム管理において重要な役割を果たしています。 構成管理ツール( Ansible など)は通常、新しいサーバーの標準手順を確立することでサーバーセットアップを自動化するプロセスを合理化すると同時に、手動セットアップに関連する人的エラーを削減するために使用されます。
Ansibleは、ノードに特別なソフトウェアをインストールする必要のないシンプルなアーキテクチャを提供します。 また、自動化スクリプトの作成を容易にする堅牢な機能セットと組み込みモジュールも提供します。
このガイドでは、Ansibleを使用して、 Ubuntu18.04にLAMPを使用してWordPressをインストールする方法に関するガイドに含まれる手順を自動化する方法について説明します。 WordPressはインターネット上で最も人気のあるCMS(コンテンツ管理システム)であり、ユーザーはPHP処理を使用してMySQLバックエンド上に柔軟なブログやWebサイトをセットアップできます。 セットアップ後、ほとんどすべての管理はWebフロントエンドを介して実行できます。
前提条件
このガイドで説明しているプレイブックが提供する自動セットアップを実行するには、次のものが必要です。
- 1つのAnsibleコントロールノード:SSHキーを使用してAnsibleホストに接続するようにAnsibleがインストールおよび構成されたUbuntu18.04マシン。 サーバーの初期設定ガイドで説明されているように、コントロールノードにsudo権限とファイアウォールが有効になっている通常のユーザーがいることを確認してください。 Ansibleをセットアップするには、 Ubuntu18.04にAnsibleをインストールして構成する方法に関するガイドに従ってください。
- 1つ以上のAnsibleホスト:Ubuntu18.04でAnsibleを使用して初期サーバーセットアップを自動化する方法のガイドに従って以前にセットアップされた1つ以上のリモートUbuntu18.04サーバー。
先に進む前に、まず、AnsibleコントロールノードがAnsibleホストに接続してコマンドを実行できることを確認する必要があります。 接続テストについては、 Ubuntu18.04にAnsibleをインストールして構成する方法のステップ3を確認してください。
このハンドブックは何をしますか?
このAnsibleプレイブックは、 Ubuntu18.04にLAMPを使用してWordPressをインストールする方法に関するガイドで概説されている手順を手動で実行する代わりの方法を提供します。
このプレイブックを実行すると、Ansibleホストで次のアクションが実行されます。
- インストール
aptitude
、Ansibleが代替として好むapt
パッケージマネージャー。 - 必要なLAMPパッケージとPHP拡張機能をインストールします。
- 新しいApacheを作成して有効にします
VirtualHost
WordPressのウェブサイト用。 - Apacheの書き換えを有効にします(
mod_rewrite
)モジュール。 - デフォルトのApacheWebサイトを無効にします。
- MySQL rootユーザーのパスワードを設定します。
- 匿名のMySQLアカウントとテストデータベースを削除します。
- WordPressWebサイト用の新しいMySQLデータベースとユーザーを作成します。
- 設定されたポートでHTTPトラフィックを許可するようにUFWを設定します(
80
デフォルト)。 - WordPressをダウンロードして解凍します。
- 正しいディレクトリの所有権と権限を設定します。
- を設定します
wp-config.php
提供されたテンプレートを使用してファイルします。
プレイブックの実行が終了すると、構成変数内で定義したオプションに基づいて、LAMP環境上でWordPressのインストールが実行されます。
このハンドブックの使い方
最初に行う必要があるのは、 do-community /ansible-playbooksリポジトリからWordPressonLAMPプレイブックとその依存関係を取得することです。 このリポジトリをAnsibleコントロールノード内のローカルフォルダーに複製する必要があります。
別のガイドに従って以前にこのリポジトリのクローンを作成したことがある場合は、既存のリポジトリにアクセスしてください ansible-playbooks
コピーして実行する git pull
内容が更新されていることを確認するコマンド:
- cd ~/ansible-playbooks
- git pull
初めて使用する場合 do-community/ansible-playbooks
リポジトリの場合は、次のコマンドを使用してリポジトリをホームフォルダに複製することから始める必要があります。
- cd ~
- git clone https://github.com/do-community/ansible-playbooks.git
- cd ansible-playbooks
関心のあるファイルは、 wordpress-lamp_ubuntu1804
次の構造を持つフォルダ:
wordpress-lamp_ubuntu1804
├── files
│ ├── apache.conf.j2
│ └── wp-config.php.j2
├── vars
│ └── default.yml
├── playbook.yml
└── readme.md
これらの各ファイルは次のとおりです。
files/apache.conf.j2
:ApacheVirtualHostを設定するためのテンプレートファイル。files/wp-config.php.j2
:WordPressの設定ファイルを設定するためのテンプレートファイル。vars/default.yml
:プレイブック設定をカスタマイズするための可変ファイル。playbook.yml
:リモートサーバーで実行されるタスクを含むプレイブックファイル。readme.md
:このハンドブックに関する情報を含むテキストファイル。
プレイブックの可変ファイルを編集して、オプションをカスタマイズします。 アクセスする wordpress-lamp_ubuntu1804
ディレクトリを開き、 vars/default.yml
選択したコマンドラインエディタを使用してファイル:
- cd wordpress-lamp_ubuntu1804
- nano vars/default.yml
このファイルには、注意が必要ないくつかの変数が含まれています。
---
#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
: rootMySQLアカウントに必要なパスワード。mysql_db
:WordPress用に作成する必要があるMySQLデータベースの名前。mysql_user
:WordPress用に作成する必要があるMySQLユーザーの名前。mysql_password
:新しいMySQLユーザーのパスワード。http_host
:ドメイン名。http_conf
:Apache内で作成される構成ファイルの名前。http_port
:この仮想ホストのHTTPポート、ここで80
デフォルトです。
内部の変数の更新が完了したら vars/default.yml
、このファイルを保存して閉じます。 使用した場合 nano
、を押してそうします CTRL + X
, Y
、 それから ENTER
.
これで、このプレイブックを1つ以上のサーバーで実行する準備が整いました。 ほとんどのプレイブックは、デフォルトでインベントリ内のすべてのサーバーで実行されるように構成されています。 使用できます -l
サーバーのサブセットまたは単一のサーバーのみがプレイブックの影響を受けることを確認するためのフラグ。 使用することもできます -u
フラグを使用して、リモートホストでPlaybookコマンドを接続して実行するために使用しているリモートサーバー上のユーザーを指定します。
プレイブックを実行するには server1
、として接続 sammy
、次のコマンドを使用できます。
- ansible-playbook playbook.yml -l server1 -u sammy
次のような出力が得られます。
OutputPLAY [all] *****************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************
ok: [server1]
TASK [Install prerequisites] ***********************************************************************************************************
ok: [server1]
…
TASK [Download and unpack latest WordPress] ********************************************************************************************
changed: [server1]
TASK [Set ownership] *******************************************************************************************************************
changed: [server1]
TASK [Set permissions for directories] *************************************************************************************************
changed: [server1]
TASK [Set permissions for files] *******************************************************************************************************
changed: [server1]
TASK [Set up wp-config] ****************************************************************************************************************
changed: [server1]
RUNNING HANDLER [Reload Apache] ********************************************************************************************************
changed: [server1]
RUNNING HANDLER [Restart Apache] *******************************************************************************************************
changed: [server1]
PLAY RECAP *****************************************************************************************************************************
server1 : ok=22 changed=18 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
注:Ansibleプレイブックの実行方法の詳細については、Ansibleチートシートガイドを確認してください。
プレイブックの実行が終了したら、Webブラウザーに移動して、そこからWordPressのインストールを完了することができます。
サーバーのドメイン名またはパブリックIPアドレスに移動します。
http://server_host_or_IP
次のようなページが表示されます。
WordPressのインストールに使用する言語を選択すると、コントロールパネルにログインできるようにWordPressのユーザーとパスワードを設定するための最後の手順が表示されます。
先にクリックすると、ログインを求めるページが表示されます。
ログインすると、WordPress管理ダッシュボードが表示されます。
WordPressのインストールをカスタマイズするためのいくつかの一般的な次のステップには、投稿のパーマリンク設定の選択が含まれます( Settings > Permalinks
)そして新しいテーマを選択します( Appearance > Themes
).
プレイブックの内容
このチュートリアルで紹介されているWordPressonLAMPサーバーのセットアップは、 DigitalOcean CommunityPlaybooksリポジトリ内のwordpress-lamp_ubuntu1804フォルダーにあります。 スクリプトの内容を直接コピーまたはダウンロードするには、各スクリプトの上部にあるRawボタンをクリックします。
プレイブックの全内容とそれに関連するファイルも、便宜上ここに含まれています。
vars / default.yml
The default.yml
変数ファイルには、データベース設定やApache内で構成するドメイン名など、プレイブックタスク内で使用される値が含まれています。
#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"
files / apache.conf.j2
The apache.conf.j2
ファイルは、新しいApacheVirtualHostを構成するJinja2テンプレートファイルです。 このテンプレート内で使用される変数は、 vars/default.yml
可変ファイル。
<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
The wp-config.php.j2
fileは別のJinjaテンプレートであり、WordPressで使用されるメインの構成ファイルをセットアップするために使用されます。 このテンプレート内で使用される変数は、 vars/default.yml
可変ファイル。 一意の認証キーとソルトは、ハッシュ関数を使用して生成されます。
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the
* installation. You don't have to use the web site, you can
* copy this file to "wp-config.php" and fill in the values.
*
* This file contains the following configurations:
*
* * MySQL settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link https://codex.wordpress.org/Editing_wp-config.php
*
* @package WordPress
*/
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', '{{ mysql_db }}' );
/** MySQL database username */
define( 'DB_USER', '{{ mysql_user }}' );
/** MySQL database password */
define( 'DB_PASSWORD', '{{ mysql_password }}' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
/** Filesystem access **/
define('FS_METHOD', 'direct');
/**#@+
* Authentication Unique Keys and Salts.
*
* Change these to different unique phrases!
* You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
*
* @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 Database Table prefix.
*
* You can have multiple installations in one database if you give each
* a unique prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = 'wp_';
/**
* For developers: WordPress debugging mode.
*
* Change this to true to enable the display of notices during development.
* It is strongly recommended that plugin and theme developers use WP_DEBUG
* in their development environments.
*
* For information on other constants that can be used for debugging,
* visit the Codex.
*
* @link https://codex.wordpress.org/Debugging_in_WordPress
*/
define( 'WP_DEBUG', false );
/* That's all, stop editing! Happy publishing. */
/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', dirname( __FILE__ ) . '/' );
}
/** Sets up WordPress vars and included files. */
require_once( ABSPATH . 'wp-settings.php' );
playbook.yml
The playbook.yml
ファイルは、このセットアップのすべてのタスクが定義される場所です。 まず、このセットアップのターゲットとなるサーバーのグループを定義します(all
)、その後使用します become: true
タスクを特権昇格で実行する必要があることを定義するには(sudo
)デフォルトで。 次に、それは含まれています vars/default.yml
構成オプションをロードするための可変ファイル。
---
- hosts: all
become: true
vars_files:
- vars/default.yml
tasks:
- name: Install prerequisites
apt: name=aptitude update_cache=yes state=latest force_apt_get=yes
tags: [ system ]
- name: Install LAMP Packages
apt: name={{ item }} update_cache=yes state=latest
loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ]
tags: [ system ]
- name: Install PHP Extensions
apt: name={{ item }} update_cache=yes state=latest
loop: "{{ php_modules }}"
tags: [ system ]
# Apache Configuration
- name: Create document root
file:
path: "/var/www/{{ http_host }}"
state: directory
owner: "www-data"
group: "www-data"
mode: '0755'
tags: [ apache ]
- name: Set up Apache VirtualHost
template:
src: "files/apache.conf.j2"
dest: "/etc/apache2/sites-available/{{ http_conf }}"
notify: Reload Apache
tags: [ apache ]
- name: Enable rewrite module
shell: /usr/sbin/a2enmod rewrite
notify: Reload Apache
tags: [ apache ]
- name: Enable new site
shell: /usr/sbin/a2ensite {{ http_conf }}
notify: Reload Apache
tags: [ apache ]
- name: Disable default Apache site
shell: /usr/sbin/a2dissite 000-default.conf
notify: Restart Apache
tags: [ apache ]
# MySQL Configuration
- name: Set the root password
mysql_user:
name: root
password: "{{ mysql_root_password }}"
login_unix_socket: /var/run/mysqld/mysqld.sock
tags: [ mysql, mysql-root ]
- name: Remove all anonymous user accounts
mysql_user:
name: ''
host_all: yes
state: absent
login_user: root
login_password: "{{ mysql_root_password }}"
tags: [ mysql ]
- name: Remove the MySQL test database
mysql_db:
name: test
state: absent
login_user: root
login_password: "{{ mysql_root_password }}"
tags: [ mysql ]
- name: Creates database for WordPress
mysql_db:
name: "{{ mysql_db }}"
state: present
login_user: root
login_password: "{{ mysql_root_password }}"
tags: [ mysql ]
- name: Create MySQL user for WordPress
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 Configuration
- name: "UFW - Allow HTTP on port {{ http_port }}"
ufw:
rule: allow
port: "{{ http_port }}"
proto: tcp
tags: [ system ]
# WordPress Configuration
- name: Download and unpack latest 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: Set ownership
file:
path: "/var/www/{{ http_host }}"
state: directory
recurse: yes
owner: www-data
group: www-data
tags: [ wordpress ]
- name: Set permissions for directories
shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;"
tags: [ wordpress ]
- name: Set permissions for files
shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;"
tags: [ wordpress ]
- name: Set up wp-config
template:
src: "files/wp-config.php.j2"
dest: "/var/www/{{ http_host }}/wordpress/wp-config.php"
tags: [ wordpress ]
handlers:
- name: Reload Apache
service:
name: apache2
state: reloaded
- name: Restart Apache
service:
name: apache2
state: restarted
独自のワークフロー内の個々のニーズに最も合うように、これらのファイルを自由に変更してください。
結論
このガイドでは、Ansibleを使用して、Ubuntu18.04サーバーにLAMPを使用してWordPressWebサイトをインストールおよびセットアップするプロセスを自動化しました。
サーバー設定をさらにカスタマイズするためにこのプレイブックに他のタスクを含めたい場合は、Ansibleの紹介ガイド構成管理101:Ansibleプレイブックの作成を参照してください。