1. heyhey1028

    Posted

    heyhey1028
Changes in title
+AWS EC2にdockerを使ったLaravelアプリをデプロイする話
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,210 @@
+
+簡単な人には簡単だと言われるAWSでのデプロイに舐めてかかって手酷くやられたので、自分がデプロイに至るまでの過程をハンズオン形式で紹介します。
+
+AWSでデプロイする様々な方法を試した結果、改めてdockerの素晴らしさを痛感したクジラ大好き野郎です。
+
+##成果物
+AWSのEC2内にLaravel環境をdocker(Laradock)で立ち上げ、アプリをデプロイ。
+
+###環境
+- Ubuntu 18.04LT
+- PHP 7.3
+- MySQL
+- Laravel
+- Docker
+- Git
+- Laradock v4以上
+
+###前提
+- 自分のローカル環境でlaradockを使ってLaravelプロジェクトを作成している事
+- 作成したLaravelプロジェクトを自分のGitレポジトリにpushしている事
+
+Laravelプロジェクトがない方は[こちら](https://qiita.com/yotsak83/items/a7d175206b387b5e5acc)などを参考に一度ローカル環境でプロジェクトを立ち上げてみてください。
+
+
+
+###注意点
+①今回デプロイファーストの為、DBはEC2内のdockerコンテナで保持します。イコールdockerコンテナの停止、破棄、EC2の停止、破棄によってデータが扱えなくなる、もしくは消えます。なのでdockerコンテナもEC2も停止、破棄しないように!!
+
+②また、とはいえdockerの設定(Dockerfile, docker-compose.yml)によって各人の環境が変わってしまう点に注意です!使用するLaradockのバージョンを揃えましょう。
+
+##手順
+AWSにて行われたハンズオン資料が非常に分かりやすかったので流用できるところは流用していきます。[こちら](https://www.dropbox.com/s/9tqndtlhqay5iw3/AWS%E4%BD%93%E9%A8%93%E3%83%8F%E3%83%B3%E3%82%BA%E3%82%AA%E3%83%B3%E3%80%9C2019_04_02.pdf?dl=0)からダウンロードしてこの記事と併読しながら進めてみてください。
+資料とは違う設定を選ぶ必要があるところは指摘していきます。
+
+1. VPC、サブネットを作成
+2. EC2インスタンスの作成
+3. Elastic IPの割り当て
+4. EC2インスタンスにSSHでアクセス
+5. git, docker, docker-composeのインストール
+6. EC2インスタンス内にソースコードをgit clone
+7. EC2インスタンス内でdockerコンテナ立ち上げ
+8. Laravel環境設定
+9. プロジェクト内の権限変更
+
+##手順1:VPC、サブネットを作成
+AWSハンズオン資料のP29からP49に沿ってVPC、サブネットを作成してください。
+
+※流用する部分はこんな感じで行きます(笑)
+
+##手順2:EC2インスタンスの作成
+引き続きハンズオン資料のP50からP69に沿ってEC2インスタンスの作成と適用するセキュリティグループを設定しますが、3点資料と違うところがあります!
+
+####変更点1:AMIはubuntu18.04LTを選択
+ハンズオン資料P53ではテスト用のコミュニティAMIを使用していますが、それではなくクイックスタートタブからubuntu18.04LTのAMIを選択してください。
+![image.png](https://qiita-image-store.s3.amazonaws.com/0/334813/2dd748c1-b3e4-3fd1-23e4-e435713c2463.png)
+
+
+####変更点2:高度な詳細の設定は飛ばす
+ハンズオン資料P56で設定されている高度な詳細は飛ばして構いません。
+
+####変更点3:セキュリティグループのインバウンド設定
+ハンズオン資料P59,60とセキュリティグループを設定したら、もう1つ追加します。
+![image.png](https://qiita-image-store.s3.amazonaws.com/0/334813/5a2393a6-62c6-f9db-9fca-ea46edc0c3d8.png)
+
+##手順3:Elastic IPの割り当て
+ハンズオン資料P67からP72に沿ってElastic IPの割り当てと紐付けを行なってください。
+
+##手順4:EC2インスタンスにSSHでアクセス
+ハンズオン資料P74からP79に従ってEC2インスタンスにインスタンス作成時にダウンロードしたペアキーを使ってアクセスします。
+
+###1点注意点!
+資料内で`ec2-user`で指定しているユーザー名は`ubuntu`にしてください!ubuntu18.04LTのインスタンスでデフォルトのユーザー名が`ubuntu` となります。つまり
+
+```diff:
+- ssh -i ~/Downloads/あなたの指定したキー名 ec2-user@割り当てたElastic IPアドレス
++ ssh -i ~/Downloads/あなたの指定したキー名 ubuntu@割り当てたElastic IPアドレス
+```
+##手順5:Git, Docker, Docker-composeのインストール
+
+SSHでEC2インスタンス内に入ったら、自分のgitレポジトリにあるファイルをcloneする為の`Git`と、dockerを使う為の`Docker`, `Docker-compose`をインストールします。
+
+EC2内への変更はsuper userで行わないのですが毎回`sudo`を打つのは面倒なので
+
+```bash:EC2内
+ubuntu@ip:~$ sudo su
+```
+で常にsuper userになっちゃいましょう。
+
+次にパッケージをインストールする為のaptをまず更新
+
+```bash:EC2内
+root@ip:/home/ubuntu# apt-get update
+```
+次にGitをインストールし、ついでにGitの初期設定もしてしまいましょう。
+
+初期設定をしないとgitコマンドを叩く度にユーザー名とパスワードが聞かれて面倒です。
+
+```bash:EC2内
+#gitインストール
+root@ip:/home/ubuntu# apt-get install git
+
+#git初期設定
+root@ip:/home/ubuntu# git config --global user.name [任意のユーザー名]
+root@ip:/home/ubuntu# git config --global user.email [任意のemailアドレス]
+```
+次にDockerのインストールです。ubuntu用の手順を[Docker公式ページ](https://docs.docker.com/install/linux/docker-ce/ubuntu/)に従いましょう。docker-composeも入れましょう。
+
+```bash:EC2内
+
+#dockerのインストール
+root@ip:/home/ubuntu# apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common
+
+root@ip:/home/ubuntu# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+
+root@ip:/home/ubuntu# apt-key fingerprint 0EBFCD88
+
+root@ip:/home/ubuntu# add-apt-repository \
+ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
+ $(lsb_release -cs) \
+ stable"
+
+root@ip:/home/ubuntu# apt-get install docker-ce docker-ce-cli containerd.io
+
+#docker-composeのインストール
+root@ip:/home/ubuntu# apt install docker-compose
+
+```
+
+##手順6:EC2インスタンス内にソースコードをgit clone
+Gitのリモートレポジトリにある任意のlaravelプロジェクトをEC2インスタンス内にクローンしましょう。
+
+注意!Laradockのフォルダは面倒なのでgitレポジトリにLaravelプロジェクトとpushしておきましょう。Laradockを別でgit cloneする手間が省けます。
+
+```bash:EC2内
+root@ip:/home/ubuntu# git clone [任意のレポジトリURL] [任意のフォルダ名]
+
+```
+
+##手順7:EC2インスタンス内でdockerコンテナ立ち上げ
+cloneした自分のフォルダにあるLaradockディレクトリへ移動し、コンテナを立ち上げましょう
+
+```bash:EC2内/laradock
+root@ip:/home/ubuntu# docker-compose up -d nginx mysql
+Creating laradock_docker-in-docker_1 ... done
+Creating laradock_mysql_1 ... done
+Creating laradock_workspace_1 ... done
+Creating laradock_php-fpm_1 ... done
+Creating laradock_nginx_1 ... done
+```
+立ち上がりました。
+
+##手順8:Laravel環境設定
+環境設定終了まであと一歩!
+まずLaravelが使えるように`Composer install`でプロジェクトに必要なパッケージを再度インストールしてあげましょう。
+
+まずworkspaceコンテナ内に入ります
+
+```bash:EC2内/laradock
+root@ip:/home/ubuntu# docker-compose exec workspace bash
+```
+Laravelプロジェクト内の環境設定を行う.envファイルは.gitignoreにて指定されている為、gitレポジトリにpush
+されないので、cloneしてきたファイルの中には無いので再度作成しましょう。
+
+```bash:workspaceコンテナ内
+/var/www# cp .env.example .env 
+
+```
+.envのdb設定を書き換えましょう
+
+```diff:.env
+DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+- DB_DATABASE=homestead
++ DB_DATABASE=default
+- DB_USERNAME=homestead
++ DB_USERNAME=default
+DB_PASSWORD=secret
+```
+
+.envの編集が終わったら満を時てして`composer install`、そしてAPP_KEYも発行しましょう。
+
+```bash:workspaceコンテナ内
+/var/www# composer install
+
+#インストール完了後
+/var/www# php artisan key:generate
+```
+
+これで`http://[設定したElastic IPアドレス]`をブラウザで叩けば、、、
+![image.png](https://qiita-image-store.s3.amazonaws.com/0/334813/5324f0a2-29a5-860e-76c2-15e6ab8a192b.png)
+出ました!
+
+##手順9:プロジェクト内の権限変更
+しかし実はこのままだとデータベースを動作させようとするとエラーが起きてしまうんです。原因はプロジェクト内のファイルに対する権限に問題があります。
+それを防ぐ為、`storage/logs`と`vendor`のユーザー権限を変更しましょう。
+
+```bash:workspace内
+/var/www# chmod 777 storage/logs vendor
+```
+
+##これで完了です!!(のはず)
+
+これで外部からLaravelをアクセスしても無事にデータベースとの連携も取れているはずです。
+
+駆け足でここまでまとめたので抜けているところがあるかもしれないので詰まったらご指摘頂ければ追記していきたいと思います。
+
+しかしこうやって書いてみるとどこで詰まるの??と思うかもしれませんが、ここまでの道のりが長かった。。。。
+
+プラスVue.jsを使っている方もいると思うのでプラスでnode.jsを入れてとかの方法はまた後ほど追記したいと思います。