このプロジェクトは、デジタル創作サークルUniProjectのためのOIDC認証基盤です。 Discord連携機能やアナウンス機能などを持ち合わせており、サークルの円滑な運営のために用いられています。
このプロジェクトはマイクロサービスアーキテクチャの思想を取り入れ、主に5つのコンポーネントに分離しています。
Goで作られたリソースAPIサーバーです。 ここで、UniQUEに保存されたすべてのデータを管理できます。
認証・認可サーバーです。 ここでは、Open ID Connect 1.0 / OAuth 2.0に基づいた処理を行っています。 また、フロントエンドから受け取る認証リクエストを処理しています。
フロントエンドです。 ユーザーは基本的のこのコンポーネントを経由しWebUIを用いてアクセスします。 Next.jsで制作されており、このコンポーネントからデータベースへのアクセスは許可されていません。
メールを送るためだけのシステムです。 ここであらゆる種類のメールのテンプレートと変換し、APIサーバー等から送信されたリクエストをもとにメールを配信します。
これは、マイグレーションファイルが含まれたデータベースマイグレーション用のコンポーネントです。 KubernetesのCronJobにより、1日1回、GitからCloneしたマイグレーションファイルをデータベースに反映します。
また、DBはMySQL互換です。
Kubernetesへのデプロイには deploy/helm/unique のHelm Chartを使用します。
リリース版ChartはHarborの oci://registry.uniproject.jp/infra/unique に公開されます。
詳しい手順はデプロイガイドを参照してください。
暗号化のためには、下記条件を指定してください。
- mode - strict
- namespace - unique
- public key -
deploy/sealed-secrets/cert.pem
コントリビュートに興味をお持ちいただき、ありがとうございます!
開発用バックエンドはDocker Composeで起動します。本番のHelm/SealedSecretは対象外です。
-
各サンプル環境ファイルをローカル用ファイルとしてコピーします。
cp UniQUE-DB/.env.example UniQUE-DB/.env cp UniQUE-API/.env.example UniQUE-API/.env cp UniQUE-Auth/.env.example UniQUE-Auth/.env cp UniQUE-MailServer/.env.example UniQUE-MailServer/.env cp UniQUE-Front/.env.example UniQUE-Front/.env cp UniQUE-Front/.env.compose.example UniQUE-Front/.env.compose
-
Discord、SMTP、GAS連携を試す場合は、対応するローカル環境ファイルにテスト用の値を設定します。
-
バックエンドを起動します。
docker compose up -d --build
-
フロントエンドは通常、ホスト上でBunを使って起動します。
cd UniQUE-Front bun install bun run dev -
Compose上でフロントエンドも含めて確認する場合は、次を実行します。ソース変更は自動反映されます。
docker compose --profile frontend up -d --build
-
phpMyAdminにアクセスしてUniQUE-DB/manual内のsqlファイルを順番に実行します。 phpMyAdminのURLは
http://localhost:3001です。 また、デフォルトでは、DBの名前はdevdbです。 -
OIDCのAuthorization Code Flowを確認する場合は、テストクライアント用の環境ファイルも作成して起動します。
cp dev/oidc-client/.env.example dev/oidc-client/.env docker compose --profile oidc up -d --build
http://localhost:3002からログインを開始できます。プロトコルの自動確認は次で実行します。
bun --cwd dev/oidc-client run test:oidc
このテストはAuthorization Code Flow with PKCE、ID Token検証、UserInfo、Refresh Tokenローテーション、旧トークンの再利用拒否、RFC 7009のトークン失効を確認します。
上記の手順6により開発用ユーザーを冪等に作成します。
- User:
test - Password:
testpassword
認証情報は下記の通りです。
- User:
test - PW:
testpassword
リリースは Conventional Commits と Release Please で管理します。Release PRを
マージすると vX.Y.Z タグ、GitHub Release、全サービスのコンテナイメージ、
OCI Helm Chartが自動的に作成・公開されます。サービス別タグは手動作成しません。
このプロジェクトは、Apache-2.0ライセンスの下で公開されています。詳しくは、LICENSEファイルをご覧ください。
このプロジェクトにおいて、大きな変化をもたらしてくださった方々です。 本当にありがとうございました。
- @sibapybot - サーバーを提供していただき、多くのアイデアを提供してくださいました。
その他すべてのコントリビューターおよびUniProjectメンバーに感謝します。
このリポジトリはmonorepoになる前の分離されたバージョンが存在します。 過去のバージョンを追うには下記リポジトリを参照してください。