From 15b5f31a7494619bc88cd5715c2bbf1b46cffa83 Mon Sep 17 00:00:00 2001 From: Thanh Vu Date: Thu, 1 Jun 2023 23:54:27 +0700 Subject: [PATCH 1/7] fix: support ipv6 for nextjs --- apps/web/package.json | 4 ++-- apps/web/server/index.ts | 22 ++++++++++++++++++++++ apps/web/tsconfig.server.json | 11 +++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 apps/web/server/index.ts create mode 100644 apps/web/tsconfig.server.json diff --git a/apps/web/package.json b/apps/web/package.json index 349936c8a..41a6129f3 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -4,8 +4,8 @@ "private": true, "scripts": { "dev": "next dev", - "build": "next build", - "start": "next start", + "build": "next build && tsc --project tsconfig.server.json", + "start": "node dist/index.js", "lint": "next lint", "db-studio": "prisma db studio", "stripe:listen": "stripe listen --forward-to localhost:3000/api/stripe/webhook" diff --git a/apps/web/server/index.ts b/apps/web/server/index.ts new file mode 100644 index 000000000..96c2a478c --- /dev/null +++ b/apps/web/server/index.ts @@ -0,0 +1,22 @@ +import { createServer } from 'http'; +import next from 'next'; +import { parse } from 'url'; + +const hostname = process.env.HOST || '[::]'; +const port = parseInt(process.env.PORT || '3000', 10); +const dev = process.env.NODE_ENV !== 'production'; +const app = next({ dev, hostname, port }); +const handle = app.getRequestHandler(); + +app.prepare().then(() => { + createServer((req, res) => { + const parsedUrl = parse(req.url!, true) + handle(req, res, parsedUrl) + }).listen(port); + + // eslint-disable-next-line no-console + console.log( + `> Server listening at http://${hostname}:${port} as ${dev ? 'development' : process.env.NODE_ENV + }` + ); +}); diff --git a/apps/web/tsconfig.server.json b/apps/web/tsconfig.server.json new file mode 100644 index 000000000..8cb34c903 --- /dev/null +++ b/apps/web/tsconfig.server.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "dist", + "target": "es2017", + "isolatedModules": false, + "noEmit": false + }, + "include": ["server/**/*.ts"] +} From 054480500f9d4f167d9ff0d4a0f960c201d6ee5c Mon Sep 17 00:00:00 2001 From: Thanh Vu Date: Fri, 2 Jun 2023 00:11:13 +0700 Subject: [PATCH 2/7] fix: custom nextjs server --- apps/web/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/package.json b/apps/web/package.json index 41a6129f3..235ee57d8 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev", "build": "next build && tsc --project tsconfig.server.json", - "start": "node dist/index.js", + "start": "node ./dist/index.js", "lint": "next lint", "db-studio": "prisma db studio", "stripe:listen": "stripe listen --forward-to localhost:3000/api/stripe/webhook" From bbedd6d3ded55100bca6d5aa6616fdf20264891f Mon Sep 17 00:00:00 2001 From: Thanh Vu Date: Fri, 2 Jun 2023 00:19:08 +0700 Subject: [PATCH 3/7] fix: add custom nextjs server to docker --- docker/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile b/docker/Dockerfile index 5b19b2726..5ef51605c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -42,6 +42,7 @@ COPY --from=production_deps --chown=nextjs:nodejs /app/package-lock.json ./packa COPY --from=builder --chown=nextjs:nodejs /app/apps/web/package.json ./package.json COPY --from=builder --chown=nextjs:nodejs /app/apps/web/public ./public COPY --from=builder --chown=nextjs:nodejs /app/apps/web/.next ./.next +COPY --from=builder --chown=nextjs:nodejs /app/apps/web/dist ./dist EXPOSE 3000 From 20b618c70f78fdd33c86494e4787fa586d63ec9c Mon Sep 17 00:00:00 2001 From: Thanh Vu Date: Fri, 2 Jun 2023 14:00:54 +0700 Subject: [PATCH 4/7] docs: update troubleshooting for IPv6 --- README.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/README.md b/README.md index 0861312fb..17e594ea1 100644 --- a/README.md +++ b/README.md @@ -198,3 +198,32 @@ Want to create a production ready docker image? Follow these steps: - Docker support - One-Click-Deploy on Render.com Deploy + +# Troubleshooting + +## Support IPv6 + +In case you are deploying to a cluster that uses only IPv6. You can use a custom command to pass a parameter to the NextJS start command + +For local docker run + +```bash +docker run -it documenso:latest npm run start -- -H :: +``` + +For k8s or docker-compose + +```yaml +containers: + - name: documenso + image: documenso:latest + imagePullPolicy: IfNotPresent + command: + - npm + args: + - run + - start + - -- + - -H + - '::' +``` From 3caa01ab535f26f4425a464f3741aa27c3119f2a Mon Sep 17 00:00:00 2001 From: Thanh Vu Date: Fri, 2 Jun 2023 14:01:03 +0700 Subject: [PATCH 5/7] Revert "fix: add custom nextjs server to docker" This reverts commit 5dbe7b26286234db542921d9ded000c522c9a31e. --- docker/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 5ef51605c..5b19b2726 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -42,7 +42,6 @@ COPY --from=production_deps --chown=nextjs:nodejs /app/package-lock.json ./packa COPY --from=builder --chown=nextjs:nodejs /app/apps/web/package.json ./package.json COPY --from=builder --chown=nextjs:nodejs /app/apps/web/public ./public COPY --from=builder --chown=nextjs:nodejs /app/apps/web/.next ./.next -COPY --from=builder --chown=nextjs:nodejs /app/apps/web/dist ./dist EXPOSE 3000 From db99bf3674691e4454937806b06b073a16b895d6 Mon Sep 17 00:00:00 2001 From: Thanh Vu Date: Fri, 2 Jun 2023 14:01:24 +0700 Subject: [PATCH 6/7] Revert "fix: custom nextjs server" This reverts commit 8f9a5f4ec7d834970a3e2b0778ce94218c997a8f. --- apps/web/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/package.json b/apps/web/package.json index 235ee57d8..41a6129f3 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev", "build": "next build && tsc --project tsconfig.server.json", - "start": "node ./dist/index.js", + "start": "node dist/index.js", "lint": "next lint", "db-studio": "prisma db studio", "stripe:listen": "stripe listen --forward-to localhost:3000/api/stripe/webhook" From c41007e0265d02ef0868323ee96da016c19210c1 Mon Sep 17 00:00:00 2001 From: Thanh Vu Date: Fri, 2 Jun 2023 14:01:40 +0700 Subject: [PATCH 7/7] Revert "fix: support ipv6 for nextjs" This reverts commit f9de6671e0aa29e25e872a80aa334d3319e3e522. --- apps/web/package.json | 4 ++-- apps/web/server/index.ts | 22 ---------------------- apps/web/tsconfig.server.json | 11 ----------- 3 files changed, 2 insertions(+), 35 deletions(-) delete mode 100644 apps/web/server/index.ts delete mode 100644 apps/web/tsconfig.server.json diff --git a/apps/web/package.json b/apps/web/package.json index 41a6129f3..349936c8a 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -4,8 +4,8 @@ "private": true, "scripts": { "dev": "next dev", - "build": "next build && tsc --project tsconfig.server.json", - "start": "node dist/index.js", + "build": "next build", + "start": "next start", "lint": "next lint", "db-studio": "prisma db studio", "stripe:listen": "stripe listen --forward-to localhost:3000/api/stripe/webhook" diff --git a/apps/web/server/index.ts b/apps/web/server/index.ts deleted file mode 100644 index 96c2a478c..000000000 --- a/apps/web/server/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { createServer } from 'http'; -import next from 'next'; -import { parse } from 'url'; - -const hostname = process.env.HOST || '[::]'; -const port = parseInt(process.env.PORT || '3000', 10); -const dev = process.env.NODE_ENV !== 'production'; -const app = next({ dev, hostname, port }); -const handle = app.getRequestHandler(); - -app.prepare().then(() => { - createServer((req, res) => { - const parsedUrl = parse(req.url!, true) - handle(req, res, parsedUrl) - }).listen(port); - - // eslint-disable-next-line no-console - console.log( - `> Server listening at http://${hostname}:${port} as ${dev ? 'development' : process.env.NODE_ENV - }` - ); -}); diff --git a/apps/web/tsconfig.server.json b/apps/web/tsconfig.server.json deleted file mode 100644 index 8cb34c903..000000000 --- a/apps/web/tsconfig.server.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "commonjs", - "outDir": "dist", - "target": "es2017", - "isolatedModules": false, - "noEmit": false - }, - "include": ["server/**/*.ts"] -}