シェルスクリプトの勉強のついでにEC2(AmazonLinux2)にWordPressを一発インストールするスクリプトを作成してみました。スクリプトの解説と実行方法を記載します。
スクリプトの紹介
以下のリンクからzipをダウンロードできます。
ダウンロードして解凍すると以下のようなスクリプトが格納されています。(以下のコードをコピーしてEC2にviエディタなどで貼り付けても問題ありません。)
このままでも動作しますが、セキュリティ上、冒頭のユーザ名やパスワードは書き換えるようにしてください。
#!/bin/bash
######################パスワードなどは書き換える#######################
# DB rootパスワード指定
MysqlRootPasswd=Password@123
# DB ユーザ、パスワード設定(WordPressからのアクセス用)
MysqluserName=user01
MysqluserPasswd=Password@123
#####################################################################
# 対話モードをスクリプト化するexpectをインストール
sudo yum install expect -y
# httpdのインストール
sudo yum install httpd -y
sudo systemctl start httpd
sudo systemctl enable httpd.service
sudo usermod -a -G apache ec2-user
sudo chown -R ec2-user:apache /var/www
sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
# phpインストール
sudo amazon-linux-extras enable php8.1
sudo yum clean metadata
sudo yum -y update
sudo yum install php-cli php-pdo php-fpm php-mysqlnd php-xml php-mbstring php-gd -y
# mariadbのインストールおよび起動
sudo yum install mariadb mariadb-server -y
sudo systemctl start mariadb
sudo systemctl enable mariadb
# mariadb初期設定mysql_secure_installationの対話モードをスクリプト化
expect -c '
set timeout 10;
spawn sudo mysql_secure_installation;
expect "Enter current password for root (enter for none): ";
send -- "\n";
expect "Set root password?";
send -- "Y\n";
expect "New password:";
send -- "'"${MysqlRootPasswd}"'\n";
expect "Re-enter new password:";
send -- "'"${MysqlRootPasswd}"'\n";
expect "Remove anonymous users?";
send "Y\n";
expect "Disallow root login remotely?";
send "Y\n";
expect "Remove test database and access to it?";
send "Y\n";
expect "Reload privilege tables now?";
send "Y\n";
interact;'
# mysqlユーザ作成、テーブル作成スクリプト化
expect -c '
set timeout 1;
spawn mysql -u root -p;
expect "Enter password:";
send -- "'"${MysqlRootPasswd}"'\n";
expect "MariaDB \[\(none\)\]>";
send -- "CREATE USER '\'''"${MysqluserName}"''\''@'\''localhost'\'' IDENTIFIED BY '\'''"${MysqluserPasswd}"''\'';\n"
expect "MariaDB \[\(none\)\]>";
send -- "CREATE DATABASE `db01`;\n"
expect "MariaDB \[\(none\)\]>";
send -- "GRANT ALL PRIVILEGES ON `db01`.* TO \"'"${MysqluserName}"'\"@\"localhost\";\n"
expect "MariaDB \[\(none\)\]>";
send -- "FLUSH PRIVILEGES;\n"
expect "MariaDB \[\(none\)\]>";
send -- "exit;\n"
interact;'
#WordPressのダウンロード・設定
cd
wget https://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz
cp wordpress/wp-config-sample.php wordpress/wp-config.php
sed -i -e 's/database_name_here/db01/g' wordpress/wp-config.php
sed -i -e "s/username_here/${MysqluserName}/g" wordpress/wp-config.php
sed -i -e "s/password_here/${MysqluserPasswd}/g" wordpress/wp-config.php
cp -r wordpress/* /var/www/html/
rm -r ./*
sudo sed -i -e '/<Directory \"\/var\/www\/html\">/,/<\/Directory>$/s|AllowOverride None|AllowOverride All|' /etc/httpd/conf/httpd.conf
sudo chown -R apache /var/www
sudo chgrp -R apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
sudo systemctl restart httpd
必要なパッケージをyumでインストールして対話モードが必要なコマンドはexpectで対応しています。DBの作成もexpectで行っています。設定ファイル(wp-config.php)はsedで置換しています。
実行している内容は以下の記事で紹介した3章の実行手順をスクリプト化しています。何を行っているか気になる方はご参照ください。
スクリプト実行方法
EC2作成
EC2(t2.micro以上推奨)のAmazonLinux2を作成します。この時SSHとHTTPは許可してください。
EC2でスクリプト実行
EC2にSSH接続して上記スクリプト(install_wordpress_all.sh)を適当なディレクトリ(/home/ec2-userなど)に配置して実行します。
bash install_wordpress_all.sh
いろいろコンソールに出力されて数十秒ほどで完了します。
\r\nが云々というエラーが発生する場合は改行コードがWindowsのもの(\r\n)に変わってしまっている可能性があります。SAKURAエディタなどでLinuxのもの(\n)に置換してみてください。
ブラウザからEC2パブリックIPにアクセス
完了したらEC2のパブリックIPにブラウザ経由でHTTPアクセスして初期セットアップを行います。(httpsではないので注意)
http://[EC2のパブリックIP]
以下の画面が出てきたら正常です。セットアップしてWordPressを利用できます。
SSL化(HTTPS)したい、独自ドメインを利用したいなどがあれば以下の記事を参考にしていただければと思います。
PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!
SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ
システムエンジニア
AWSを中心としたクラウド案件に携わっています。
IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。
IT資格マニアでいろいろ取得しています。
AWS認定:SAP, DOP, SAA, DVA, SOA, CLF
Azure認定:AZ-104, AZ-300
ITIL Foundation
Oracle Master Bronze (DBA)
Oracle Master Silver (SQL)
Oracle Java Silver SE
■略歴
理系の大学院を卒業
IT企業に就職
AWSのシステム導入のプロジェクトを担当