AWS EC2でUbuntu Server 18.04 LTSのインスタンス作成メモ

###インスタンスの作成
インスタンスの作成で Ubuntu Server 18.04 LTS (HVM), SSD Volume Type - ami-07ad4b1c3af1ea214 を選択してみた
キーペアが必要なので作成して.pemはローカルの.sshに保存しておく
インスタンスが作成されて使用できるようになったら以下でSSH接続する（アドレスはEC2ダッシュボートの実行中のインスタンスを選択して表示されるIPv4 パブリック IPに記載されているもの）

```
$ ssh -i ~/.ssh/xxx.pem ubuntu@xxx.xxx.xxx.xxx
```
18.04 LTSに間違いない

```
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-1021-aws x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

System information as of Tue Oct 23 07:20:58 UTC 2018

System load:  0.0               Processes:           93
Usage of /:   6.0% of 19.32GB   Users logged in:     1
Memory usage: 19%               IP address for eth0: yyy.yyy.yyy.yyy
Swap usage:   0%

* Security certifications for Ubuntu!
 We now have FIPS, STIG, CC and a CIS Benchmark.

- http://bit.ly/Security_Certification

* Want to make a highly secure kiosk, smart display or touchscreen?
 Here's a step-by-step tutorial for a rainy weekend, or a startup.

 - https://bit.ly/secure-kiosk


Get cloud support with Ubuntu Advantage Cloud Guest:
  http://www.ubuntu.com/business/services/cloud

* Canonical Livepatch is available for installation.
  - Reduce system reboots and improve kernel security. Activate at:
    https://ubuntu.com/livepatch

0 packages can be updated.
0 updates are security updates.


Last login: Tue Oct 23 05:22:28 2018 from 180.49.170.162
ubuntu@ip-yyy-yyy-yyy-yyy:~$
```
日付を確認してみる

```
$ date
```
あってないのでタイムゾーンを確認

```
$ timedatectl 
Local time: Tue 2018-10-23 22:53:24 UTC
Universal time: Tue 2018-10-23 22:53:24 UTC
RTC time: Tue 2018-10-23 22:53:24
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no
```
日本に設定する

```
$ sudo timedatectl set-timezone Asia/Tokyo
```
確認

```
$ timedatectl
Local time: Wed 2018-10-24 07:54:24 JST
Universal time: Tue 2018-10-23 22:54:24 UTC
RTC time: Tue 2018-10-23 22:54:25
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no
```

###Apache
Apacheのバージョンを確認してみる

```
$ apache2 -v
Command 'apache2' not found, but can be installed with:

sudo apt install apache2-bin
```
入ってないのでインストール
まずはOSをアップデートしておく（しないとサイトがNot foundになりインストールできなかった。いや、セキュリティグループで80番ポートのアウトバウンドを設定していなかったことが原因かも..）

```
$ sudo apt update
```
Apacheをインストール

```
$ sudo apt-get install apache2
```
インストールが終わったらApacheを再起動

```
$ sudo /etc/init.d/apache2 restart
```
ブラウザでアクセスしてApacheが起動していることを確認したいが、その前にセキュリティグループで該当インスタンスを選択しインバウンドタブを編集して80番ポートを追加しておく必要がある。設定できたらブラウザでアクセスしてみる。


###PHP
PHPのバージョンを確認

```
$ php -v

Command 'php' not found, but can be installed with:

sudo apt install php7.2-cli
sudo apt install hhvm
```
ないのでPHPをインストール（CLI版ではない）

```
$ sudo apt-get install php7.2
```
info.phpを作ってアクセスしてみる

```
sudo vim /var/www/html/info.php作成
<?php
phpinfo();
?>
```

###FTP
proftpdをインストール

```
$ sudo apt-get install proftpd
```
ServerTypeはStandaloneなのになぜかPassiveモードの設定をしてあげないと繋がらなかった
（Insecure server, it does not support FTP over TLS.とか出てたのでたぶんセキュリティー上の問題で勝手に切り替わるのか）

