Help us understand the problem. What is going on with this article?

初学者がDocker on Railsで開発したアプリをAWS EC2にデプロイする際につまづいたこと

はじめに

私はプログラミングを半年弱ほど独学している者です。
今回、Rails + Dockerで開発したアプリケーションをAWS EC2にデプロイするところでつまづき、まる一週間を浪費してしまいました。
この記事が、同じようにつまづいている方の一助となれれば幸いです。

また、今回作成したアプリケーションのソースコードは以下のURLからご覧いただけますので、良いコードではございませんが参考にできそうな部分があれば、参考にしてみてください。

https://github.com/aiirononeko/GoodCoffeeByGoodBarista

①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での自動デプロイを実現したいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away