Amazon Linux へ wordpress設定とHTTPS対応

Amazon Linux へ wordpress設定とHTTPS対応

Amazon Linux へ let’s encript設定

で Let’s encript の設定ができたので
続いて wordpress の設定

まずDBの作成

今回は mysql の -e オプションで
コマンドから直接SQLを実行します

参考サイトは
Let’s Encryptを使ってEC2(Amazon Linux)に構築したWordPressを無料でhttps(SSL)対応してみる


mysql コマンドのオプションについては
mysql コマンドオプション

を参考に

ちなみに、mysql のファイルを sqlファイルで作成し
コマンドで実行するなら

mysql -uユーザ名 -pパスワード DB名 < SQLファイル名

で実行可能

mysql -uroot -pパスワード -e 'CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8'

でwordpressDBを作成し
文字コードを utf8 へ設定

mysql -uroot -pパスワード -e "GRANT ALL ON wordpress.* TO 'ユーザ名'@'localhost' IDENTIFIED BY 'パスワード'"

これで wordpress のユーザとパスワードを設定し
権限付与

 mysql -uroot -pパスワード -e "FLUSH PRIVILEGES;

で設定反映

次に wordpress の取得と設置

wget https://wordpress.org/latest.tar.gz

で最新版を取得

tar -xzf latest.tar.gz

で解凍

