求人情報サイトOZReach
Ruby On Railsで作成した求人情報サイトです。WEBアプリの制作からAWSへのデプロイまで100%独学と自力で制作しました。トップのデザイン以外はB○zreachとは関係なくオリジナルです。
コンセプト
WEBアプリとしては基本機能を実装しつつ、AWS やCircle CI, Docker等のバックエンド側の技術の習得と応用に時間をかけ制作しました。
アクションや権限のことなるユーザーが複数存在するものを作成したかったため、リクルーターと求職者で分かれる求人情報サイトをイメージしました。
アプリの基本機能
- 2種類のユーザの登録とログイン、ログアウトなどのセッション管理
- 記事一覧表示・記事詳細表示
- 記事投稿と記事の編集・削除・画像投稿
- 記事検索・ページネーション
- ユーザーのプロフィール設定
- 募集記事への応募や応募者の管理など
全体構成
WEBサーバーの構成
- AWS EC2インスタンス上にWEBアプリとしてRailsをUnicornで稼働したコンテナ、リバースプロキシとしてNginxを稼働したコンテナをECSのサービスとして配置
- UnicornとNginx間はコンテナのボリュームを共有してソケットファイルを介して通信
- DBはprivate subnetに配置したRDSのMySQLを使用し、投稿画像の保存にはS3を使用
- クレデンシャルはAWSのParameter Storeを利用し、ECSからデプロイ時に環境変数としてコンテナにセットされる
CI/CDの構成
CircleCIを利用し、テストからイメージのビルドデプロイまでを完全自動化しました。以下Workflowを説明します。
① 作成したコードをgitHubにpushする
② CircleCI上でRspecを用いたテストが走る
③ テストがパスし、さらにMasterブランチだった場合DockerイメージをビルドしECRに配信する
④ ,⑤ CircleCIからECSにコマンドが送られ、ECSによりECRで更新されたイメージを使用してサービスの更新が行われる
⑥,⑦ さらにDBのマイグレーションをするため、CircleCIからECSのタスク実行を制御
開発環境
OS: Windows10 pro + WSL2(Ubuntu 18.04)
エディタ・ターミナル:VSCode(Remote) ,Windows Terminal
使用言語: Ruby(2.6.5) + Ruby on Rails(5.2.3)
テスト・静的解析ツール:Rspec + Capybara,Rubocop
Docker
DockerやDocker-Composeを積極的に活用し開発を行いました。
本番環境に使用するイメージにはベースイメージにAlpineを用いて、軽量化を行い500MB以下の容量に抑えることに成功しました。
またローカル環境にどこでもすぐに立ち上げられるようにDocker-Composeを用いて、Nginx + Rails + MySQL +Selenium-Chrome の各コンテナをワンコマンドで立ち上げられるようにしました。