Dev-doc: Quden Backend
これは何?
toruca のバックエンドアプリケーション(NestJS)に関するドキュメントです。
全体像は Quden アーキテクチャ を参照してください。
デプロイフロー
- default ブランチは
development- 開発は feature ブランチを切って、PR →
developmentにマージしていく
- 開発は feature ブランチを切って、PR →
- 定期的に
mainブランチにマージするmainにマージしたら AWS CoduBuild でビルド・ECS にデプロイされる
ローカル開発の始め方
環境変数(重要)
ルートディレクトリに .env.development.local を作成して、シークレットを格納する(bitwarden で管理されています)。
AWS_ACCESS_KEY_ID=<AWS_ACCESS_KEY_ID>
AWS_SECRET_ACCESS_KEY=<AWS_SECRET_ACCESS_KEY>
AWS_COGNITO_USER_POOL_ID=<AWS_COGNITO_USER_POOL_ID>
AWS_COGNITO_APP_CLIENT_ID=<AWS_COGNITO_APP_CLIENT_ID>
AWS_COGNITO_APP_CLIENT_SECRET=<AWS_COGNITO_APP_CLIENT_SECRET>
SENDGRID_API_KEY=<SENDGRID_API_KEY>
AWS_S3_BUCKET_FOR_VIDEO_RECORD=<AWS_S3_BUCKET_FOR_VIDEO_RECORD>
AWS_LAMBDA_CONCAT_ARN=<AWS_LAMBDA_CONCAT_ARN>
AWS_CLOUDFRONT_KEY_PAIR_ID=<AWS_CLOUDFRONT_KEY_PAIR_ID>
AWS_CLOUDFRONT_PRIVATE_KEY_NAME=<AWS_CLOUDFRONT_PRIVATE_KEY_NAME>
AWS_CLOUDFRONT_DOMAIN=<AWS_CLOUDFRONT_DOMAIN>
COOKIE_DOMAIN=<COOKIE_DOMAIN>サーバーの起動
$ yarn dev:docker:up
# alias
$ yarn dev
# シードデータの流し込み(詳細は後述)サーバーの HTTPS 化
フロントエンドのサーバーを HTTPS 化して立ち上げている場合には、バックエンド側も HTTPS として立ち上げる必要があります。
詳しい手順は フロントエンド概要 にまとめているので、参考にしてください。
すべての設定、準備が完了したら、以下のコマンドから HTTPS でサーバーを立ち上げることができます。
# バックエンド
$ yarn dev:docker:up:httpsシードデータの流し込み
まだデータは不十分なので、随時コードを書き足していく。
流し込むデータ自体も日々更新されているので、 ./scripts/seed-db.ts の更新履歴を見て、随時削除→シードデータの流し込みを行ってください。
# データを全削除して、シードデータを流す
$ yarn dev:db:seed:init
# データの削除
$ yarn dev:db:seed:clear
# データを削除して、シードデータを改めて流す(= clear + init)
$ yarn dev:db:seed:resetyarn add で新たにライブラリを追加した場合
yarn dev:docker:build_up でイメージを再ビルドしてください!
その際、コンテナが残っていると変更が反映されない可能性があるので、docker CLI などで手作業で remove するか、 yarn dev:docker:down コマンドでコンテナを消し去ってから、再ビルドを実行してください。
Why:
ローカル開発環境は ./dockerfiles/app/Dockerfile.local にイメージを定義して作っており、ライブラリはローカルの node_modules ではなく、コンテナ内にインストールされた node_modules を参照するようにしているためです。そのため、 yarn add しただけでは依存関係が解決できず、エラーが出る可能性があります!
ちなみに、古い image が残って PC のストレージを食うので、
docker rmi <IMAGE_ID>docker image prune
などのコマンドで定期的にお掃除するのオススメ!
amplitudeにeventを飛ばしたいとき
analytics service に以下の変更を加える
const opts: AnalyticsModuleOptions = {
enable: true
};
this.analytics = new AnalyticsModule(
this.configService.get<string>("SEGMENT_WRITE_KEY") ||
"<.env.development.local の SEGMENT_WRITE_KEY>",
opts,
);コンテナの起動時にエラーが起こってしまう場合(M1 macOS)
yarn installの途中で止まってしまう場合、dockerfiles/app/Dockerfile.localの先頭にある
FROM node:lts-alpineを
FROM --platform=linux/amd64 node:lts-alpineに書き換えてみてください。
ローカルでDBを確認する
ここではMongoDB Compass(以下compass)を紹介します。
compassをインストール
- 公式からなら https://www.mongodb.com/try/download/compass
- brewなら
brew install --cask mongodb-compass
立ち上げる
docker-composeに記載されているポートを入力してください
jsonmongodb://localhost:27018/このような画面になっていたら疎通成功です
トラブルシューティング
node-canvasのinstallに失敗する
yarn install時にエラーが発生することがあります。
これは、node-canvasがローカルマシン上でコンパイルする必要があり、そのコンパイルのために必要なモジュールがないと言われています。
そのため必要なモジュールをインストールし、再度トライする必要があります。
brewの場合
brew install pkg-config cairo pango libpng jpeg giflib librsvg pixmanサインインできない
エラーログを見て状況を確認しましょうと言うのが前提ですが、怪しいのは以下あたりです
- backend & db間の通信
- dbにseed dataを流し込んでないなどで、ユーザーデータが存在しない場合など
- backend & cognito間の通信
- envファイルが適切に設定されていないなど
その他、ありうること
- branchの内容が最新でない、最新の変更をpullする
- dockerのキャッシュ周り、imageやcontainerを作り直してみる
- ブラウザのキャッシュ周り、シークレットモードで試してみる