From 31c0be148d30f3da39ad77882059686d7d9aaf53 Mon Sep 17 00:00:00 2001 From: tknkaa Date: Fri, 2 Oct 2026 21:13:59 +0900 Subject: [PATCH] chore: set the production and preview URLs, and turn off the reminder worker's public URL --- apps/reminder-worker/wrangler.jsonc | 4 +++- apps/web/wrangler.jsonc | 8 +++++++ docs/deploy.md | 37 +++++++++++++++++++++-------- package.json | 4 ++-- 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/apps/reminder-worker/wrangler.jsonc b/apps/reminder-worker/wrangler.jsonc index d1511be..22f4df2 100644 --- a/apps/reminder-worker/wrangler.jsonc +++ b/apps/reminder-worker/wrangler.jsonc @@ -2,10 +2,12 @@ "$schema": "../../node_modules/wrangler/config-schema.json", "name": "kanban-reminder-worker", "main": "src/index.ts", + // It only reacts to cron and queues, and has nothing to answer on the web. + "workers_dev": false, "compatibility_date": "2026-01-01", "vars": { // Where the links in mails point to, and who they come from. Set RESEND_API_KEY as a secret. - "APP_URL": "http://localhost:8787", + "APP_URL": "https://kanban-web.ut-code.workers.dev", "REMINDER_FROM": "onboarding@resend.dev", }, "triggers": { diff --git a/apps/web/wrangler.jsonc b/apps/web/wrangler.jsonc index d7424a7..4e26089 100644 --- a/apps/web/wrangler.jsonc +++ b/apps/web/wrangler.jsonc @@ -4,6 +4,11 @@ "main": "dist/server/server.js", "compatibility_date": "2026-01-01", "compatibility_flags": ["nodejs_compat"], + "vars": { + // The address of the deployed app. Login only accepts requests from this origin, so it has to + // match the real address. A local `pnpm dev` takes its own value from apps/web/.dev.vars. + "BETTER_AUTH_URL": "https://kanban-web.ut-code.workers.dev", + }, "assets": { "directory": "dist/client", "binding": "ASSETS", @@ -52,6 +57,9 @@ "env": { "preview": { "name": "kanban-web-preview", + "vars": { + "BETTER_AUTH_URL": "https://kanban-web-preview.ut-code.workers.dev", + }, "d1_databases": [ { "binding": "DB", diff --git a/docs/deploy.md b/docs/deploy.md index ab27eee..93b4ff1 100644 --- a/docs/deploy.md +++ b/docs/deploy.md @@ -26,6 +26,21 @@ export CLOUDFLARE_ACCOUNT_ID=<アカウント ID> # `wrangler whoami` で分 プレビューにはリマインド用のワーカーを置かない。cron が動いて、本番と同じようにメールを送ってしまうのを避けるため。 +## いまの状態 (ut-code のアカウント `ut.code();`) + +| | 状態 | +| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| リソース | D1 2 個、R2 2 個、キュー 4 つ。作成済み | +| マイグレーション | 本番とプレビューの両方に、すべて適用済み | +| `kanban-web` (本番) | デプロイ済み: https://kanban-web.ut-code.workers.dev | +| `kanban-web-preview` | デプロイ済み: https://kanban-web-preview.ut-code.workers.dev (別の DB) | +| `kanban-reminder-worker` | デプロイ済み (cron は 15 分ごと)。公開 URL はない (`workers_dev: false`) | +| シークレット | `BETTER_AUTH_SECRET` は、本番とプレビューに設定済み (別の値) | +| デプロイ後の確認 | プレビューで、アカウント作成、タスク、状態の変更、添付 (R2)、共有 (キュー)、WebSocket と Durable Objects を確認済み。本番には、データを作らないよう、アカウントは作っていない | +| Workers Builds (自動デプロイ) | **未設定**。下の 5 を、ダッシュボードで設定する | +| メール (Resend) | **未設定** ([#8](https://github.com/ut-code/kanban/issues/8))。それまで、メールの送信は失敗して、デッドレターキューに溜まる | +| Google ログイン | **未設定** ([#2](https://github.com/ut-code/kanban/issues/2)) | + ## 1. リソースを作る (最初の 1 回) Wrangler にログインする (`pnpm --filter @todo/web exec wrangler login`)。 @@ -63,14 +78,14 @@ pnpm db:migrate:preview # プレビュー シークレットは `wrangler secret put` で入れる (リポジトリには書かない)。プレビューには `--env preview` を付ける。 -| 名前 | どこに | 内容 | -| ------------------------------------------- | ------------------------ | --------------------------------------------------------------------------------------------------------------- | -| `BETTER_AUTH_SECRET` | web (本番、プレビュー) | 長いランダム文字列 (`openssl rand -hex 32`)。本番とプレビューで別の値にする | -| `BETTER_AUTH_URL` | web (本番、プレビュー) | そのアプリの公開 URL (例 `https://todo.example.com`)。ログインのオリジン確認に使うので、実際の URL と一致させる | -| `RESEND_API_KEY` | reminder-worker | Resend の API キー。詳しくは [ワーカー仕様](worker.md) | -| `REMINDER_FROM` | reminder-worker (`vars`) | 送信元アドレス。独自ドメインの検証が要る | -| `APP_URL` | reminder-worker (`vars`) | メールのリンクの先 (本番の公開 URL) | -| `GOOGLE_CLIENT_ID` / `GOOGLE_CLIENT_SECRET` | web | Google でログインするとき ([#2](https://github.com/ut-code/kanban/issues/2)) | +| 名前 | どこに | 内容 | +| ------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `BETTER_AUTH_SECRET` | web (本番、プレビュー) | 長いランダム文字列 (`openssl rand -hex 32`)。本番とプレビューで別の値にする | +| `BETTER_AUTH_URL` | web (`wrangler.jsonc` の `vars`) | そのアプリの公開 URL。ログインのオリジン確認に使うので、実際の URL と一致させる。本番は `https://kanban-web.ut-code.workers.dev`、プレビューは `env.preview.vars` に書いてある | +| `RESEND_API_KEY` | reminder-worker | Resend の API キー。詳しくは [ワーカー仕様](worker.md) | +| `REMINDER_FROM` | reminder-worker (`vars`) | 送信元アドレス。独自ドメインの検証が要る | +| `APP_URL` | reminder-worker (`vars`) | メールのリンクの先。本番の公開 URL (`https://kanban-web.ut-code.workers.dev`) | +| `GOOGLE_CLIENT_ID` / `GOOGLE_CLIENT_SECRET` | web | Google でログインするとき ([#2](https://github.com/ut-code/kanban/issues/2)) | ```sh cd apps/web @@ -78,14 +93,16 @@ pnpm exec wrangler secret put BETTER_AUTH_SECRET pnpm exec wrangler secret put BETTER_AUTH_SECRET --env preview ``` -`BETTER_AUTH_URL` は、`wrangler.jsonc` の `vars` に書くか、ダッシュボードの Variables で設定する。 +`BETTER_AUTH_URL` と `APP_URL` は、公開してよい値なので、シークレットではなく `wrangler.jsonc` の `vars` に書いてある。ローカルの `pnpm dev` は、`apps/web/.dev.vars` の値を使う。 + +シークレットを入れた直後は、反映まで数十秒かかる。そのあいだ、古いバージョンが応答して、ログインしているのに 401 になるなど、結果が一定しないことがある。少し待ってから試す。 **プレビューの URL の注意:** ログインは、`BETTER_AUTH_URL` と同じオリジンからのリクエストしか受け付けない。プレビューでログインを試すには、`https://kanban-web-preview.<アカウントのサブドメイン>.workers.dev` のように、**固定の URL** を `BETTER_AUTH_URL` に設定して、その URL で開く。ブランチごとに変わるバージョンの URL (`<ハッシュ>-kanban-web-preview…`) では、ログインできない。 ## 4. 初回のデプロイ ```sh -pnpm deploy:web # 本番の Web +pnpm deploy:web # 本番の Web (中身は `pnpm --filter @todo/web run deploy`。`pnpm deploy` は pnpm 自身の別のコマンドなので、`run` が要る) pnpm deploy:worker # リマインド用のワーカー pnpm deploy:preview # プレビューの Web (Worker を作るため、最初に 1 回) ``` diff --git a/package.json b/package.json index 6da681f..3ec5e57 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,9 @@ "db:migrate:remote": "pnpm --filter @todo/web exec wrangler d1 migrations apply kanban-db --remote", "test:e2e": "playwright test", "db:migrate:preview": "pnpm --filter @todo/web exec wrangler d1 migrations apply kanban-db-preview --remote --env preview", - "deploy:web": "pnpm --filter @todo/web deploy", + "deploy:web": "pnpm --filter @todo/web run deploy", "deploy:preview": "pnpm --filter @todo/web build && pnpm --filter @todo/web exec wrangler deploy --env preview", - "deploy:worker": "pnpm --filter @todo/reminder-worker deploy", + "deploy:worker": "pnpm --filter @todo/reminder-worker run deploy", "check:deploy": "pnpm --filter @todo/web build && pnpm --filter @todo/web exec wrangler deploy --dry-run --outdir .wrangler/dry-run && pnpm --filter @todo/web exec wrangler deploy --dry-run --env preview --outdir .wrangler/dry-run-preview && pnpm --filter @todo/reminder-worker exec wrangler deploy --dry-run --outdir .wrangler/dry-run" }, "devDependencies": {