```
$ sudo vim /etc/proftpd/proftpd.conf
...
# In some cases you have to specify passive ports range to by-pass
# firewall limitations. Ephemeral ports can be used for that, but
# feel free to use a more narrow range.
PassivePorts                  60000 60100

# If your host was NATted, this option is useful in order to
# allow passive tranfers to work. You have to use your public
# address and opening the passive ports used on your firewall as well.
MasqueradeAddress               xxx.xxx.xxx.xxx
```
設定を変更したらproftpdを再起動

```
$ sudo /etc/init.d/proftpd restart
```
セキュリティグループでTCP20-21, 60000-60100番ポートをインバウンド、アウトバウンドともに開けてFileZillaなどでFTP接続できるか確認する

###Logwatch
ログをメールでチェックしたいのでLogwatchをインストール

```
$ sudo apt-get install logwatch
```
設定ファイルをコピーしログ用ディレクトリを確保

```
$ sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
$ sudo cp /usr/share/logwatch/default.conf/services/* /etc/logwatch/conf/services/
$ sudo mkdir /var/cache/logwatch
```
ログの送信先を設定

```
$ sudo vim /etc/logwatch/conf/logwatch.conf
MailTo = anonymous@abc.de.jp
```
以上で毎日ログが送信されてくるはずだが以下でちゃんと送信できるか確認しておく

###メール送信の設定
他のメールサーバーを介さずアプリケーション等からメールを直接送信するための設定
セキュリティグループでSMTP25番のアウトバウンドを許可する（受信しないのでインバウンドは不要）
EC2のTCP/25のOutbound通信制限がかかっているのでEメール上限緩和申請を行う
・AWS EC2 Eメール上限緩和 / 逆引き(rDNS)設定 申請手順
https://www.slideshare.net/AmazonWebServicesJapan/aws-42885668
https://cloudpack.media/11249
https://dev.classmethod.jp/cloud/aws/ec2-send-email-best-practice/

Postfixの設定は以下

```
$ sudo vim /etc/postfix/main.cf
 
...
myhostname = example.jp
mydomain = example.jp
myorigin = $mydomain
append_at_myorigin = yes
append_dot_mydomain = yes
inet_interfaces = localhost
inet_protocols = ipv4
mydestination = localhost
mynetworks = 127.0.0.1
```
テスト送信して届くか確認（迷惑メールに振り分けられたりするので注意）

```
$ sendmail ymaki@abc.de.jp
.
```
###Zend Framework (1.x) 

これで動かしてるサービスがあるので入れとく
http://qiita.com/Kaki_Shoichi/items/d12b98d6ea56cfd1a6d4
Zend Frameworkをダウンロード (1.12.20を選択) http://framework.zend.com/downloads/latest
その中の library ディレクトリを /usr/share/ にコピー
php.iniファイルの最後に以下を追加

```
include_path = ".:/usr/share/library"
```
php.iniの場所

```
/etc/php/7.2/apache2/php.ini
```
Apacheを再起動

```
$ sudo /etc/init.d/apache2 restart
```
テストファイルを作ってアクセスしてみる

```
$ sudo vim /var/www/html/zend_test.php
<?php
require_once 'Zend/Version.php';
echo 'Hello, Zend Framework! Ver ' . Zend_Version::VERSION;
```
###Java
バージョンの確認

```
$ java -version
```
ないのでインストール

```
$sudo apt install openjdk-11-jre-headless
```
開発するならJDKもインストール

```
$ sudo apt install openjdk-11-jdk-headless
```
コンパイルはこんな感じ

```
javac -d . Address.java
javac -d . -classpath /usr/tomcat8/lib/icu4j-63_1.jar:. AddressList.java
javac -d . -classpath /usr/tomcat8/lib/servlet-api.jar:java-json.jar:. Geocode.java
```
javaの場所を探す

