Files
web/.docker/Dockerfile.release
2025-01-09 17:20:42 -08:00

42 lines
1.1 KiB
Docker

# Stage 1: Build and install dependencies
FROM node:22-alpine AS builder
WORKDIR /app
# Install necessary dependencies, including pnpm
RUN set -eux \
&& apk add --no-cache nodejs curl \
&& npm install -g pnpm
# Copy package files
COPY package.json pnpm-lock.yaml ./
# Set build arguments
ARG CONTAINER_WEB_VERSION
ARG ENVIRONMENT
ARG BUILD_DATE
ARG GIT_COMMIT
# Create .env file with build-time environment variables
RUN echo "PUBLIC_VERSION=${CONTAINER_WEB_VERSION}" > /app/.env && \
echo "PUBLIC_ENVIRONMENT=${ENVIRONMENT}" >> /app/.env && \
echo "PUBLIC_BUILD_DATE=${BUILD_DATE}" >> /app/.env && \
echo "PUBLIC_GIT_COMMIT=${GIT_COMMIT}" >> /app/.env
# Install dependencies (including development dependencies) and build the project
RUN pnpm install --frozen-lockfile && pnpm run build
# Stage 2: Set up the production environment
FROM node:22-alpine
WORKDIR /app
# Expose the port for the application
EXPOSE 3000
# Copy the build artifacts from the builder stage
COPY --from=builder /app/dist ./dist
# Set the command to run the application
CMD ["node", "./dist/server/entry.mjs"]