0
2

More than 3 years have passed since last update.

EC2/Docker/Laravelでデプロイ

Last updated at Posted at 2020-11-04

経緯

Laradocを使ったWebアプリの開発の勉強を始めています.

AWSとLaravel,docker,docker-compose勉強し始めて、1ヶ月ほどたって、
Docker/Doker Compose/AWSの使い方にはなれてきたので、Laradocでデプロイしてみたいなぁと思って、自分の勉強のために残しておきます。(2020年11月4日時点)

参考にさせていただいたのサイトは下記のところです。

https://laraweb.net/tutorial/6578/
https://noumenon-th.net/programming/2019/06/16/laradock/

参考にした本は「Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版」です。

docker,docker-composeの基礎知識は下記のudemy講座で勉強しました。

色々な知識与えてくれた上記の作者の方々に感謝です。

では早速やっていきましょう

ゴール

AWSでどこからでもアクセスできるLaravelのWebアプリをデプロイする。
本来はローカルでLaradoc作って、Webアプリ開発してそれをgit cloneするのだと思いますが、
全部AWSで完結します。

laravelの実行環境

Ubuntu:18.04
PHP : 7.3
mysql : 5.4
Docker : 19.03.13
Docker-compose : 1.17.1

リージョンの選定

東京リージョンで作成しましょう

VPCの作成

image.png

image.png

1個のパブリックサブネットを持つVPCを作成します。
プライベートなサブネットを作りたいときは下のパブリックとプライベートサブネットを持つVPCを作ります。
このとき、IPv4 CIDRブロックは10.0.0.0/16
パブリックサブネットのIpv4 10.0.0.0/24にしておきましょう。
image.png

VPC
image.png

EC2インスタンスの作成

EC2をコンソールから選択してインスタンスを起動をクリック
image.png

Ubuntu 18.04を選択
ステップ2でt2.microを選択
image.png

ステップ3 インスタンスの詳細の設定では先程作成したVPCを選択.自動割当パブリックIPも無効から有効にしましょう。
image.png

ステップ6 セキュリティグループ設定ではHTTPの80ポートを使用するので、ルールの追加で追加する。
image.png

ステップ7 で起動をクリック。
      SSH接続するための、キーペア(mykey.pem)はダウンロードしておきましょう。

image.png

この間で、mykey.pemの認証をしましょう。

ダウンロードフォルダに移動して下記のコマンド実行しましょう
そうしたら認証が変わります。
chmod 400 mykey.pem
詳しくはawsの認証ページに書いてあります。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-key-pairs.html

しばらくしたらインスタンスがrunnningになるので、EC2ダッシュボード⇒実行中のインスタンスをクリック⇒作成したインスタンスIDをクリック
右上にある接続をクリック
image.png

SSH接続する場合は下にあるところ(コピーされたコマンドをクリック)したらいいです。

image.png

ターミナルを開いて
mykey.pemのあるディレクトリに移動(cd)

先程AWSでコピーした
ssh ~~~
をターミナルに貼り付け。Enter

そしたら先程作成したEC2に入れます。
その後、
yesと入力
ここまででEC2の起動は終わりです。

EC2の中で、Docker,Git,Docker-composeをインストール

ubuntu@ip-10-0-0-205:~$ sudo su
root@ip-10-0-0-205:/home/ubuntu# 

以下root内での作業

じゃんじゃん下のコマンド打っていきましょう
apt-getのアップデートして,gitをインストール
apt-get update
apt-get install git

dockerとdocker-composeをインストール

$ apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ apt-key fingerprint 0EBFCD88

$ add-apt-repository \
                      "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
                      $(lsb_release -cs) \
                      stable"
$ apt-get install docker-ce docker-ce-cli containerd.io

$ apt install docker-compose
exit

でrootから抜け出す

Laradocをgit cloneする。

git clone https://github.com/Laradock/laradock.git

lsでgit cloneされているか確認しましょう。
image.png

$ cd laradockとして
$ cp env-example .env
とりあえず、PHP=7.3
mysqlで実行することにしてみましょう。
実行。

docker-compose up -d nginx mysql

してnginx mysqlのdockerを起動。
10分ほどまちます。Youtubeでも見ながらゆっくりしましょう。

workspaceコンテナに入ります。

dockerのインストールが終了したら、下記コマンド実行して、
workspaceで作業しましょう。

docker-compose exec --user=laradock workspace bash

でworkspace内で、docker-compose 起動します。

そうすると、var/www$に移動します。
laradockフォルダがあるので、

$ cd laradoock
として、.envファイルを編集します。
$ cp env-example .env
しましょう

下記を.envに追加
vi .env実行して下記追加。

DB_HOST=mysql
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

LaravelでWebアプリの作成

今回はサンプル用のアプリ名をSampleProjectとします。

laradock@e00afef1d36e:/var/www$ composer create-project laravel/laravel SampleProject "5.5.*"

そしたらSampleProjectができます。

var/www --- laradock
         |_ SampleProject

という構成になります。

SampleProjectに入って.envを編集。

DB_CONNECTION=mysql 
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

としてDB_HOSTをmysqlにします。

そして,Laradock内の.envを下記の通り編集して、起動するlaravelアプリを選択。
ここを記述しないと認識されないんだと思います。

APP_CODE_PATH_HOST=../SampleProject

とりあえずの設定は終わりました。

laradocのファルダに移動して、docker-compose再起動して、変更を読み込み。


docker-compose up -d nginx mysql phpmyadmin

あと少しでラストです。

Laravelの初期画面表示

EC2のパブリックIpv4 DNSをコピーして、
ブラウザのURLバーに貼り付け。(URLはElastic IPで固定にしてもいいですが、今回はしません。)

image.png

いけますね。疑い深いんで、ローカルじゃなくグローバルになってるか確認するために、iphoneで動くか確認してもいけてます。

image.png

EC2再起動したときの注意事項

1)EC2再起動するたびにdocker-compose再起動しましょう。
EC2停止すると再起動するらしいとのことなので、
EC2起動のたびdocker-compose立ち上げないといけないので、
下記のコマンド実行します。

sudo su
cd laradock/
docker-compose up -d nginx mysql phpmyadmin

2)EC2停止したときは、Ipアドレス変わっているので、
 Elastic IPで固定化しましょう。

3) Laradockのファイル変更したら
docker-compose up -d mysql phpmyadmin
しましょう。
編集するファイルはもちろんSampleProject。

所感とこれから

EC2使って立ち上げるのに、すごい便利だなと思いましたし、デプロイできると嬉しいですね、
ただ、EC2再起動したあとのDocker-composeの立ち上げとか、
EC2立ち上げたときに、gitとかDocker/Docker-compose入れるの手間だなと思っちゃいました。

これからは発展的な内容としてEC2の冗長化とECS(Fargate),CI/CDも勉強しようとおもいます。

なにか、みなさまの参考になれば幸いです。

以上

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2