美少女ゲームのブランド、ゲーム情報、出演声優、声優情報などを管理するためのデータベースです
Master、Slave構成のRDS(PostgreSQL)内のデータベースのバージョン管理をRailsの Active Record マイグレーション
を使用して管理します
データベースの 設計
や バージョン管理
を行うためのリポジトリでデータの挿入などは行いません(別のプロジェクトで行います)
Rails ERD を使用してデータベースのER図を出力しています
使用しているローカル・本番環境について説明します
ローカルの環境について説明します
ソフトウェアスタック | バージョン |
---|---|
Rails | 6.0.2.1以上 |
Ruby | 2.6.5 |
PostgreSQL | 11 |
Bundler | 2.1.2 |
Dockerを使用して開発を行います
PCにDockerがインストールされていれば問題ないです
本番の環境について説明します
本番環境はAWSにて構築したRDSになります
ソフトウェアスタック | バージョン |
---|---|
RDS(PostgreSQL) | 11 |
踏み台サーバー(EC2) | Amazon Linux 2 |
GitHubのmasterブランチが更新された時、CircleCIで静的コード解析、テストが通ったらポートフォワーディングを使用してRDSに接続しRailsのマイグレーションを実行することでPostgreSQLのデータベースを更新します
masterブランチ以外の更新時はマイグレーションは実行されません
環境構築のために AWS
、CircleCI
、Slack
の環境構築が必要です
すごく長いので別リンクにて確認してください
AWSではVPC、踏み台サーバー、RDSの構築を行います
AWSの環境構築にはUdemy の 手を動かしながら2週間で学ぶ AWS 基本から応用まで
の教材をすごく参考にさせて頂きました
現在は受講出来ないようなので作者のブログ記事の AWS学習の0→1をサポートする講座「手を動かしながら2週間で学ぶ AWS 基本から応用まで」をUdemyでリリースしました - log4ketancho を確認してください
現在はコンソール画面で作成せずに Terraform 化されているため、基本的には Terraform で作成することをオススメします!
Terraform 化されたため、 Terraform の tfstate ファイルを管理させる S3 を作成します
tfstate を管理させるバケットとバケット作成コマンドを実行する profile 名を指定して実行させます
$ bash bin/init_s3.sh
tfstateを格納するS3バケット名を入力して下さい: eroge-release-db
S3バケット作成で使用するprofile名を入力してください: terraform
eroge-release-dbの作成を行います
eroge-release-dbにバージョンニングを有効化に成功しました
eroge-release-dbにサーバー側の暗号化を有効化に成功しました
eroge-release-dbのアクセスの変更に成功しました
CircleCIでは静的コード解析、テストを行い、成功した場合にRDSへポートフォワーディングで接続してマイグレーションを実行します
またマイグレーションを実行するかどうか・マイグレーションの実行結果をSlackに通知する仕組みもあります
Slackではマイグレーションを実行するかどうかの承認通知、マイグレーション完了通知を行います
マイグレーション成功時 | マイグレーション失敗時 |
---|---|
ローカルで開発を行う方法を説明します
下記のコマンドを実行すれば開発を行うことができます
$ docker-compose run --rm runner
実行後、下記のような状態になれば大丈夫です
︙
︙
︙
Railsガイド などの以下のドキュメントを参考にマイグレーションファイルを作成していき開発を行っていきます
SchemaSpy でファイルを出力し、localhost:8080 にアクセスすることでデータベースの定義を見ることができます
$ docker-compose run --rm schemaspy && docker-compose up schemaspy_web
./terraform/components のフォルダにある程度の粒度で分割されています
基本的には以下の単位で開発を行います
- terraform/components/network
- terraform/components/bastion
- terraform/components/eroge-release
まずは network のフォルダに入りそこで terraform apply
してください
bastion, eroge-release は network の component に依存しているため先に network component を先にデプロイしてないと開発ができません
基本的には以下のコマンド群を使用して開発します
# 作成するインフラを確認する
$ terraform plan -parallelism=30
# 実際にインフラを適用する
$ terraform apply -parallelism=30
コンテナ、イメージ、ボリューム、ネットワークをすべて一括で削除します
$ docker-compose down --rmi all --volumes
参考記事:《滅びの呪文》Docker Composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括完全消去する便利コマンド - Qiita