はじめに
私はプログラミングを半年弱ほど独学している者です。
今回、Rails + Dockerで開発したアプリケーションをAWS EC2にデプロイするところでつまづき、まる一週間を浪費してしまいました。
この記事が、同じようにつまづいている方の一助となれれば幸いです。
また、今回作成したアプリケーションのソースコードは以下のURLからご覧いただけますので、良いコードではございませんが参考にできそうな部分があれば、参考にしてみてください。
①production環境で動作する設定にしていなかった
基本中の基本すぎて笑えてきます...笑
いや、笑えません...。
実際production環境で動作するように設定をしておらず、この一週間を溶かしたと言っても過言ではありません。
一番最初にデプロイしたときは、productiond環境で立ち上がってすらおらず、RDSとの連携ができなくてつまづいてました。
Docker on Railsで開発したアプリケーションをproduction環境で立ち上げる方法は以下の記事を参考にさせていただきました。
config/environments/production.rbの設定項目から、docker-compose.ymlの記述方法まで必要なことはこれだけでした。
railsをproductionモードで起動する[Rails 5.2]
②全体の構成が想像もつかなかった
今回私は、EC2とRDSを使用した最もシンプルな形でデプロイをしました。
しかし最初は、全体像が想像できず、最初の一歩を踏み出すのにかなり時間がかかりました。
というのも、「DBコンテナがあるのにDBサーバーであるRDSは必要なのか?」とか、「NginxはEC2に直接インストールするのか、ローカルと同じようにNginxコンテナで動かせばいいのか?」とか、初心者ならではの疑問だらけでした。
この疑問に対して、参考にさせていただいた記事が以下の通りです。
無料!かつ最短?で Ruby on Rails on Docker on AWS のアプリを公開するぞ。
③RDSとの連携がうまく行かなかった
上記のサイト(無料!かつ最短?で Ruby on Rails on Docker on AWS のアプリを公開するぞ。)に沿って進めていく中で、コンテナを起動する項目でつまづきました。
つまづいた内容としては、
docker-compose run web rails db:create
docker-compose run web rails db:migrate
上記のコマンドではRDSとの通信が正常に行われず、ソケット通信でエラーが発生してしまいました。
具体的には、mysql.sockがないよ〜!というエラー内容でした。
こちらのエラーを解消してくれたのがrakeコマンドでした。
上記のコマンドを、
docker-compose run web rake db:create
docker-compose run web rake db:migrate
にするだけでうまいことRDSのMySQLと連携してくれて、無事にデータベースを作成することができたのです。
railsコマンドとrakeコマンドの違いとは
これについては下記の記事に詳しいです。
binって何?railsとrakeって何?(前編)
binって何?railsとrakeって何?(後編)
個人的にはどこかで聞いたことがあったけど、そういえばそうだったなあくらいの知識でした。
でも、今回使用したのがrails5.2だったので、rakeはrailsに統合されてるからrailsでもよかったんじゃ...?と思えてきました。
bin/を付けなかったからでしょうか?
これについては知識が不足しているので、個人的に解決しておくべき課題です。
おわりに
なんとかデプロイできてよかったです。
デプロイできた時には思わず叫びました笑
今後はRoute53を使用した独自ドメインの設定から、HTTPSに対応させたりなんなりしていきたいです。
アプリ自体もまだまだ実装し切れていないところばかりなので、就職活動をしながらガシガシ実装していきます。
とりあえず直近で、circleCIでの自動ビルド&自動テストと、capistoranoでの自動デプロイを実現したいです。