SimpleDetail
📖 2 menit baca

技術スタック — 中央会員管理 & SSO ヒュブ

1. 承認されたスタック

技術 機能
フロントエンド Next.js 16+ (App Router), TypeScript メンバー/管理者用Webサイトとパブリックページ。
UI Tailwind CSS, Base UI, Lucide アクセシブルなデザインシステム。
バックエンド NestJS 11+ (TypeScript) REST API, OAuth2, webhook, およびビジネスルール。
API contract REST /api/v1, Swagger/OpenAPI フロントエンドとバックエンドの間の契約とドキュメント。
データベース PostgreSQL 15+ ACIDをサポートするソースオブトゥルース。
ORM Prisma スキーマ、ミグレーション、およびタイプセーフなクエリ。
キャッシュ/キュー Redis 7+ + BullMQ キュー、リトライ、スケジュール、およびレート制限のサポート。
認証 Passport, JWT RS256, OAuth2 Authorization Code + PKCE SaaS間のログインとSSO。
支払い Midtrans Snap, Xendit Invoice インドネシア向けの支払いとwebhookのセットルメント。
メール SMTP プロバイダー / Resend BullMQを使用したトランザクションメール。
デプロイ Docker + Coolify on VPS サービス、ドメイン、TLS、環境、およびロールバックのデプロイ。
テスト Jest, Supertest, Playwright 単体、統合/API、およびエンドツーエンドのテスト。

2. バックエンドの主な依存関係

必要なもの 推奨のNestJS/Nodeパッケージ
HTTP、config、validation @nestjs/common, @nestjs/config, class-validator, class-transformer
Prisma prisma, @prisma/client
Auth @nestjs/passport, passport, passport-jwt, jose
キュー @nestjs/bullmq, bullmq, ioredis
スケジュール @nestjs/schedule
API ドキュメント @nestjs/swagger
セキュリティ helmet, @nestjs/throttler
テスト jest, supertest

バックエンドのバージョンはpackage.jsonに固定されています。バックエンドを作成するときは、LTS Node.jsを使用してください。

3. 技術的な決定

決定 選択 理由
初期アーキテクチャ モジュラー モノリシック NestJS 簡単な運用、モジュールは明確で後で抽出できる。
データベース PostgreSQL + Prisma ビリングトランザクションとデータの関係を強くサポートする。
キュー Redis + BullMQ リトライ、遅延ジョブ、およびスケジュールをサポートする。
トークン JWT RS256 SaaSはHubの公開鍵を使用してトークンを検証できる。
OAuth フロー Authorization Code + PKCE ウェブアプリケーション向けに安全。
デプロイ Coolify on VPS フロントエンド、API、ワーカー、Postgres、およびRedisのための1つのプラットフォーム。
支払い Midtrans + Xendit インドネシア向けの支払い方法に適合。

4. リポジトリの構造

membership/
├── project/frontend/     # Next.js (repo自体)
├── backend/              # NestJS + Prisma (repo自体)
└── docs/                 # システム仕様

バックエンドにはapiプロセスとworkerプロセスが含まれます。APIはHTTPトラフィックを受け取り、ワーカーはBullMQとスケジュールされたジョブを処理します。

5. 基本的な環境設定

NODE_ENV=production
PORT=3001
DATABASE_URL=postgresql://...
REDIS_URL=redis://...
APP_URL=https://api.hub.domain.com
FRONTEND_URL=https://hub.domain.com
JWT_PRIVATE_KEY=...
JWT_PUBLIC_KEY=...
MIDTRANS_SERVER_KEY=...
MIDTRANS_CLIENT_KEY=...
XENDIT_SECRET_KEY=...
XENDIT_CALLBACK_TOKEN=...
EMAIL_FROM=no-reply@hub.domain.com
SMTP_HOST=...
SMTP_PORT=587
SMTP_USER=...
SMTP_PASS=...

GitやNEXT_PUBLIC_*にシークレットは入らないようにしてください。Coolifyはステージングとプロダクション用に環境を分離しています。