separate Docker files from Moda & Azure (#53633)
This commit is contained in:
@@ -123,6 +123,7 @@ jobs:
|
||||
uses: docker/build-push-action@16ebe778df0e7752d2cfcbd924afdbbd89c1a755
|
||||
with:
|
||||
context: .
|
||||
file: Dockerfile.azure
|
||||
push: true
|
||||
target: preview
|
||||
tags: ${{ env.DOCKER_IMAGE }}
|
||||
|
||||
@@ -174,6 +174,7 @@ jobs:
|
||||
uses: docker/build-push-action@16ebe778df0e7752d2cfcbd924afdbbd89c1a755
|
||||
with:
|
||||
context: .
|
||||
file: Dockerfile.azure
|
||||
push: true
|
||||
target: ${{ steps.with-translations.outputs.result == 'true' && 'production' || 'preview' }}
|
||||
tags: ${{ env.DOCKER_IMAGE }}
|
||||
|
||||
@@ -104,6 +104,7 @@ jobs:
|
||||
uses: docker/build-push-action@16ebe778df0e7752d2cfcbd924afdbbd89c1a755
|
||||
with:
|
||||
context: .
|
||||
file: Dockerfile.azure
|
||||
push: true
|
||||
target: production
|
||||
tags: ${{ env.DOCKER_IMAGE }}, ${{ env.DOCKER_IMAGE_CACHE_REF }}
|
||||
|
||||
@@ -94,6 +94,7 @@ jobs:
|
||||
uses: docker/build-push-action@16ebe778df0e7752d2cfcbd924afdbbd89c1a755
|
||||
with:
|
||||
context: .
|
||||
file: Dockerfile.azure
|
||||
push: true
|
||||
target: production
|
||||
tags: ${{ env.DOCKER_IMAGE }}
|
||||
|
||||
@@ -71,6 +71,7 @@ jobs:
|
||||
uses: docker/build-push-action@16ebe778df0e7752d2cfcbd924afdbbd89c1a755
|
||||
with:
|
||||
context: .
|
||||
file: Dockerfile.azure
|
||||
push: true
|
||||
target: preview
|
||||
tags: ${{ env.DOCKER_IMAGE_CACHE_REF }}
|
||||
|
||||
112
Dockerfile.azure
Normal file
112
Dockerfile.azure
Normal file
@@ -0,0 +1,112 @@
|
||||
# This Dockerfile is used for docker-based deployments to Azure for both preview environments and production
|
||||
|
||||
# --------------------------------------------------------------------------------
|
||||
# BASE IMAGE
|
||||
# --------------------------------------------------------------------------------
|
||||
# To update the sha, run `docker pull node:$VERSION-alpine`
|
||||
# look for something like: `Digest: sha256:0123456789abcdef`
|
||||
FROM node:22-alpine@sha256:c13b26e7e602ef2f1074aef304ce6e9b7dd284c419b35d89fcf3cc8e44a8def9 AS base
|
||||
|
||||
# This directory is owned by the node user
|
||||
ARG APP_HOME=/home/node/app
|
||||
|
||||
# Make sure we don't run anything as the root user
|
||||
USER node
|
||||
|
||||
WORKDIR $APP_HOME
|
||||
|
||||
|
||||
# ---------------
|
||||
# ALL DEPS
|
||||
# ---------------
|
||||
FROM base AS all_deps
|
||||
|
||||
COPY --chown=node:node package.json package-lock.json ./
|
||||
|
||||
RUN npm ci --no-optional --registry https://registry.npmjs.org/
|
||||
|
||||
# For Next.js v12+
|
||||
# This the appropriate necessary extra for node:VERSION-alpine
|
||||
# Other options are https://www.npmjs.com/search?q=%40next%2Fswc
|
||||
RUN npm i @next/swc-linux-x64-musl --no-save || npm i @next/swc-linux-arm64-musl --no-save
|
||||
|
||||
|
||||
# ---------------
|
||||
# PROD DEPS
|
||||
# ---------------
|
||||
FROM all_deps AS prod_deps
|
||||
|
||||
RUN npm prune --production
|
||||
|
||||
|
||||
# ---------------
|
||||
# BUILDER
|
||||
# ---------------
|
||||
FROM all_deps AS builder
|
||||
|
||||
COPY src ./src
|
||||
# The star is because it's an optional directory
|
||||
COPY .remotejson-cache* ./.remotejson-cache
|
||||
# The star is because it's an optional file
|
||||
COPY .pageinfo-cache.json.br* ./.pageinfo-cache.json.br
|
||||
# Certain content is necessary for being able to build
|
||||
COPY content/index.md ./content/index.md
|
||||
COPY content/rest ./content/rest
|
||||
COPY data ./data
|
||||
|
||||
COPY next.config.js ./next.config.js
|
||||
COPY tsconfig.json ./tsconfig.json
|
||||
|
||||
RUN npm run build
|
||||
|
||||
# --------------------------------------------------------------------------------
|
||||
# PREVIEW IMAGE - no translations
|
||||
# --------------------------------------------------------------------------------
|
||||
|
||||
FROM base AS preview
|
||||
|
||||
# Copy just prod dependencies
|
||||
COPY --chown=node:node --from=prod_deps $APP_HOME/node_modules $APP_HOME/node_modules
|
||||
|
||||
# Copy our front-end code
|
||||
COPY --chown=node:node --from=builder $APP_HOME/.next $APP_HOME/.next
|
||||
|
||||
# We should always be running in production mode
|
||||
ENV NODE_ENV=production
|
||||
|
||||
# Preferred port for server.js
|
||||
ENV PORT=4000
|
||||
|
||||
ENV ENABLED_LANGUAGES="en"
|
||||
|
||||
# This makes it possible to set `--build-arg BUILD_SHA=abc123`
|
||||
# and it then becomes available as an environment variable in the docker run.
|
||||
ARG BUILD_SHA
|
||||
ENV BUILD_SHA=$BUILD_SHA
|
||||
|
||||
# Copy only what's needed to run the server
|
||||
COPY --chown=node:node package.json ./
|
||||
COPY --chown=node:node assets ./assets
|
||||
COPY --chown=node:node content ./content
|
||||
COPY --chown=node:node src ./src
|
||||
COPY --chown=node:node .remotejson-cache* ./.remotejson-cache
|
||||
COPY --chown=node:node .pageinfo-cache.json.br* ./.pageinfo-cache.json.br
|
||||
COPY --chown=node:node data ./data
|
||||
COPY --chown=node:node next.config.js ./
|
||||
COPY --chown=node:node tsconfig.json ./
|
||||
|
||||
EXPOSE $PORT
|
||||
|
||||
CMD ["node_modules/.bin/tsx", "src/frame/server.ts"]
|
||||
|
||||
# --------------------------------------------------------------------------------
|
||||
# PRODUCTION IMAGE - includes all translations
|
||||
# --------------------------------------------------------------------------------
|
||||
FROM preview AS production
|
||||
|
||||
# Override what was set for previews
|
||||
# Make this match the default of `Object.keys(languages)` in src/languages/lib/languages.js
|
||||
ENV ENABLED_LANGUAGES "en,zh,es,pt,ru,ja,fr,de,ko"
|
||||
|
||||
# Copy in all translations
|
||||
COPY --chown=node:node translations ./translations
|
||||
Reference in New Issue
Block a user