Amazon LightsailでLAMP環境を整えてWebページを公開する

#はじめに
[本日出版される本をまとめて表示するサイトをラズパイサーバーで公開する](https://qiita.com/mono_taro/items/6b43141e2ac09a21249c)で自作Webページを自宅のラズパイサーバで公開していたのですが、あろうことか、データの更新中に落雷による停電が起きて…データが消えてしまいました…

こういうリスクがあるんだなと思いつつ、この機に勉強も兼ねてVPSでWebページを公開することにしました。

#構築環境
VPSサービス色々ありますが、Amazon Lightsailを利用してみます。これといった理由はありません。
一番安い3.50 USD/月のプランを使用してみます。
スペック
Amazon Linux
512 MB メモリ
1 コアプロセッサ
20 GB SSD ディスク
1 TB 転送

OSは現在使用しているPCがUbuntuなので今回はRedHat系のディストリビューションを使ってみようと思い、Amazon Linuxを使用することにしました。

#構築
###SSH接続
インスタンスを作成したら、インスタンス名の横にあるコンソールアイコンをクリックするとブラウザのSSHコンソールが立ち上がります。そこでタイムゾーンの設定と日本語化を適宜行います。
なお、ブラウザのSSHコンソールだと日本語化しても謎の文字化けが起きるので、ローカルPCのターミナルでSSH接続出来るようようにします。
まず、アカウントページのSSHキータブから東京リージョンの秘密鍵をダウンロードします。
![Screenshot from 2020-05-30 20-37-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584794/1f49eeb1-ea30-9b6a-b88e-7f7ed011838f.png)
ダウンロードした秘密鍵(.pem形式)を適当なディレクトリ(ここではkey)を作成し、そこに移動します。

```
$ cd ~/
$ mkdir key
ダウンロードした秘密鍵を保存してある場所からkeyディレクトリに移動
mv ***.pem key
アクセス権限を変更
chmod 400 ~/key/***.pem
```
以下のコマンドで接続

```
sudo ssh -i key/***.pem ユーザー名@パブリックIPまたはDNS
```
余談ですが、Termuxアプリを使えば同じような手順でAndroidスマホでもSSH接続が出来ます。

###LAMP環境
LAMP環境の構築は[チュートリアル: Amazon Linux AMI を使用して LAMP ウェブサーバーをインストールする](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html)を参考にしました。

```
$ sudo yum update 
必要なソフトウェアパッケージをインストール
$sudo yum install  httpd24 php72 mysql57-server php72-mysqlnd
apache起動
$sudo service httpd start
システムがブートするたびにapacheが起動するように設定
$sudo chkconfig httpd on

/var/www/html/内に適当なphpファイル(ここではphpinfo.php)を作り、<?php phpinfo(); ?>を書き込む
```
LAMP環境が構築できたか試してみる
`http://パブリックIPまたはDNS/phpinfo.php`
PHPの情報ページが表示されたら、構築完了。

mysqlも設定しちゃいます。

```
mysqlを起動
$sudo service mysqld start
rootのパスワード初期設定
$sudo mysql_secure_installation
```
設定したパスワードポリシーによっては複雑なパスワードを作る必要があります。
パスワードポリシーをMEDIUMやSTRONGに設定したのも関わらず、数字のみのパスワードを設定しようとすると
`ERROR 1819 (HY000): Your password does not satisfy the current policy requirements`
というエラーが出ます。
もし、あとからパスワードポリシーを変更したくなったときの方法はこちらが分かりやすいです。「[Mysql 5.7* パスワードをPolicyに合わせるとめんどくさい件について](https://qiita.com/keisukeYamagishi/items/d897e5c52fe9fd8d9273)」

mysqlを管理・編集するなら、やはりphpmyadminは外せないので、phpmyadminも入れます。

```
依存ファイルをインストール
$sudo yum install php72-mbstring.x86_64 
apache再起動
$sudo service httpd restart
apacheのドキュメントルートに移動
$cd /var/www/html
phpmyadminパッケージをダウンロード
$sudo wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
パッケージを展開
$sudo mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
ダウンロードしたファイルを削除
$sudo rm phpMyAdmin-latest-all-languages.tar.gz
mysqlを起動
$sudo service mysqld start
```
`http://パブリックIPまたはDNS/phpMyAdmin`でphpmyadminにアクセスしてみる
phpmyadminのログインページが表示されたら完了。

あとは、適宜apacheなどの設定をしておく。

###DNS
DNSの設定をしておきます。
ホーム画面から「ネットワーキング」タブ→DNSゾーンの作成
登録済みのドメインの入力に追加したいドメインを入力して、DNSゾーンの作成をクリック
![Screenshot from 2020-05-30 22-01-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584794/f1a68bbe-b81c-303a-c1ab-721f48e84762.png)
![Screenshot from 2020-05-30 22-02-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584794/9141d705-35d5-18e7-3605-af8087f24e95.png)
DNSレコードを押して、レコード作成します。
Aのレコードでサブドメインに@を入れ@.mono-today-book.workとし、解決先(?)に静的IPアドレスを設定し、追加します。
そして、お名前ドットコムのネームサーバーの設定で生成されたネームサーバーを登録。
これで`http://mono-today-book.work/`にアクセスしてapacheのページが表示されたら成功。

あとは、[本日出版される本をまとめて表示するサイトをラズパイサーバーで公開する](https://qiita.com/mono_taro/items/6b43141e2ac09a21249c)で作ったphpファイルをapacheのルートディレクトリに持ってきて移行完了。

#さいごに
突然ラズパイがお亡くなりになったので、今まで集積してきた書籍データがなくなってしまったのが痛い。
一応、先週バックアップしてたので復元しましたが5日分の書籍データが欠ける結果に…
これを機にもっと頻繁にバックアップをするようにします…

#参考文献
チュートリアル:Amazon Linux AMIを使用してLAMPウェブサーバーをインストールする：https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html
Mysql 5.7* パスワードをPolicyに合わせるとめんどくさい件について：https://qiita.com/keisukeYamagishi/items/d897e5c52fe9fd8d9273
今更ですが、Amazon Lightsail試してみました：https://medium.com/anti-pattern-engineering/%E4%BB%8A%E6%9B%B4%E3%81%A7%E3%81%99%E3%81%8C-amazon-lightsail%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F-7b2438d16bae