IdP
このリポジトリでは、docker
があれば1コマンドで開発環境を構築できます。
docker compose up
# http://localhost:3000
docker compose
では、以下の4つのコンテナが立ち上がります。
name | 種類 | ポート |
---|---|---|
backend_app |
Goのバックエンドサーバー | 8080 |
frontend_app |
Next.jsサーバー | 3001 |
nginx |
APIとNext.jsを同じポートで配信するためのプロキシ | 3000 , 3002 |
db |
MySQLサーバー | 3306 |
gcs |
オブジェクトストレージサーバー | 4443 |
flowchart LR
U([User]) -->|:3000, :3002| N[nginx]
T([Go Test]) -->|:3306| D
T -->|:4443| C
subgraph docker-compose
N -->|:3000 -> :8080| A[backend_app]
N -->|:3000 -> :3001| B[frontend_app]
N -->|:3002 -> :4443| C[(gcs)]
A -->|:3306| D[(db)]
end
flowchart LR
U([User]) -->|oreore.me| N1
U -->|cdn.oreore.me| N2
subgraph Fastly
N1[Fastly 1]
N2[Fastly 2]
end
subgraph Google Cloud
N1 -->|/api,/.well-known,/fedcm| A[backend_app CloudRun]
N1 -->|other| B[frontend_app CloudRun]
N2 -->|internal| A
A --> C[(Cloud Storage)]
A --> D[(Cloud SQL)]
end
Warning
この機能はローカル環境のみ有効です。他の環境ではstaff
テーブルにINSERTしてください。
ローカル環境では、admin@local.test
というメールアドレスをもつユーザーが作成されています。パスワード再設定からパスワードを再設定してください。
再設定用のURLはDEBUGログに以下のように出力されます。
2023-09-03T13:34:11.747+0900 DEBUG src/handler.go:160 send mail {"email_address": "admin@local.test", "subject": "パスワードを再設定してください", "data": {"URL":"http://localhost:3000/forget_password/reregister?email=admin%40local.test&token=8K7R0stblqJLp8AyIOh3yzFYYSQl3RA","UserName":"admin","Expiration":"2023-09-03T13:39:11.747804793+09:00","BrandName":"oreore.me local","BrandUrl":"http://localhost:3000","BrandImageUrl":"https://todo","BrandDomain":"localhost:3000","Email":"admin@local.test"}}
# DBは起動しておく
./script/docker-compose-db.sh up -d
# Go test
go mod download
./script/test
# ----
# Next.js lint
pnpm i
pnpm lint
# ----
# Storybook
pnpm storybook
# http://localhost:6006
このリポジトリでは、mysqldef
を使用して簡単にマイグレーションを実行しています。
db/schema.sql
を編集します。docker compose up -d
でDBを起動します。./scripts/setup_migrate.sh [マイグレーション名]
を実行します。db/migrations/
にup
とdown
のDDLが作成されるので内容が問題ないか確認します。./scripts/migrate.sh up
を実行してデータベースにマイグレーションを実行します。./scripts/sqlboiler.sh
を実行してSQLBoilerのモデルを出力します。
- Goは./src/config.goに
os.Getenv
があります。 - Next.jsは./utils/config.tsに
process.env
があります。
# APIのホスト
# Next.js側でAPIに接続する際に使用
# 未指定時はデフォルトで相対パスになります
NEXT_PUBLIC_API_HOST=[API host]
# reCAPTCHAのトークン
NEXT_PUBLIC_RE_CAPTCHA=[token]
# GAのトークン
NEXT_PUBLIC_GOOGLE_ANALYTICS_ID=[token]
# ステージング環境などの場合に設定します
NEXT_PUBLIC_PUBLICATION_TYPE=[publication type]
# コミットハッシュ
# Cloud Buildで自動的に埋めています
NEXT_PUBLIC_REVISION=[hash]
# ブランチ名
# Cloud Buildで自動的に埋めています
NEXT_PUBLIC_BRANCH_NAME=[branch name]
# reCAPTCHAのシークレット
# ローカル、テストではreCAPTCHAは使用しないので空でOK
RECAPTCHA_SECRET=[secret]
# mailgunのシークレット
# ローカル、テストではメールを送信しないので空でOK
MAILGUN_SECRET=[secert]
# fastryのトークン
# ローカル、テストではfastlyは使っていないので空でOK
FASTLY_API_TOKEN=[token]
./scripts/sql.sh
- ドメイン
- CORS
- WebAuthn
- タイトル
- ストレージ
- OTPのIssuer
- ブランチ名
- ローカルデータベース
- 本番データベース
- Goのパッケージ名
- Storybook
- README