```
$ /usr/sbin/update-java-alternatives -l
java-1.11.0-openjdk-amd64      1101       /usr/lib/jvm/java-1.11.0-openjdk-amd64
```

###Tomcat
http://ftp.riken.jp/net/apache/tomcat/ で最新を探す。8.5が最新の安定版らしい。
インストール

```
$ curl -O http://ftp.riken.jp/net/apache/tomcat/tomcat-8/v8.5.34/bin/apache-tomcat-8.5.34.tar.gz 
$ tar zxvf apache-tomcat-8.5.34.tar.gz 
$ sudo mv apache-tomcat-8.5.34 /usr/tomcat8 
$ sudo useradd -M -d /usr/tomcat8 tomcat8 
$ sudo chown -R tomcat8. /usr/tomcat8
```
起動（停止はshutdown.sh、バージョン確認はversion.sh）

```
sudo /usr/tomcat8/bin/startup.sh
```
ブラウザで動作確認

```
192.168.10.102(サーバーのアドレス):8080
```

##RDS
Aurora Serverlessのチュートリアル
https://aws.amazon.com/jp/rds/aurora/serverless/

EC2のセキュリティグループのアウトバウンドに3306が必要
RDSのクラスタのセキュリティブループのインバウンドに3306がありソースはEC2のグループIDが選択されていることを確認

mysqlコマンドが通らないのでMySQLクライアントをインストール

```
 $ sudo apt install mysql-client-core-5.7
```
以下でRDSにアクセス（usernameはRDS作成時に設定したもの、endpointはRDSのクラスタの詳細に表示されているDatabase endpoint）

```
 $ mysql --user=[your Master username] --password -h [your database endpoint]
```
DBが停止状態だと接続にしばらく待たされる（Aurora Serverlessはアクセスがないと勝手に停止しアクセスがあると自動で再開する）

###phpMyAdmin
ダウンロードして解凍

```
 $ wget https://files.phpmyadmin.net/phpMyAdmin/4.8.3/phpMyAdmin-4.8.3-all-languages.tar.gz
 $ tar -xvf phpMyAdmin-4.8.3-all-languages.tar.gz
```
wwwルートに移動

```
 $ sudo mv phpMyAdmin-4.8.3-all-languages /var/www/html/
```
名前を変更しておく（決してアタックされやすいphpmyadminとかにしないように！）

```
 $ cd /var/www/html
 $ sudo mv phpMyAdmin-4.8.3-all-languages/ phpmyadmin_xxx_yyy
```
ブラウザでphpmyadmin_xxx_yyyにアクセス
エラーが出る

```
mysqli 拡張がありません。PHP の設定をチェックしてみてください。
```
PHPモジュールをインストール

```
 $ sudo apt-get install php7.2-mysql
 $ sudo /etc/init.d/apache2 restart
```
変わらないのでphp.iniを編集

```
 $ sudo vim /etc/php/7.2/apache2/php.ini
 ...
 extension=mysqli
 $ sudo /etc/init.d/apache2 restart
```

mbstringのエラーが出たら

```
 The mbstring extension is missing. Please check your PHP configuration.
```
mbstringをインストール

```
 $ sudo apt-get install php-mbstring
```
Apacheを再起動

```
 $ sudo /etc/init.d/apache2 restart
```

ブラウザでphpMyAdminのログイン画面が出てきたらOK

Aurora Serverlessを操作したいのでphpMyAdminのルートにある設定ファイルのサンプルをコピーしてlocalhostをエンドポイントに変更

```
 $ cp config.sample.inc.php config.inc.php
 $ vim config.inc.php
```

```
 変更前）
 $cfg['Servers'][$i]['host'] = 'localhost';
 ↓
 変更後）
 $cfg['Servers'][$i]['host'] = '[database endpoint]';
```
phpMyAdminにログインしてサーバにエンドポイントが表示されているか確認