PHP Slim 環境構築(10) AWS(EC2) 手動構築

# PHP Slim 環境構築(10) AWS(EC2) 手動構築

## Introduction

[前回](https://qiita.com/dynamitecoolguy/items/3c99d678b58638caa701)までは、ローカル環境に構築していました。
今回は、AWS環境上に構築します。
とはいえ、AWSの各種サービスを使うのではなく、ローカル環境と同じものをEC2上に構築するだけです。しかも、ひとまず手動・・・

なお、この一連のシリーズは、自分への備忘録が第一目的のため、かなり不親切です。
ごめんなさい・・・

## 変更点

### ソースツリー

前回からの変更・追加ソースは以下の通りです。

```
$(PROJECTROOT)
  /compose
    /web_front
      development.conf
    docker-compose-development.yml
```


### /compose/web_front/development.conf

/compose/web_front/local.confをコピーした上で、下の二か所を変更しました。
サーバへのアクセスを、webサーバ名に関わらず、すべてweb_hogeの方に振るようにしました。
専用のドメイン名を付けてもいいのですが、Route53費用がかかってしまうのでこのようにしました。

```config:/compose/web_front/development.conf
...(略)...

server {
  listen 3128;
  listen 8443 ssl;
  server_name _;                        #  <--- hoge.localhostから変更
  access_log /dev/stdout;

...(略)...

# 以下削除
# server {
#   listen 3128 default_server;
#   listen 8443 ssl default_server;
#   server_name _;
#
#   location / {
#     return 404;
#   }
# }
```

### /compose/docker-compose-development.yml

/compose/docker-compose-local.ymlをコピーし、以下の変更を行いました。
DockerのARG environmentを変更したのと、xdebug用の環境変数設定を削除しました。

```yml:/compose/docker-compose-development.yml
version: '3'

services:
  web_front:
    build:
      args:
        - environment=development                 # localから変更

  web_hoge:
    build:
      args:
        - environment=development                 # localから変更
    #environment:                                 # 以下四行削除
    #  XDEBUG_CONFIG: "remote_host=172.28.0.1"
    #  PHP_IDE_CONFIG: "serverName=hoge.localhost"
    #domainname: localhost
```

これにより、docker-composeの起動は以下のようになります。

```shell
$ docker-compose -f docker-compose-common.yml -f docker-compose-development.yml build
$ docker-compose -f docker-compose-common.yml -f docker-compose-development.yml up -d
```

## EC2サーバ構築

AWS上で適当なサーバを起動します。なお、OSは、今回はAmazon Linux 2 AMIにします。
また、パブリックIPが必要ですが、EC2起動時に割り当てるのか、ElasticIPを使うのか、ALBを経由するのかなどはユーザーの状況に合わせて設定してください。

```shell
$ sudo amazon-linux-extras install docker -y
$ sudo systemctl enable docker
$ sudo usermod -a -G docker ec2-user
$ sudo service docker start

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

$ sudo yum install -yq git

$ git clone https://github.com/dynamitecoolguy/slimtemplate.git
$ cd slimtemplate
$ git checkout chapter10

$ cd compose
$ docker-compose -f docker-compose-common.yml -f docker-compose-development.yml up -d
```

これで、ブラウザ等から直接IPを使ってサンプルプログラムにアクセスできるようになるはずです。

## EC2ユーザーデータ

上記の構築をec2のユーザーデータに指定して、起動時にセットアップすることもできます。
これにより、開発サーバを容易に量産化することができます。
なお、ついでにシステム関係の設定もしてしまっています。

```shell:user-data
#!/bin/bash
cat <<'SYS_EOF' >> /etc/sysctl.conf
net.core.somaxconn=65535
SYS_EOF

sysctl -p /etc/sysctl.conf

cat > /etc/security/limits.d/20-filelimits.conf <<'FLIMIT_EOF'
*    soft    nofile    32768
*    hard    nofile    32768
FLIMIT_EOF
ulimit -n 32768

amazon-linux-extras install docker -y
systemctl enable docker
usermod -a -G docker ec2-user
service docker start

curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

yum install -yq git

cd /home/ec2-user
git clone https://github.com/dynamitecoolguy/slimtemplate.git
cd slimtemplate
git checkout chapter10
chown -R ec2-user:ec2-user .

cd compose
docker-compose -f docker-compose-common.yml -f docker-compose-development.yml up -d
```

## XDebug

AWS環境ではxdebug機能を無効にしています。
もし、有効にしたい場合には、Dockerファイルでdevelopment環境でもxdebugを有効にする、DBGpプロキシを立てる、xdebug.remote_connect_back=1にする、ルーターの設定を変更するなどの作業が必要となりますが、ここではそれについて触れません(環境毎にいろいろやり方が違うと思いますし・・)。

## ここまでのソース

[こちら](https://github.com/dynamitecoolguy/slimtemplate/tree/chapter10)でどうぞ。