EC2上にrailsアプリをデプロイするまで～RDSで躓いた所を整理

https://zenn.dev/naoki_mochizuki/books/1471ce20222227

を参考にして、EC2上にRailsアプリを起動しようとしている。

構築手順としては下記になる。

周辺環境の構築
VPC
サブネット
インターネットゲートウェイ
ルートテーブル
セキュリティグループ

インスタンスの作成
RDS
EC2
EIP

EC2内の環境整備
ssh接続
Linuxユーザの作成
パッケージのインストール
Rubyのインストール
nodejsのインストール
yarnのインストール

GitHubからのデプロイ
アプリ公開用のディレクトリ作成
GitHubとの連携
アプリのクローン
bundle install
yarn install

webサーバー、アプリケーションサーバーの設定
webサーバーの導入：nginx
アプリケーションサーバーの導入：puma
DBの接続
環境の設定
ブラウザの確認

紆余曲折しながら、アプリケーションサーバーの起動まではこぎつけたが、DBの接続のところで迷子になっているため、とりあえず今日やってことをそのまま記録に残す。

上記のブログではの意味が分からないためリタイアして、

https://qiita.com/iwaseasahi/items/b28f8b91c4638e2c57fd


https://blog.serverworks.co.jp/ec2-to-private-rds#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E4%BD%9C%E6%88%90


この二つの記事を参照した。

インスタンス自体は作成し終わっていたため、セキュリティグループの設定をする。

サーバーで、mysql -h エンドポイント -P 3306 -u root -pを打つが、

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot bed: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared o             file: No such file or directoryが出てくる。

/usr/lib64/mysql/plugin/caching_sha2_password.soのファイルだかディレクトリだかを見ようとして上手くいかなくなる（そもそも見てどうするかはわかってない）

mysql -u admin -p -h エンドポイント　を打つとなぜかmysqlに入れた。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697069/4ebb142f-85b0-fa7f-5a4d-41f6a2d0cd43.png)

sudo service mysqld startでMySQLを起動しようとするが、Redirecting to /bin/systemctl start mysqld.service.Failed to start mysqld.service: Unit not found.が出てくる。

systemctl status mysqld.serviceで確認しようにも、Unit mysqld.service could not be found.となる。泣

もうやけくそでbundle exec rake db:create RAILS_ENV=productionを打って、RDS内にDBを作ったれと思って叩くと、

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Couldn't create 'sample_app_production' database. Please check your configuration.
rake aborted!
ActiveRecord::ConnectionNotEstablished: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
/home/ec2-user/.rbenv/versions/2.6.3/bin/bundle:23:in `load'
/home/ec2-user/.rbenv/versions/2.6.3/bin/bundle:23:in `<main>'
 
Caused by:
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
/home/ec2-user/.rbenv/versions/2.6.3/bin/bundle:23:in `load'
/home/ec2-user/.rbenv/versions/2.6.3/bin/bundle:23:in `<main>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

が出てきて、どーやら失敗らしい。まぁわかってたけど。
さっきMySQLは入れたっぽいけど本当はローカルにしっかり入ってないんじゃね？ってことで、過去の自分のメモを見ると、どーやらmariadbが邪魔してMySQLはうまく入れないから、まずはmariadbを削除してからMySQLはインストールしたほうが良いみたいだ。

https://fluid-27.hatenablog.com/entry/2021/06/24/001546


この記事通りやってもなぜかmariadbが削除しきれないから、


https://mylops.jp/activity/blog/00105.html



この記事通りやると上手くいった。ただ途中で、sudo rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm   を打って、yumのリポジトリを追加してMySQLをインストールする準備をするのだが、そこでGPGが原因でうまくいかないことがあった。

その際に


https://blog.katsubemakito.net/mysql/mysql-update-error-gpg


この記事を参考にするとエラーは解決できる。

その後に初期パスワードを変更するのだが、MySQLのパスワードポリシーが厳しすぎるため、初期パスワードを一文字変えたりした。

MySQLの起動コマンド：sudo systemctl start mysqld.service
自動起動コマンド（試してない）：sudo systemctl enable mysqld.service
MySQLの初期パスワードの確認コマンド：sudo cat /var/log/mysqld.log | grep password
パスワード変更コマンド（MySQL内で）：set password for root@localhost=password('新規パスワード');
MySQLログインコマンド：mysql -u root -p

てことでしっかりとローカル？にMySQLはインストールできたので、満を持して、
 bundle exec rake db:create RAILS_ENV=productionを叩くと、

LoadError: libmysqlclient.so.18: cannot open shared object file: No such file or directory - /home/ec2-user/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.4/lib/mysql2/mysql2.so
/var/www/sample_app/config/application.rb:20:in `<top (required)>'
/var/www/sample_app/Rakefile:4:in `require_relative'
/var/www/sample_app/Rakefile:4:in `<top (required)>'
/home/ec2-user/.rbenv/versions/2.6.3/bin/bundle:23:in `load'
/home/ec2-user/.rbenv/versions/2.6.3/bin/bundle:23:in `<main>'
(See full trace by running task with --trace)

が出てきた（殺してくれ）

脳死でエラーメッセージをGoogle先生に投げるとジャストヒットしたのがこの記事


https://qiita.com/naota7118/items/69a73e26374e24bbc538



これ通りやって、bundle exec rake db:create RAILS_ENV=productionを叩けば…！

Access denied for user 'ec2-user'@'localhost' (using password: NO)
Couldn't create 'raisetech_live8_sample_app_production' database. Please check your configuration.
rake aborted!
ActiveRecord::ConnectionNotEstablished: Access denied for user 'ec2-user'@'localhost' (using password: NO)
/home/ec2-user/.rbenv/versions/2.6.3/bin/bundle:23:in `load'
/home/ec2-user/.rbenv/versions/2.6.3/bin/bundle:23:in `<main>'
 
Caused by:
Mysql2::Error::ConnectionError: Access denied for user 'ec2-user'@'localhost' (using password: NO)
/home/ec2-user/.rbenv/versions/2.6.3/bin/bundle:23:in `load'
/home/ec2-user/.rbenv/versions/2.6.3/bin/bundle:23:in `<main>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

が出てきた（もう今日は終わりですお疲れ様でした。）

ただ、これまでだと嫌になって調べたサイトもブログも消してメモも取らずに明日の自分に任せてたところを今回は全部さかのぼって記録を取ったのは成長した。
というより、そうしなきゃまじで明日詰む。

上記のエラーは、EC2の中のMySQLでユーザー名とパスワード、ホスト名を作成して、権限を与えた後に、ローカルのdatabase.ymlの記述を書き換えて、push,pullすることで解決した（3時間くらいかかった）


https://qiita.com/ryouya3948/items/ba3012ba88d9ea8fd43d


https://hiyowa-na-engineer.com/rds-check-password/

http://www.ic.daito.ac.jp/~ikeuchi/webdb/mysql_7.html

改めて、bundle exec rake db:create RAILS_ENV=productionを叩くと、無事railsのDBがRDS内に作成された！！！その後のbundle exec rake db:migrate RAILS_ENV=productionも無事完了。RDSの設定は終わり。