AWSのEC2へのデプロイをしたいと思い備忘録のために手順を記録します。
初学者の為、ご指摘等ありましたらご連絡いただければ幸いです。
前回の記事はこちら
AWSのEC2へのデプロイ①(EC2インスタンス作成からログインまで)
前回の内容は言語関係ないのですが今回から必要なパッケージが言語によって異なるのでご注意ください。
はじめに
私自身この手順で無事にデプロイができましたが、途中でエラーが出たことによりいろいろな記事を参考にさせて頂きました。
この場を借りて御礼申し上げます。
そのため、私に知識がないばかりに私の環境に必要のない操作もあるかもしれません。
初学者のためご承知おきください。
お気づきの点ございましたらご連絡いただければとても喜びます。
環境
Version | |
---|---|
PHP | 7.4.14 |
Laravel | 8.24.0 |
mysql | 8.0.23 |
docker | 20.10.2 |
docker-compose | 1.27.4 |
EC2ではAmazon Linux 2
を利用しています。
前提
- AWSのアカウントを作成済みである
- EC2のインスタンス作成済みでsshにログインできる
EC2インスタンスに接続
1.AWSのEC2の画面で下記画像のようにインスタンス
から接続
を押下します。
2.下記画像のようにSSHクライアント
を押下後、一番下の文字列をコピーします。
3.コピーしたssh -i ~
をターミナルで入力すると
Are you sure you want to continue connecting (yes/no/[fingerprint])?
と出るのでyes
と入力します。
4.下記のような内容が出力されていればOKです。
[ec2-user@ip-×××-××-××-××× ~]$
gitのインストール
コマンドは全てEC2インスタンス内で行います。
1.下記コマンドでyumをupdateします。
$ sudo yum update -y
2.下記コマンドでgitをインストールします。
$ sudo yum install git
3.下記コマンドご自身のユーザー名とパスワードを設定します。
$ git config --global user.name [ユーザー名]
$ git config --global user.email [メールアドレス]
4.下記コマンドで確認します。
$ git config --list | grep user
5.下記のように出ていればOKです。
user.name=[ユーザー名]
user.email=[メールアドレス]
Dockerのインストール
コマンドは全てEC2インスタンス内で行います。
Dockerのインストールは公式のAmazonECSにおけるDockerの基本で確認しました。
1.下記コマンドで最新のDocker Engineパッケージ
をインストールします(Amazon Linux 2用のコマンドです。)
sudo amazon-linux-extras install docker
2.下記コマンドでDockerサービスを開始します。
sudo service docker start
3.下記コマンドでec2-user
をdockerグループ
に追加するとsudoコマンド
を使用せずにDockerコマンド
を実行できます。
sudo usermod -a -G docker ec2-user
4.一旦EC2インスタンスからログアウト(exit)して再ログインします。
※これをしなくて私はエラーになりましたので大事です。
5.下記コマンドでec2-user
がsudoコマンド
を使用せずにDockerコマンド
を実行できることを確認します。
docker info
下記のようなメッセージが出ればOKです。
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
//省略
docker-composeのインストール
参考記事:M1 Mac + Laravel + Docker + AWS でポートフォリオを作るまで[初心者][未経験]
コマンドは全てEC2インスタンス内で行います。
1.下記コマンドでsu
に入ります。
sudo -i
2.下記コマンドでcomposeをインストールします。
curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
3.下記コマンドで実行権限を付与します。
chmod +x /usr/local/bin/docker-compose
4.exitをして抜けます。
exit
5.下記コマンドでdocker-composeがインストールされているか確認します。
docker-compose --version
下記のようにバージョンが出てくればOKです。
docker-compose version 1.27.4, build 40524192
参考にした先ほどの記事でdocker-compose.yml
のバージョンを書き換えました。
version: "3.3" ←変更
services:
app:
build: ./infra/php
volumes:
- ./backend:/work
//省略
EC2インスタンス内でDockerを起動
コマンドは全てEC2インスタンス内で行います。
1.下記コマンドでgitからcloneします。
git clone [githubのURL]
2.下記コマンドでフォルダがあるか確認します。
ls
3.下記コマンドでディレクトリを移動します。
cd [ディレクトリ名]
4.下記コマンドでdockerコンテナを立ち上げます。
少し長いメッセージが出ます。
docker-compose up -d
下記のようなメッセージが出ればOKです。
Creating ×××_app_1 ... done
Creating ×××_web_1 ... done
Creating ×××_db_1 ... done
Creating phpmyadmin ... done
5.下記コマンドでステータスを確認します。
docker-compose ps
State
が全てup
になっていればOKです。
PHPのインストール
参考記事:AWS EC2 AmazonLinux2 PHPをインストールする
コマンドは全てEC2インスタンス内で行います。
1.下記コマンドでインストールリポジトリを追加します。
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
2.下記コマンドで既存のPHPパッケージを削除します。(削除するものがなくても問題ないです)
sudo yum remove php
3.下記コマンドでPHPのパッケージをインストールします。
sudo yum install --enablerepo=remi,remi-php74 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt
4.下記コマンドでバージョンを指定してインストールします。
途中で[y/d/N]
とインストールしてもいいかの選択が出るのでy
を押しEnterで進めます。
sudo amazon-linux-extras install php7.4
5.下記コマンドでその他の必要なパッケージをインストールします。
こちらも途中で[y/d/N]
とインストールしてもいいかの選択が出るのでy
を押しEnterで進めます。
sudo yum install --enablerepo=remi,amzn2extra-php7.4 php-xml php-mbstring
6.下記コマンドでyumにてインストールされたphpと名前がつくパッケージの一覧を表示し確認します。
yum list installed | grep php
下記のように表示されればOKです。
php-cli.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-common.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-fpm.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-json.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-mbstring.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-mysqlnd.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-pdo.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-xml.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
7.無事に成功すれば下記コマンドでバージョンが表示されます。
php --version
MariaDBのインストール
コマンドは全てEC2インスタンス内で行います。
1.下記コマンドでMariaDBのインストールをします。
sudo yum -y install mysql56-server mysql56-devel mysql56 mariadb-server mysql-devel
2.下記コマンドでデータベースを起動します。
sudo systemctl start mariadb
下記コマンドで起動できたかを確認します。
sudo systemctl status mariadb
緑の文字でactive (running)
と出ていればOKです。
3.データベースのrootパスワードを設定します。
まずは下記のコマンドを入力します。
sudo /usr/bin/mysql_secure_installation
次からどんどん質問が出てくるので答えていきます。
Enter current password for root (enter for none):
→Enterキーを押す。
Set root password? [Y/n]
→「Y」を入力してEnterキーを押す。
New password:
→ご自身で決めたパスワードを入力する。(画面には表示されないけど入力できています)
Re-enter new password:
→もう1度ご自身で決めたパスワードを入力する。
Remove anonymous users? [Y/n]
→「Y」を入力してEnterキーを押す。
Disallow root login remotely? [Y/n]
→「Y」を入力してEnterキーを押す。
Remove test database and access to it? [Y/n]
→「Y」を入力してEnterキーを押す。
Reload privilege tables now? [Y/n]
→「Y」を入力してEnterキーを押す。
4.データベースに接続を確認します。
下記コマンドでデータベースに接続できるか確認します。
mysql -u root -p
パスワードを求められるので入力しEnterキーを押します。
MariaDB [(none)]>
上記のように表示されれば接続できています。
抜け出したいときはexit
で抜け出せます。
Laravel環境設定
参考記事:AWSにEC2上にdockerを使用したlaravelをデプロイ④(gitクローン〜デプロイ、マイグレーション)
コマンドは全てEC2インスタンス内で行います。
1.下記コマンドでコンテナ内に入ります。
docker-compose exec app bash
2.下記コマンドで.envファイルを作成します。
.envファイルはgitリポジトリにpushされないためです。
cp .env.example .env
3.下記コマンドでcomposerをインストールします。
composer install
4.下記コマンドでAPP_KEYを発行します。
php artisan key:generate
5.下記コマンドで権限を変更します。
chmod 777 storage/logs vendor
chmod 777 storage/framework/views
chmod 777 storage/framework/sessions
6.画像投稿がある場合は下記コマンドも必要みたいです。
php artisan storage:link
chown -R www-data:root .
7.下記コマンドでマイグレーションを実行します。
php artisan migrate
php aritsan db:seed
以上で無事にデプロイ ができました。
ただ、現在S3への画像の保存ができない状態なので解決出来次第修正致します。