cp -r wordpress/* /var/www/html/

でwordpress の構成ファイルをコピー

これで取得したドメインへブラウザでアクセスすると
インストール画面になります

まず let’s go をクリック

aws-wp-1

次にDatabase Name には
データベース名

username にはユーザ名

Password にはパスワード

これらは mysql で設定した wordpres DB のものを
入力し
submit をクリック

awsw-wp2

次に
Run the instalation
をクリック

aws-wp3

次にサイトの設定になるので
Site Title にはサイト名

Username には管理ユーザ

Pasword にはパスワード

Your Email には連絡用 メルアドを入力

aws-wp4

これでインストールすると確認画面になり
ログインできるようになります

aws-wp5

ただ、このままだとまだセキュリティに問題があるため
設定をしていきます

まず .htaccess を使えるように 設定変更

sudo vim /etc/httpd/conf/httpd.conf

で設定ファイルを開き

151行目あたりの

AllowOverride None

AllowOverride All

へ変更し保存

サブドメインの www.ドメイン名でも
Let’s Encritpt の証明書が有効になるように

sudo vim /etc/httpd/conf.d/ssl.conf 

で設定ファイルを開き

104行目あたりに

 SSLCertificateFile /etc/letsencrypt/live/www.ドメイン名/fullchain.pem

を追記し

114行目あたりに

SSLCertificateKeyFile /etc/letsencrypt/live/www.ドメイン名/privkey.pem

を追記

なお、fulchain.pem なのは
apache 2.4.8 以降だと
chani.pem ではなく、こっちを使うことになります

参考サイトは
Let’s encrypt運用のベストプラクティス

設定ができたら、

sudo service httpd restart

で apache2 の再起動

これで https でアクセスしても警告がでなくなります

次に
wordpressサイト自体のURLを
https でアクセスするよう設定

ログインして Settings > General で
Wordpress Address(URL)

Site Address(URL)

http://
の部分を
https://
に書き換え保存

wp-ssl

これで、wordpress のリンクがhttpsになります

ただ、これだけだと http でアクセスしてくると
https になっていないため
リダイレクト処理を追加します

参考サイトは
WordPressサイトをHTTPS化する手順

sudo vim /var/www/html/.htaccess 

でファイルを開き

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

をファイル先頭に追記し保存
RewriteCond は条件式で
今回はhttpアクセスなら RwriteRule を実行

RewirteRule では https から始まって
ホスト名とリクエストURLを書き換えて
https でリダイレクトという処理

なお

# BEGIN WordPress

# END WordPress

の間に書いてしまうと
wordpress により自動更新されるので
ここ以外に書かないとダメ

これでスマホなどで http でアクセスしても
https にリダイレクトされるのが確認できました

Amazon Linux へ let’s encript設定

Amazon Linux へ let’s encript設定

まずはインスタンスの起動
なお、毎回ブラウザを立ち上げるのは面倒なので
AWS CLI を使ってインスタンス起動します

EC2インスタンスをAWS CLIで起動する

に記載されているのを参考にしました

起動コマンドは

aws ec2 start-instances --instance-ids "起動したいインスタンスID"

となります

なお、AWS CLI で設定にあたりIAMユーザ作成が必須

設定については
ubuntu14.04 に awscli インストール

のときに行いました

インストールに関しては
AWS CLI のインストールと設定


Mac Linux WIndows での方法が載っています

インスタンスIDは
AWSコンソールで確認できます

なお、起動後の状態をみるには

aws ec2 describe-instance-status --instance-ids "インスタンスID"

となります

停止させるには

aws ec2 stop-instances --instance-ids "停止させたいインスタンスID"

となります

とりあえず、起動できたら
Amazon Linux 初期設定
まずは ubuntu で ssh 接続の準備

mv ダウンロード/wp-aws.pem .ssh/
chmod 400 .ssh/wp-aws.pem 

で鍵ファイルの移動と権限変更

次にEC2インスタンスのIPを取得

aws ec2 describe-instances --instance-ids "インスタンスID" --query 'Reservations[0].Instances[0].PublicIpAddress'

で取得できるので
これで

 ssh -i .ssh/wp-aws.pem ec2-user@54.250.245.32

というようにすれば接続OK

なおデフォルトユーザは
ec2-user になります

次に
AWSのEC2で行うAmazon Linuxの初期設定

を参考に初期設定

まずパッケージのアップデート

sudo yum update -y

次に yum-cron をいれて自動更新できるように設定

sudo yum install yum-cron -y
sudo chkconfig yum-cron on
sudo sed -i "s/^apply_updates.*$/apply_updates = yes/g" /etc/yum/yum-cron.conf
sudo service yum-cron start

次にタイムゾーンを日本にする

sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime 
sudo sed -i "s/\"UTC\"/\"Japan\"/g" /etc/sysconfig/clock
sudo reboot

これで再起動してから
date コマンドで日時を確認

date

次に文字コードを日本語対応に

sudo sed -i "s/en_US\.UTF-8/ja_JP\.UTF-8/g" /etc/sysconfig/i18n

ここまでできたら
LAMPサーバーのインストール

やり方については
チュートリアル: Amazon Linux AMI を使用して LAMP ウェブサーバーをインストールする

を参考に

まずは必要なパッケージのインストール

sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

次に webサーバの起動と
chkconfig で
ブート時に起動するように設定

sudo service httpd start
sudo chkconfig httpd on

これでブラウザでAWSインスタンスのIPへ接続し
Amazon Linux AMI Test Page
が表示されればOK

IPを知りたい場合

aws ec2 describe-instances --instance-ids "インスタンスID" --query 'Reservations[0].Instances[0].PublicIpAddress'

で取得できる

次にファイル許可の設定
今回は ec2-user を apache グループへ追加

sudo usermod -a -G apache ec2-user

一度ログアウトして
再度ログインし

groups

を実行すると
apache グループが作成されています
ログアウトしないとでませんでした

次に /var/www/以下のコンテンツグループ所有権
を apacheグループへ変更

sudo chown -R ec2-user:apache /var/www/

グループの書き込み許可を追加し
これからのサブディレクトにグループ ID を設定

sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;

そしてグループ書き込みの許可設定する

find /var/www -type f -exec sudo chmod 0664 {} \;

次にmysql のセキュリティ強化
まず mysql の起動

sudo service mysqld start

で起動

sudo mysql_secure_installation

でセキュリティ設定

内容は
Enter current password for root (enter for none):
はroot アカウントのパスワードだけど
最初は mysql root パスワードはないので
Enter でOK

Set root password? [Y/n]

パスワード設定しますかなので y

New password:
でパスワード設定
ただしセキュリティのため表示はされない

Re-enter new password:
で確認のためもう一回入力
こちらも表示はされない

Remove anonymous users? [Y/n]
は匿名アカウントの削除なので
y

Disallow root login remotely? [Y/n]
はリモート root ログインを無効化するなので
y

Remove test database and access to it? [Y/n]
はテストDB削除なので
y

Reload privilege tables now? [Y/n]
は権限テーブルのリロードと変更保存なので
y

そして次回起動時に mysqld を自動起動したいので

sudo chkconfig mysqld on

次に Let’s Encrypt の適用
ドメインと固定IPが必要になるので
お名前.com でドメイン取得し
Elastic IP を取得

Elastic IP の取得については
AWS Elastic IP 設定

AWS Elastic IP 設定

お名前.com で Elastic IP を反映するには
お名前.com へ Elastic IP を反映

お名前.com へ Elastic IP を反映


を参考に

設定後、取得したドメインへ
ブラウザからアクセスし apache のテスト画面が表示されれば成功

念の為、ここまでやったことをAMIにして保存

次に
チュートリアル: Amazon Linux で SSL/TLS を使用できるように Apache ウェブサーバーを設定する

を参考に
SSL/TLS の有効化

Elastic IP を別のマシンで使っていて
割り当てを変更して使う場合
ubuntu では

Offending ECDSA key in /home/snowpool/.ssh/known_hosts:17

というようになってしまうことがあるので

この場合

sudo vim /home/snowpool/.ssh/known_hosts

というように
.ssh/known_host
を開き
該当する行を削除すると接続可能に
今回なら :17 となっているので
17行目を削除

ログインできたら

sudo yum install -y mod24_ssl

でSSL/TLS のサポートを追加

次に Cerbot のインストールと実行

まずEPELパッケージを有効化

 sudo yum-config-manager --enable epel

次に cerbot インストール

curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
wget https://dl.eff.org/certbot-auto

で cerbot を取得

chmod a+x certbot-auto

で権限付与

sudo ./certbot-auto --debug

を実行するとインストールが開始される
最初にパッケージのインストールをするか聞かれるので
y

Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to
cancel):
でメルアド入力

(A)gree/(C)ancel:
で規約同意するか聞かれるので
A

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let’s Encrypt project and the non-profit
organization that develops Certbot? We’d like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.

メーリングリストに登録するかきかれるので
いまは不要なので N

No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)
ではドメインを入力

しかし、最後にエラーになるため
Let’s Encryptを使ってSSL証明書を自動更新する(AWS/Amazon Linux/Apache)

を参考に実践

sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
sudo chmod 700 /usr/bin/certbot-auto

でファイル取得と権限付与

sudo /usr/bin/certbot-auto certonly --webroot -w /var/www/html --email メルアド -d ドメイン名

で証明書作成

sudo vim /etc/httpd/conf.d/ssl.conf 

でファイルを開き

102行目あたりの

SLCertificateFile /etc/pki/tls/certs/localhost.crt

をコメントアウトし

SSLCertificateFile /etc/letsencrypt/live/ドメイン名/fullchain.pem

とする

110行目あたりの

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

をコメントアウトし

SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem

とする

保存したら

sudo service httpd restart

で再起動し
https://ドメイン名
で接続したときにセキュリティ警告がでなkればOK

sudo /usr/bin/certbot-auto renew --post-hook "sudo service httpd restart"

を実行し

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/snowpool.info.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/www.snowpool.info.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

-------------------------------------------------------------------------------

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/snowpool.info/fullchain.pem (skipped)
  /etc/letsencrypt/live/www.snowpool.info/fullchain.pem (skipped)
No renewals were attempted.
No hooks were run.

となればOK

次にLet’s Encript の更新自動化
これは Let’s Encript の有効期限が3ヶ月のため

 sudo vim /etc/cron.d/letsencript

でファイルを作成

00 16 * * 2 root /usr/bin/certbot-auto renew --post-hook "service httpd restart"

で毎週火曜日の16時にrenew が起動するようになります