今回の検証は以下の環境で実施している。
サーバテスト自動化ツールを実行するためには、テスト実行ユーザーで、管理サーバからノードに対してパスワードなしのssh接続を行える必要がある。特にServerspecは鍵認証のidファイルを指定できないため、sshホスト名で接続できる必要がある。
また、サーバログイン後、テスト実行ユーザーはsudoによって管理者権限でコマンドを実行するが、パスワード認証があると止まってしまうため、sudoもパスワード認証なしに設定する。ただし、sudoコマンドでは管理者権限が付与されるが、実行ユーザーがテスト実行ユーザーのままであるため、本当にrootで実行する必要のあるコマンドがエラーになってしまう。それに対応するにはsu root -cでコマンドを実行する必要がある。よって、テスト実行ユーザーをwheelグループに所属させ、wheelグループに対して、su実行時のパスワードを不要にする設定を行う。
設定方法については、弊社技術ブログ「Tech-sketch」の記事「パスワード認証無しでSSH接続とsudoとsuを実行する方法」を参照いただきたい。
まず、WordPressのインストールが必要となるため、以下のbashスクリプトを作成、実行する。このスクリプトをsudoコマンドで実行することで、必要なパッケージのインストールおよび設定が行われる。本来は不要だが、Infratasterによる外部からの接続試験機能を確認するため、tcpdumpコマンドのインストールと、mariadb-serverの管理サーバログイン許可設定と、ファイアウォールのMySQLサービスのポート解放を追加で行っている。
#!/bin/bash
# Parameter settings
HOSTNAME="`hostname`"
IP_ADDR="`hostname -i`"
MYSQL_ROOT_PASS="FM11AD2+"
WP_OS_USER="root"
WP_OS_GROUP="root"
WP_DB_NAME="WordPress"
WP_DB_USER="wp_admin"
WP_DB_PASS="HB-F1XDJ"
WP_UNIQE_PHRSE="FX702PFX801PPB100FX860PPB700PB500PB750PAI1000"
#WP_LATEST="http://wordpress.org/latest.tar.gz"
WP_LATEST="https://ja.wordpress.org/latest-ja.tar.gz"
# update packages
yum update -y
# install packages
yum install -y wget mariadb-server httpd php php-mysql tcpdump
# start/enable mariadb
systemctl start mariadb
systemctl enable mariadb
# set mariadb root password
mysql <<EOT
update mysql.user set password=password("${MYSQL_ROOT_PASS}") where user = 'root';
flush privileges;
EOT
# restart mariadb
systemctl restart mariadb
# create /root/.my.cnf
cat <<EOT > /root/.my.cnf
[client]
user = root
password = "${MYSQL_ROOT_PASS}"
[mysqladmin]
user = root
password = "${MYSQL_ROOT_PASS}"
EOT
chmod 600 /root/.my.cnf
# restart mariadb
systemctl restart mariadb
# mariadb logrotate setting
sed -i.bak -e '23,$ s/^#//' /etc/logrotate.d/mariadb
# create wordpres db/user
mysql -u root -p${MYSQL_ROOT_PASS} -vvv <<EOT
create user "${WP_DB_USER}"@"localhost" identified by "${WP_DB_PASS}";
create database ${WP_DB_NAME};
grant all privileges on ${WP_DB_NAME}.* to "${WP_DB_USER}"@"localhost";
flush privileges;
EOT
# install wordpress
curl ${WP_LATEST} | tar zx -C /var/www
# create wordpress config
sed -e "s/\(.*\)database_name_here\(.*\)/\1${WP_DB_NAME}\2/" \
-e "s/\(.*\)username_here\(.*\)/\1${WP_DB_USER}\2/" \
-e "s/\(.*\)password_here\(.*\)/\1${WP_DB_PASS}\2/" \
-e "s/\(.*\)password_here\(.*\)/\1${WP_DB_PASS}\2/" \
-e "s/\(.*\)put your unique phrase here\(.*\)/\1${WP_UNIQE_PHRSE}\2/" \
/var/www/wordpress/wp-config-sample.php > /var/www/wordpress/wp-config.php
# chown wordpress files
chown -R ${WP_OS_USER}:${WP_OS_GROUP} /var/www/wordpress
# create wordpres httpd config
cat <<EOT > /etc/httpd/conf.d/wordpress.conf
<VirtualHost *:80>
ServerName ${HOSTNAME}
DocumentRoot /var/www/wordpress
<Directory "/var/www/wordpress">
AllowOverride All
Options -Indexes
</Directory>
<Files wp-config.php>
order allow,deny
deny from all
</Files>
</VirtualHost>
EOT
# modify httpd config
sed -i.bak -e "s/ServerName www.example.com:80/ServerName ${HOSTNAME}/" /etc/httpd/conf/httpd.conf
# start httpd
systemctl start httpd
systemctl enable httpd
# other server grant setting
mysql -u root -p${MYSQL_ROOT_PASS} -vvv <<EOT
create user 'maintain'@'tissvv097' identified by "${WP_DB_PASS}";
grant all privileges on *.* to 'maintain'@'tissvv097';
flush privileges;
EOT
# open httpd port in firewall
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=mysql --zone=public --permanent
firewall-cmd --reload
# Complete message
echo ""
echo "========================================"
echo "Complete WordPress install"
echo "http://${IP_ADDR}/wp-admin/install.php"
echo "========================================"
Copyright © ITmedia, Inc. All Rights Reserved.