From 5333aefe917fb5dba9c1296ee51cf89a200f9314 Mon Sep 17 00:00:00 2001 From: keitakn Date: Tue, 16 Jan 2024 23:15:01 +0900 Subject: [PATCH 1/6] :construction: #273 From ed712cdf45f46036d9243029a42971f2721b79fd Mon Sep 17 00:00:00 2001 From: keitakn Date: Wed, 17 Jan 2024 00:05:23 +0900 Subject: [PATCH 2/6] =?UTF-8?q?:heavy=5Fplus=5Fsign:=20#273=20edge-config?= =?UTF-8?q?=20=E3=82=92=E5=88=A9=E7=94=A8=E3=81=99=E3=82=8B=E7=82=BA?= =?UTF-8?q?=E3=81=AB=20@vercel/edge-config=20=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 30 ++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 31 insertions(+) diff --git a/package-lock.json b/package-lock.json index 782b15d9..5e612ee0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@nekochans/lgtm-cat-ui": "^3.0.2", "@sentry/nextjs": "^7.91.0", + "@vercel/edge-config": "^0.4.1", "lodash.throttle": "^4.1.1", "next": "^14.0.4", "react": "^18.2.0", @@ -8018,6 +8019,22 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, + "node_modules/@vercel/edge-config": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@vercel/edge-config/-/edge-config-0.4.1.tgz", + "integrity": "sha512-4Mc3H7lE+x4RrL17nY8CWeEorvJHbkNbQTy9p8H1tO7y11WeKj5xeZSr07wNgfWInKXDUwj5FZ3qd/jIzjPxug==", + "dependencies": { + "@vercel/edge-config-fs": "0.1.0" + }, + "engines": { + "node": ">=14.6" + } + }, + "node_modules/@vercel/edge-config-fs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@vercel/edge-config-fs/-/edge-config-fs-0.1.0.tgz", + "integrity": "sha512-NRIBwfcS0bUoUbRWlNGetqjvLSwgYH/BqKqDN7vK1g32p7dN96k0712COgaz6VFizAm9b0g6IG6hR6+hc0KCPg==" + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -29873,6 +29890,19 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, + "@vercel/edge-config": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@vercel/edge-config/-/edge-config-0.4.1.tgz", + "integrity": "sha512-4Mc3H7lE+x4RrL17nY8CWeEorvJHbkNbQTy9p8H1tO7y11WeKj5xeZSr07wNgfWInKXDUwj5FZ3qd/jIzjPxug==", + "requires": { + "@vercel/edge-config-fs": "0.1.0" + } + }, + "@vercel/edge-config-fs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@vercel/edge-config-fs/-/edge-config-fs-0.1.0.tgz", + "integrity": "sha512-NRIBwfcS0bUoUbRWlNGetqjvLSwgYH/BqKqDN7vK1g32p7dN96k0712COgaz6VFizAm9b0g6IG6hR6+hc0KCPg==" + }, "@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", diff --git a/package.json b/package.json index e5130889..eb515d67 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "dependencies": { "@nekochans/lgtm-cat-ui": "^3.0.2", "@sentry/nextjs": "^7.91.0", + "@vercel/edge-config": "^0.4.1", "lodash.throttle": "^4.1.1", "next": "^14.0.4", "react": "^18.2.0", From 910c9f27a14787bd88bbbc7be717f4ab5998825d Mon Sep 17 00:00:00 2001 From: keitakn Date: Wed, 17 Jan 2024 00:07:49 +0900 Subject: [PATCH 3/6] =?UTF-8?q?:art:=20#273=20=E3=83=A1=E3=83=B3=E3=83=86?= =?UTF-8?q?=E3=83=8A=E3=83=B3=E3=82=B9=E3=83=A2=E3=83=BC=E3=83=89=E5=88=A4?= =?UTF-8?q?=E5=AE=9A=E9=96=A2=E6=95=B0=E3=82=92=20@vercel/edge-config=20?= =?UTF-8?q?=E3=82=92=E5=88=A9=E7=94=A8=E3=81=97=E3=81=9F=E5=AE=9F=E8=A3=85?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/edge/maintenance.ts | 9 +++++++-- src/middleware.ts | 5 +++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/edge/maintenance.ts b/src/edge/maintenance.ts index d392047d..19b0763f 100644 --- a/src/edge/maintenance.ts +++ b/src/edge/maintenance.ts @@ -1,2 +1,7 @@ -export const isInMaintenance = (): boolean => - process.env.IS_IN_MAINTENANCE === '1'; +import { get } from '@vercel/edge-config'; + +export const isInMaintenance = async (): Promise => { + const isInMaintenanceMode = await get('isInMaintenance'); + + return isInMaintenanceMode === true; +}; diff --git a/src/middleware.ts b/src/middleware.ts index d35a1af7..a554173c 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -9,7 +9,7 @@ export const config = { matcher: ['/', '/upload', '/terms', '/privacy', '/maintenance'], }; -export const middleware: NextMiddleware = (req: NextRequest) => { +export const middleware: NextMiddleware = async (req: NextRequest) => { const { nextUrl } = req; if (isBanCountry(req)) { @@ -18,7 +18,8 @@ export const middleware: NextMiddleware = (req: NextRequest) => { return NextResponse.rewrite(nextUrl); } - if (isInMaintenance()) { + const isInMaintenanceMode = await isInMaintenance(); + if (isInMaintenanceMode) { nextUrl.pathname = '/maintenance'; return NextResponse.rewrite(nextUrl); From 0cc8d832f044e74dfca0fdc170c4ac8009ee0ae8 Mon Sep 17 00:00:00 2001 From: keitakn Date: Wed, 17 Jan 2024 00:08:36 +0900 Subject: [PATCH 4/6] =?UTF-8?q?:see=5Fno=5Fevil:=20#273=20.env=E3=81=AE?= =?UTF-8?q?=E3=83=91=E3=82=BF=E3=83=BC=E3=83=B3=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5dcb6315..e9da8f00 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ yarn-error.log* .env.development.local .env.test.local .env.production.local +.env*.local # vercel .vercel From 660beceaa7be1d76c61886d1f90e5a49a69211cc Mon Sep 17 00:00:00 2001 From: keitakn Date: Wed, 17 Jan 2024 00:17:45 +0900 Subject: [PATCH 5/6] =?UTF-8?q?:memo:=20#273=20=E7=92=B0=E5=A2=83=E5=A4=89?= =?UTF-8?q?=E6=95=B0=E3=81=AB=20EDGE=5FCONFIG=20=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=80=81=E4=B8=8D=E8=A6=81=E3=81=AB=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=9F=20IS=5FIN=5FMAINTENANCE=20=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 738d1013..55b9a7ce 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ NEXT_PUBLIC_APP_ENV=local NEXT_PUBLIC_APP_URL=本アプリケーションのURL、ローカルの場合は http://localhost:2222 NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID=GTM-から始まるGoogle Tag ManagerのIDを指定 NEXT_PUBLIC_LGTMEOW_BFF_URL=https://github.com/nekochans/lgtm-cat-bff が稼働しているURLを指定 -IS_IN_MAINTENANCE=0 +EDGE_CONFIG=Vercel Edge ConfigのURL(Vercel上の値を参照) ``` 以下の環境変数はテストコード実行時や Build 時に参照されるので [direnv](https://github.com/direnv/direnv) を使って `.envrc` を配置するのが良いです。 From 6f91277a8408bd08c854cc605bca0c436efd6f09 Mon Sep 17 00:00:00 2001 From: keitakn Date: Fri, 19 Jan 2024 17:21:25 +0900 Subject: [PATCH 6/6] =?UTF-8?q?:memo:=20#273=20=E3=83=A1=E3=83=B3=E3=83=86?= =?UTF-8?q?=E3=83=8A=E3=83=B3=E3=82=B9=E3=83=A2=E3=83=BC=E3=83=89=E3=81=B8?= =?UTF-8?q?=E3=81=AE=E7=A7=BB=E8=A1=8C=E6=96=B9=E6=B3=95=E3=82=92README?= =?UTF-8?q?=E3=81=AB=E8=BF=BD=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 55b9a7ce..a80a396d 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,28 @@ asdf local nodejs 18.12.1 ## メンテナンスモードについて -`IS_IN_MAINTENANCE` が `1` の場合はメンテナンスページを強制的に表示します。 +[Vercel Edge Config](https://vercel.com/docs/storage/edge-config) を利用してメンテナンスモードを実現しています。 + +以下から Vercel Edge Config を編集可能です。 + +https://vercel.com/nekochans/lgtm-cat-frontend/stores + +それぞれ以下のように対応しています。 + +- `lgtm-cat-frontend-store` (本番用) +- `stg-lgtm-cat-frontend-store` (ローカルを含む開発、ステージング用) + +VercelEdgeConfig + +メンテナンスモードに移行する為には `isInMaintenance` を `true` に変更します。 + +編集後は「Save」を押下するか `Command + s` で保存しないと反映されません。 + +VercelEdgeConfigEdit + +メンテナンスモードになると全てのページでメンテナンス中を示すエラーページが表示されます。 + +isInMaintenance ## 開発でよく使うコマンド