#経緯
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の作成
1個のパブリックサブネットを持つVPCを作成します。
プライベートなサブネットを作りたいときは下のパブリックとプライベートサブネットを持つVPCを作ります。
このとき、IPv4 CIDRブロックは10.0.0.0/16
パブリックサブネットのIpv4 10.0.0.0/24にしておきましょう。
EC2インスタンスの作成
Ubuntu 18.04を選択
ステップ2でt2.microを選択
ステップ3 インスタンスの詳細の設定では先程作成したVPCを選択.自動割当パブリックIPも無効から有効にしましょう。
ステップ6 セキュリティグループ設定ではHTTPの80ポートを使用するので、ルールの追加で追加する。
ステップ7 で起動をクリック。
SSH接続するための、キーペア(mykey.pem)はダウンロードしておきましょう。
この間で、mykey.pemの認証をしましょう。
ダウンロードフォルダに移動して下記のコマンド実行しましょう
そうしたら認証が変わります。
chmod 400 mykey.pem
詳しくはawsの認証ページに書いてあります。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-key-pairs.html
しばらくしたらインスタンスがrunnningになるので、EC2ダッシュボード⇒実行中のインスタンスをクリック⇒作成したインスタンスIDをクリック
右上にある接続をクリック
SSH接続する場合は下にあるところ(コピーされたコマンドをクリック)したらいいです。
ターミナルを開いて
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
$ 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で固定にしてもいいですが、今回はしません。)
いけますね。疑い深いんで、ローカルじゃなくグローバルになってるか確認するために、iphoneで動くか確認してもいけてます。
#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で固定化しましょう。
- Laradockのファイル変更したら
docker-compose up -d mysql phpmyadmin
しましょう。
編集するファイルはもちろんSampleProject。
#所感とこれから
EC2使って立ち上げるのに、すごい便利だなと思いましたし、デプロイできると嬉しいですね、
ただ、EC2再起動したあとのDocker-composeの立ち上げとか、
EC2立ち上げたときに、gitとかDocker/Docker-compose入れるの手間だなと思っちゃいました。
これからは発展的な内容としてEC2の冗長化とECS(Fargate),CI/CDも勉強しようとおもいます。
なにか、みなさまの参考になれば幸いです。
以上