はじめに
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をインストール
sudo yum -y install mysql
artisan
コマンドが使えるディレクトリに移動してmigrate
php artisan migrate
すると以下のエラーが...
SQLSTATE[HY000] [2002] Connection timed out
DBに接続をしようとしたけどできてない様子。
.env
を確認して何回か修正したが、改善せず。
.envファイル | 入れる値 |
---|---|
DB_HOST | エンドポイント |
DB_USERNAME | マスターユーザー名 |
DB_PASSWORD | マスターパスワード |
解決
AWSのセキュリティグループ
→インバウンドルール
を確認すると、Type
がMySQLではなかったのが原因でした。
→MySQL
に変更することで無事migrateすることができました。
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
でエラー
Class Faker\Factory
Faker\Factory
のクラスがないよと言われる。
解決
Heroku
で同じようなことが起こっている人たちがいましたが、AWSでも同じようにすると解決できました。
結論から言うと、以下のようにfakerphp/faker
をrequire-dev
からrequire
へ移動しました。
"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
とすることで、「開発環境のみ必要で本番環境で必要ないパッケージはインストールしない」とできます。
具体的には、phpunit
やdebugbar
などは本番環境には必要ないためインストールされないようにしています。
「開発環境のみ」というのはrequire-dev
の部分です。
上記のコマンドを実行するとrequire-dev
で書かれているものはインストールされません。
修正後、gitにpushし本番環境でもcomposerをアップデートして反映させます。
composer update
この後にもう一度php artisan db:seed
をすると無事実行されました。
php artisan db:seed
Database seeding completed successfully.
参考
このエラーを解決するにあたって以下のサイトを参考にさせて頂きました。
おわり
この他にも、ディレクトリの記述ミスで実行できなかったのもあり、これを機にディレクトリをしっかり意識するようになりました。
初歩的なミスばかりですが、おかげでデプロイの概要が少しずつ理解できてきたかなと感じます!
このまま自動デプロイ目指してやっていきます!
参考