From 268a07b61fde6367677d4c8538df20b20ddb1fc6 Mon Sep 17 00:00:00 2001 From: Martin Almvik Date: Thu, 21 Nov 2024 13:55:16 +0100 Subject: [PATCH] Konverterer til standalone og med cdn --- .github/workflows/build_deploy_gcp_dev.yml | 72 +++++++++++++-------- .github/workflows/build_deploy_gcp_prod.yml | 21 ++++++ .github/workflows/build_deploy_mock.yml | 19 ++++++ .github/workflows/build_dev_image.yml | 55 ++++++++++------ .github/workflows/build_prod_image.yml | 65 ++++++++++++------- Dockerfile | 50 +++----------- next.config.mjs | 2 + 7 files changed, 176 insertions(+), 108 deletions(-) diff --git a/.github/workflows/build_deploy_gcp_dev.yml b/.github/workflows/build_deploy_gcp_dev.yml index ab65c659d..0cc8b35be 100644 --- a/.github/workflows/build_deploy_gcp_dev.yml +++ b/.github/workflows/build_deploy_gcp_dev.yml @@ -21,30 +21,50 @@ jobs: permissions: contents: read id-token: write + env: + NEXT_PUBLIC_DIGISOS_ENV: ${{ matrix.environment }} + steps: + - uses: actions/checkout@v4 - steps: - - uses: actions/checkout@v4 - - - name: Build and push docker image to GAR - uses: nais/docker-build-push@v0 - id: docker-build-push - with: - team: teamdigisos - identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }} - project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }} - image_suffix: ${{ matrix.environment }} - build_args: | - DIGISOS_ENV=${{ matrix.environment }} - build_secrets: | - NODE_AUTH_TOKEN=${{ secrets.READER_TOKEN }} - - - name: "Deploy to ${{ matrix.environment }}" - uses: nais/deploy/actions/deploy@v2 - env: - APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }} - RESOURCE: .nais/app.yaml - CLUSTER: ${{ matrix.cluster }} - REF: ${{ github.sha }} - PRINT_PAYLOAD: true - IMAGE: ${{ steps.docker-build-push.outputs.image }} - VARS: .nais/vars/${{ matrix.environment }}.yaml + - name: 'Build npm project' + uses: navikt/sosialhjelp-ci/actions/build-npm@main + with: + node-version: 20 + build-less: 'false' + reader-token: ${{ secrets.READER_TOKEN }} + run-test: 'false' + run-orval: 'true' + + - name: 'Upload static files to cdn' + id: upload + uses: nais/deploy/actions/cdn-upload/v2@master + with: + team: teamdigisos + source: ./build/static + destination: "/sosialhjelp-soknad/_next" + project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }} + identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }} + + - name: Build and push docker image to GAR + uses: nais/docker-build-push@v0 + id: docker-build-push + with: + team: teamdigisos + identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }} + project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }} + image_suffix: ${{ matrix.environment }} + build_args: | + DIGISOS_ENV=${{ matrix.environment }} + build_secrets: | + NODE_AUTH_TOKEN=${{ secrets.READER_TOKEN }} + + - name: "Deploy to ${{ matrix.environment }}" + uses: nais/deploy/actions/deploy@v2 + env: + APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }} + RESOURCE: .nais/app.yaml + CLUSTER: ${{ matrix.cluster }} + REF: ${{ github.sha }} + PRINT_PAYLOAD: true + IMAGE: ${{ steps.docker-build-push.outputs.image }} + VARS: .nais/vars/${{ matrix.environment }}.yaml diff --git a/.github/workflows/build_deploy_gcp_prod.yml b/.github/workflows/build_deploy_gcp_prod.yml index 3cb634d06..2bc79d86d 100644 --- a/.github/workflows/build_deploy_gcp_prod.yml +++ b/.github/workflows/build_deploy_gcp_prod.yml @@ -23,6 +23,27 @@ jobs: steps: - uses: actions/checkout@v4 + - name: 'Build npm project' + uses: navikt/sosialhjelp-ci/actions/build-npm@main + env: + NEXT_PUBLIC_DIGISOS_ENV: prod + with: + node-version: 20 + build-less: 'false' + reader-token: ${{ secrets.READER_TOKEN }} + run-test: 'false' + run-orval: 'true' + + - name: 'Upload static files to cdn' + id: upload + uses: nais/deploy/actions/cdn-upload/v2@master + with: + team: teamdigisos + source: ./build/static + destination: "/sosialhjelp-soknad/_next" + project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }} + identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }} + - name: Build and push docker image to GAR uses: nais/docker-build-push@v0 id: docker-build-push diff --git a/.github/workflows/build_deploy_mock.yml b/.github/workflows/build_deploy_mock.yml index 69ec95d2f..969dc0393 100644 --- a/.github/workflows/build_deploy_mock.yml +++ b/.github/workflows/build_deploy_mock.yml @@ -41,6 +41,25 @@ jobs: run: | echo "IMAGE_TAG=${{ env.DOCKER_IMAGE }}:${{ needs.build-image.outputs.docker-tag }}" >> $GITHUB_ENV + - name: 'Build npm project' + uses: navikt/sosialhjelp-ci/actions/build-npm@main + with: + node-version: 20 + build-less: 'false' + reader-token: ${{ secrets.READER_TOKEN }} + run-test: 'false' + run-orval: 'true' + + - name: 'Upload static files to cdn' + id: upload + uses: nais/deploy/actions/cdn-upload/v2@master + with: + team: teamdigisos + source: ./build/static + destination: "/sosialhjelp-soknad/_next" + project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }} + identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }} + - name: Deploy til ${{ env.NEXT_PUBLIC_DIGISOS_ENV }} uses: nais/deploy/actions/deploy@v2 env: diff --git a/.github/workflows/build_dev_image.yml b/.github/workflows/build_dev_image.yml index 1105a76bc..46ce7ca19 100644 --- a/.github/workflows/build_dev_image.yml +++ b/.github/workflows/build_dev_image.yml @@ -1,22 +1,41 @@ name: "Build dev-sbs Image" on: - workflow_dispatch: + workflow_dispatch: jobs: - build-image: - name: "Build dev-sbs Image" - runs-on: ubuntu-latest - permissions: - contents: write - packages: write - actions: write - env: - NEXT_PUBLIC_DIGISOS_ENV: dev-sbs - DOCKER_IMAGE: ghcr.io/${{ github.repository }}/${{ github.event.repository.name }} - READER_TOKEN: ${{ secrets.READER_TOKEN }} - WORKFLOW_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - name: "Build Docker Image" - uses: navikt/sosialhjelp-soknad/.github/actions/build-image@master - with: - prefix: ${{ env.NEXT_PUBLIC_DIGISOS_ENV }} + build-image: + name: "Build dev-sbs Image" + runs-on: ubuntu-latest + permissions: + contents: write + packages: write + actions: write + env: + NEXT_PUBLIC_DIGISOS_ENV: dev-sbs + DOCKER_IMAGE: ghcr.io/${{ github.repository }}/${{ github.event.repository.name }} + READER_TOKEN: ${{ secrets.READER_TOKEN }} + WORKFLOW_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: 'Build npm project' + uses: navikt/sosialhjelp-ci/actions/build-npm@main + with: + node-version: 20 + build-less: 'false' + reader-token: ${{ secrets.READER_TOKEN }} + run-test: 'false' + run-orval: 'true' + + - name: 'Upload static files to cdn' + id: upload + uses: nais/deploy/actions/cdn-upload/v2@master + with: + team: teamdigisos + source: ./build/static + destination: "/sosialhjelp-soknad/_next" + project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }} + identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }} + + - name: "Build Docker Image" + uses: navikt/sosialhjelp-soknad/.github/actions/build-image@master + with: + prefix: ${{ env.NEXT_PUBLIC_DIGISOS_ENV }} diff --git a/.github/workflows/build_prod_image.yml b/.github/workflows/build_prod_image.yml index f0c7e6d21..ebe2f42bc 100644 --- a/.github/workflows/build_prod_image.yml +++ b/.github/workflows/build_prod_image.yml @@ -1,28 +1,45 @@ name: Build prod-sbs image - HUSK MANUELL DEPLOY TIL PROD! on: - workflow_run: - workflows: ["Build code and run test"] - branches: - - master - - 'pre-next' - types: - - completed + workflow_run: + workflows: [ "Build code and run test" ] + branches: + - master + - 'pre-next' + types: + - completed jobs: - build-image: - name: "Build prod-sbs Image" - runs-on: ubuntu-latest - permissions: - contents: write - packages: write - actions: write - env: - NEXT_PUBLIC_DIGISOS_ENV: prod-sbs - DOCKER_IMAGE: ghcr.io/${{ github.repository }}/${{ github.event.repository.name }} - READER_TOKEN: ${{ secrets.READER_TOKEN }} - WORKFLOW_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - name: "Build Docker Image" - uses: navikt/sosialhjelp-soknad/.github/actions/build-image@master - with: - prefix: ${{ env.NEXT_PUBLIC_DIGISOS_ENV }} + build-image: + name: "Build prod-sbs Image" + runs-on: ubuntu-latest + permissions: + contents: write + packages: write + actions: write + env: + NEXT_PUBLIC_DIGISOS_ENV: prod-sbs + DOCKER_IMAGE: ghcr.io/${{ github.repository }}/${{ github.event.repository.name }} + READER_TOKEN: ${{ secrets.READER_TOKEN }} + WORKFLOW_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: 'Build npm project' + uses: navikt/sosialhjelp-ci/actions/build-npm@main + with: + node-version: 20 + build-less: 'false' + reader-token: ${{ secrets.READER_TOKEN }} + run-test: 'false' + run-orval: 'true' + - name: 'Upload static files to cdn' + id: upload + uses: nais/deploy/actions/cdn-upload/v2@master + with: + team: teamdigisos + source: ./build/static + destination: "/sosialhjelp-soknad/_next" + project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }} + identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }} + - name: "Build Docker Image" + uses: navikt/sosialhjelp-soknad/.github/actions/build-image@master + with: + prefix: ${{ env.NEXT_PUBLIC_DIGISOS_ENV }} diff --git a/Dockerfile b/Dockerfile index eac903389..8fecdb012 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,51 +1,21 @@ -# NB: Når Node-versjon endres, bør samme endring også gjøres i: -# - .nvmrc -# - .github/dependabot.yml (fjern versjonspin for docker) -# - packages.json under "engines" (her leter dependabot npm) -# - .ncurc.js (automatiske oppdateringer for node-types) -# pt er vi på node 18 fordi ellers plager dekoratoren oss med "body has already been consumed" -FROM node:18-alpine AS dependencies - -WORKDIR /app -COPY package.json . -COPY package-lock.json . -COPY .npmrc.dockerbuild .npmrc - -RUN --mount=type=secret,id=NODE_AUTH_TOKEN NODE_AUTH_TOKEN=$(cat /run/secrets/NODE_AUTH_TOKEN) \ - npm ci --prefer-offline --no-audit - -FROM node:18-alpine AS builder +FROM gcr.io/distroless/nodejs20-debian11 AS runtime ARG DIGISOS_ENV -ARG LOGIN_SESSION_API_URL -ARG LOGOUT_URL + ENV NEXT_PUBLIC_DIGISOS_ENV=${DIGISOS_ENV} -ENV LOGIN_SESSION_API_URL=${LOGIN_SESSION_API_URL} -ENV LOGOUT_URL=${LOGOUT_URL} WORKDIR /app -COPY --from=dependencies /app/node_modules/ node_modules/ -COPY . . - -RUN npm run orval -RUN npm run build -RUN npm prune --production - -FROM gcr.io/distroless/nodejs18-debian12 AS runner +COPY package.json /app/ +COPY next-logger.config.js /app/ +COPY .next/standalone /app/ +COPY public /app/public/ -ARG DIGISOS_ENV +EXPOSE 8080 -ENV NEXT_PUBLIC_DIGISOS_ENV=${DIGISOS_ENV} +ENV NODE_ENV=production ENV PORT=8080 ENV HOSTNAME=0.0.0.0 -ENV NODE_ENV=production - -WORKDIR /app - -COPY --from=builder --chown=1069:1069 /app/build build -COPY --from=builder /app/node_modules/ node_modules/ -COPY package.json . -COPY . . +#ENV NODE_OPTIONS '-r next-logger' -CMD ["./node_modules/next/dist/bin/next", "start"] \ No newline at end of file +CMD ["server.js"] diff --git a/next.config.mjs b/next.config.mjs index b18ec8200..c9f839964 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -8,6 +8,8 @@ const nextConfig = { basePath: "/sosialhjelp/soknad", // For å unngå issues med nginx trailingSlash: false, + output: "standalone", + assetPrefix: process.env.DIGISOS_ENV === "localhost" ? undefined : "https://cdn.nav.no/teamdigisos/sosialhjelp-soknad", experimental: { optimizePackageImports: ["@navikt/ds-react", "@navikt/aksel-icons"], },