From 423e6d9e02c7c5d0bbf4ca38a8a5cfc6beb79a0f Mon Sep 17 00:00:00 2001 From: Filip Niklas Date: Sat, 6 Sep 2025 12:42:11 +0200 Subject: [PATCH 1/3] feat: enable prebuilding dynamic content --- .github/workflows/cd_dev.yaml | 2 ++ .github/workflows/cd_prod.yaml | 2 ++ .github/workflows/cd_staging.yaml | 2 ++ Dockerfile | 19 +++++++++++-------- app/symposia/courses/page.tsx | 2 -- cspell.json | 3 ++- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/.github/workflows/cd_dev.yaml b/.github/workflows/cd_dev.yaml index c7414840..fac96afa 100644 --- a/.github/workflows/cd_dev.yaml +++ b/.github/workflows/cd_dev.yaml @@ -149,8 +149,10 @@ jobs: - name: Build and Push Container # NEXT_PUBLIC_ env variables have to be set during the build phase. run: |- + export DATABASE_URL=${{secrets.DATABASE_URL}} docker build \ --build-arg NEXT_PUBLIC_SITE_ROOT=${{secrets.NEXT_PUBLIC_SITE_ROOT}} \ + --secret id=sec_database_url,env=DATABASE_URL \ -f Dockerfile \ -t "${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/${{ env.SERVICE }}:${{ env.TAG }}" ./ docker push "${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/${{ env.SERVICE }}:${{ env.TAG }}" diff --git a/.github/workflows/cd_prod.yaml b/.github/workflows/cd_prod.yaml index 5142855b..0cd004aa 100644 --- a/.github/workflows/cd_prod.yaml +++ b/.github/workflows/cd_prod.yaml @@ -152,9 +152,11 @@ jobs: - name: Build and Push Container # NEXT_PUBLIC_ env variables have to be set during the build phase. run: |- + export DATABASE_URL=${{secrets.DATABASE_URL}} docker build \ --build-arg NEXT_PUBLIC_SITE_ROOT=${{secrets.NEXT_PUBLIC_SITE_ROOT}} \ --build-arg NEXT_PUBLIC_POSTHOG_KEY=${{secrets.NEXT_PUBLIC_POSTHOG_KEY}} \ + --secret id=sec_database_url,env=DATABASE_URL \ -f Dockerfile \ -t "${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/${{ env.SERVICE }}:${{ env.TAG }}" ./ docker push "${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/${{ env.SERVICE }}:${{ env.TAG }}" diff --git a/.github/workflows/cd_staging.yaml b/.github/workflows/cd_staging.yaml index ad473304..53917898 100644 --- a/.github/workflows/cd_staging.yaml +++ b/.github/workflows/cd_staging.yaml @@ -153,8 +153,10 @@ jobs: - name: Build and Push Container # NEXT_PUBLIC_ env variables have to be set during the build phase. run: |- + export DATABASE_URL=${{secrets.DATABASE_URL}} docker build \ --build-arg NEXT_PUBLIC_SITE_ROOT=${{secrets.NEXT_PUBLIC_SITE_ROOT}} \ + --secret id=sec_database_url,env=DATABASE_URL \ -f Dockerfile \ -t "${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/${{ env.SERVICE }}:${{ env.TAG }}" ./ docker push "${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/${{ env.SERVICE }}:${{ env.TAG }}" diff --git a/Dockerfile b/Dockerfile index befe71d7..0957459a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,33 @@ -FROM node:20-bullseye as installer +FROM node:22-bullseye AS installer WORKDIR /app COPY prisma ./ COPY package.json package-lock.json ./ RUN npm install -FROM node:20-bullseye as builder +FROM node:22-bullseye AS builder WORKDIR /app COPY --from=installer /app/node_modules/ /app/node_modules COPY . . -ENV NEXT_TELEMETRY_DISABLED 1 +ENV NEXT_TELEMETRY_DISABLED=1 ARG NEXT_PUBLIC_POSTHOG_KEY ENV NEXT_PUBLIC_POSTHOG_KEY=$NEXT_PUBLIC_POSTHOG_KEY ARG NEXT_PUBLIC_SITE_ROOT ENV NEXT_PUBLIC_SITE_ROOT=$NEXT_PUBLIC_SITE_ROOT +RUN --mount=type=secret,id=sec_database_url \ + export DATABASE_URL=$(cat /run/secrets/sec_database_url) + RUN npm run build # Force node.js to use ipv4 first, over ipv6, by appending the following to server.js RUN echo "const dns = require('node:dns');" >> ./.next/standalone/server.js \ && echo "dns.setDefaultResultOrder('ipv4first');" >> ./.next/standalone/server.js -FROM node:20-bullseye as runner +FROM node:22-bullseye AS runner WORKDIR /app -ENV NODE_ENV production +ENV NODE_ENV=production RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs @@ -34,7 +37,7 @@ COPY --from=builder --chown=nextjs:nodejs /app/public ./public USER nextjs EXPOSE 3000 -ENV PORT 3000 -ENV HOSTNAME "0.0.0.0" +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" -CMD node server.js \ No newline at end of file +CMD ["node", "server.js"] \ No newline at end of file diff --git a/app/symposia/courses/page.tsx b/app/symposia/courses/page.tsx index d164fa02..54a2cb55 100644 --- a/app/symposia/courses/page.tsx +++ b/app/symposia/courses/page.tsx @@ -7,8 +7,6 @@ import { Suspense } from "react"; export const metadata = {}; -export const dynamic = "force-dynamic"; - export default async function CoursesPage() { return ( diff --git a/cspell.json b/cspell.json index 973a9b1f..46e2f081 100644 --- a/cspell.json +++ b/cspell.json @@ -14,7 +14,8 @@ "next.config.mjs", ".env", ".env.*", - "cspell.json" + "cspell.json", + "Dockerfile" ], "dictionaryDefinitions": [], "dictionaries": [], From f94f1b98a1bd3a71da0874c1d09d4bc6110f080f Mon Sep 17 00:00:00 2001 From: Filip Niklas Date: Sat, 6 Sep 2025 12:53:29 +0200 Subject: [PATCH 2/3] fix: build command --- Dockerfile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0957459a..9e31ad2f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,9 +16,7 @@ ARG NEXT_PUBLIC_SITE_ROOT ENV NEXT_PUBLIC_SITE_ROOT=$NEXT_PUBLIC_SITE_ROOT RUN --mount=type=secret,id=sec_database_url \ - export DATABASE_URL=$(cat /run/secrets/sec_database_url) - -RUN npm run build + export DATABASE_URL=$(cat /run/secrets/sec_database_url) npm run build # Force node.js to use ipv4 first, over ipv6, by appending the following to server.js RUN echo "const dns = require('node:dns');" >> ./.next/standalone/server.js \ From 21b83f4e4fdd9d33fba7966b170f3079a84183b2 Mon Sep 17 00:00:00 2001 From: Filip Niklas Date: Sat, 6 Sep 2025 13:10:12 +0200 Subject: [PATCH 3/3] fix: build command2 --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9e31ad2f..5430be9f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,8 @@ ARG NEXT_PUBLIC_SITE_ROOT ENV NEXT_PUBLIC_SITE_ROOT=$NEXT_PUBLIC_SITE_ROOT RUN --mount=type=secret,id=sec_database_url \ - export DATABASE_URL=$(cat /run/secrets/sec_database_url) npm run build + export DATABASE_URL=$(cat /run/secrets/sec_database_url) && \ + npm run build # Force node.js to use ipv4 first, over ipv6, by appending the following to server.js RUN echo "const dns = require('node:dns');" >> ./.next/standalone/server.js \