AWSのインスタンスにLaravel環境を構築する

#インスタンスを作成
・EC2で行う（詳細は省略）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208640/2d0a8947-553e-0883-a296-ee27c51edaa0.png)

・インバウンドルールでHTTPポートを開放しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208640/2f27b595-c318-9ea3-495b-6ff5d0e566bd.png)

#必要なパッケージをインストール
## Docker
```bash
$ sudo yum update -y
$ sudo yum install docker
$ sudo service docker start
$ sudo usermod -a -G docker ec2-user
```
## Docker-compose
```bash
$ sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
```

## Dockerイメージ（Laradock）
・Laravel環境構築に必要なパッケージが全部含められているLaradockを選択

```bash
$ git clone https://github.com/Laradock/laradock.git
$ cd laradock
$ cp env-example .env
# 実行に必要なサービスを実行する
$ docker-compose up -d nginx mysql phpmyadmin redis workspace
# 動いているのか確認
$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                                                                                                            NAMES
ccb046bd18d9        laradock_nginx        "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes        0.0.0.0:80-81->80-81/tcp, 0.0.0.0:443->443/tcp                                                                                   laradock_nginx_1
ebdc1a33503a        laradock_php-fpm      "docker-php-entrypoi…"   6 minutes ago       Up 6 minutes        9000/tcp                                                                                                                         laradock_php-fpm_1
0c3e361c4626        laradock_phpmyadmin   "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes        0.0.0.0:8081->80/tcp                                                                                                             laradock_phpmyadmin_1
361e0a4fa898        laradock_workspace    "/sbin/my_init"          6 minutes ago       Up 6 minutes        0.0.0.0:3000-3001->3000-3001/tcp, 0.0.0.0:4200->4200/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp   laradock_workspace_1
1a5246349a6d        laradock_mysql        "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp                                                                                                laradock_mysql_1
09477490bbec        laradock_redis        "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes        0.0.0.0:6379->6379/tcp                                                                                                           laradock_redis_1
53ded2d4fab3        docker:19.03-dind     "dockerd-entrypoint.…"   6 minutes ago       Up 6 minutes        2375-2376/tcp                                                                                                                    laradock_docker-in-docker_1
```

・ワークスペース内に個人プロジェクトを格納

```bash
# クーロン
$ git clone https://github.com/lineapple0601/laravel_vue_practice.git
$ exit
```

・.envファイルにあるアプリのルートパスを再設定

```bash:.env
APP_CODE_PATH_HOST=../laravel_vue_practice
```

・dockerを再起動して、個人プロジェクトで起動できるようにする

```bash
$ docker-compose stop
$ docker-compose up -d nginx mysql phpmyadmin redis workspace
```

・composerアップデートや他の設定を行う（docker-compose.ymlに入れるのがベストだが、一応手動で行う）

```bash
$ docker exec -it 46a935162a22 /bin/bash
$ composer update
$ php artisan key:generate
```

・ログ・キャッシュ系での権限設定

```bash
$ chmod 644 -R storage
$ chmod 644 -R bootstrap/cache
$ chown laradock:laradock -R storage
$ chown laradock:laradock -R bootstrap/cache
```

・AWS側のパブリックIPからアクセスしてみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208640/b69aa7b8-e202-140e-d61f-52db4dd3e6e8.png)
<b>アクセス成功！</b>

# DBサーバーの構築

Laradock内にMysqlが含まれているので、docker-composeの起動で既に構築済み
mysqlコンテナ起動を確認

```bash
$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                                                                                                            NAMES
63222479c01a        laradock_nginx        "/docker-entrypoint.…"   20 minutes ago      Up 20 minutes       0.0.0.0:80-81->80-81/tcp, 0.0.0.0:443->443/tcp                                                                                   laradock_nginx_1
a300f914e763        laradock_php-fpm      "docker-php-entrypoi…"   20 minutes ago      Up 20 minutes       9000/tcp                                                                                                                         laradock_php-fpm_1
46a935162a22        laradock_workspace    "/sbin/my_init"          20 minutes ago      Up 20 minutes       0.0.0.0:3000-3001->3000-3001/tcp, 0.0.0.0:4200->4200/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp   laradock_workspace_1
b4f6d0dbb16c        docker:19.03-dind     "dockerd-entrypoint.…"   20 minutes ago      Up 20 minutes       2375-2376/tcp                                                                                                                    laradock_docker-in-docker_1
0c3e361c4626        laradock_phpmyadmin   "/docker-entrypoint.…"   2 hours ago         Up 20 minutes       0.0.0.0:8081->80/tcp                                                                                                             laradock_phpmyadmin_1
1a5246349a6d        laradock_mysql        "docker-entrypoint.s…"   2 hours ago         Up 20 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp                                                                                                laradock_mysql_1
09477490bbec        laradock_redis        "docker-entrypoint.s…"   2 hours ago         Up 20 minutes       0.0.0.0:6379->6379/tcp                                                                                                           laradock_redis_1
```

下記の情報で外部DBツールからアクセスしてみる

```yml:docker-compose.yml
### MYSQL #################################################
MYSQL_VERSION=latest
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208640/3de2be5b-88ec-9632-ef4e-a5c7cb99bd34.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208640/2100a068-5366-bcac-f4b7-bb1ab9bf1fbc.png)

<b>アクセス成功！