LoginSignup
4
3

More than 1 year has passed since last update.

【AWS】Laravel + Docker + RDS(MySQL) でデプロイした時のDB関連のエラーとその解決

Last updated at Posted at 2021-07-25

はじめに

AWS(EC2)にデプロイする際、DB関連のエラーで躓いたため記録として残します。
DB関連にフォーカスしているので、それ以外のインストールの手順は省いています。

前提

・今からmigrateします
・EC2インスタンス作成済み
・sshログインできる

条件

macOS: "11.2.3 Big Sur"

php artisan -V
# > Laravel Framework 6.20.30

php -v
# > PHP 8.0.8 

nginx -v
# > nginx version: nginx/1.12.2

mysql -h エンドポイント -u マスターユーザー名 -p データベース名
Enter password:
# > Server version: 8.0.25

git --version
# > git version 2.32.0

1. php artisan migrateでエラー

MySQLをインストール

ssh
sudo yum -y install mysql

artisanコマンドが使えるディレクトリに移動してmigrate

php artisan migrate

すると以下のエラーが...
スクリーンショット 2021-07-24 10.46.10.png
SQLSTATE[HY000] [2002] Connection timed out

DBに接続をしようとしたけどできてない様子。
.envを確認して何回か修正したが、改善せず。

.envファイル 入れる値
DB_HOST エンドポイント
DB_USERNAME マスターユーザー名
DB_PASSWORD マスターパスワード

解決

AWSのセキュリティグループインバウンドルールを確認すると、TypeがMySQLではなかったのが原因でした。
MySQLに変更することで無事migrateすることができました。
スクリーンショット 2021-07-25 11.01.12.png

php artisan migrate

# migrate成功
Migration table created successfully.

念の為テーブル確認

ターミナル
mysql -h エンドポイント -u マスターユーザー名 -p データベースの指定

-p の後は空白を開ける。空白を開けずに入力するとパスワードとなってしまいます。
以下が表示されれば接続成功。

ターミナル
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 174
Server version: 8.0.25 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

もし、-pを指定せずに接続しても以下のように指定することで見ることができます。

show databases;とすることで、全てのdatabaseが表示。

ターミナル
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| lantern   ← このdetabaseを確認したい
| mysql              |
| performance_schema |
| sys                |
+--------------------+

lanternというdetabaseを見たかったらuseで指定する。

ターミナル
MySQL [(none)]> use lantern

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [lantern]>  ← lanternに変更された

参考

このエラーを解決するにあたって以下のサイトを参考にさせて頂きました。

2. php artisan db:seedでエラー

スクリーンショット 2021-07-24 12.17.10.png
Class Faker\Factory
Faker\Factoryのクラスがないよと言われる。

解決

Herokuで同じようなことが起こっている人たちがいましたが、AWSでも同じようにすると解決できました。
結論から言うと、以下のようにfakerphp/fakerrequire-devからrequireへ移動しました。

composer.json
    "require": {
        "php": "^7.2.5|^8.0",
        "doctrine/dbal": "^3.1",
        "fideloper/proxy": "^4.4",
        "intervention/image": "2.5.1",
        "laravel/framework": "^6.20.26",
        "laravel/tinker": "^2.5",
+       "fakerphp/faker": "^1.9.1"
    },
    "require-dev": {
        "barryvdh/laravel-debugbar": "^3.6",
        "facade/ignition": "^1.16.15",
        "laravel/ui": "^1.0",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^3.0",
        "phpunit/phpunit": "^8.5.8|^9.3.3"
-       "fakerphp/faker": "^1.9.1"
    },

デプロイの際、パッケージのインストールで以下のように記述しました。

composer install --no-dev --prefer-dist

--no-devとすることで、「開発環境のみ必要で本番環境で必要ないパッケージはインストールしない」とできます。
具体的には、phpunitdebugbarなどは本番環境には必要ないためインストールされないようにしています。

開発環境のみ」というのはrequire-devの部分です。
上記のコマンドを実行するとrequire-devで書かれているものはインストールされません。

修正後、gitにpushし本番環境でもcomposerをアップデートして反映させます。

composer update

この後にもう一度php artisan db:seedをすると無事実行されました。

php artisan db:seed

Database seeding completed successfully.

参考

このエラーを解決するにあたって以下のサイトを参考にさせて頂きました。

おわり

この他にも、ディレクトリの記述ミスで実行できなかったのもあり、これを機にディレクトリをしっかり意識するようになりました。
初歩的なミスばかりですが、おかげでデプロイの概要が少しずつ理解できてきたかなと感じます!

このまま自動デプロイ目指してやっていきます!

参考

4
3
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
4
3